##やること
「単語をベクトル化する」とか「単語分散表現」とかよく聞きます。文章の中の単語を単語同士で機械学習でいろいろ比較して、その特徴を次元で表すという手法です。「日本 - 東京 + フランス = パリ」のような単語同士の計算もできるようになるそうです。面白そう。
2020年6月現在、特にMac環境でやる場合にword2vecをスルッと導入するためのメモです。
##環境
- Linux系
- 手元の環境はMacですがwindowsやラズパイなどでもOK。
##やり方
word2vecをインストールする
(参考)https://qiita.com/yuichi_tr/items/cb885a022b8e2233d097
$ git clone https://github.com/svn2github/word2vec.git
$ cd word2vec
$ make
word2vecをgitからダウンロードしインストールしていきます。
Macの場合で $ makeの後に 'malloc.h' file not found ... #include <malloc.h > とエラーが出る場合は、ライブラリ名の違いを修正する必要がありますので下記を参考に書き換えます。
(参考)https://note.com/nozomukubota/n/nd3727c2354f9
具体的には、nanoやvimのエディタでdistance.c、word-analogy.c、compute-accuracy.c の各ファイルの中にある #include <malloc.h > を #include <stdlib.h > に書き換えます。書き換えたら再度 $ make します。makeが通ればインストール成功です。
$ chmod +x *.sh
シェルスクリプトに実行権を追加しておきます。
デモ用のテキストデータをダウンロードする
$ curl -O http://mattmahoney.net/dc/text8.zip >text8.zip
または $ wget http://mattmahoney.net/dc/text8.zip >text8.zip
text8という機械学習用のテキストデータをダウンロードします。
$ unzip text8.zip
ダウンロードしたら解凍します。
これでもうデモを試せるようになります。
ちなみにtext8はwikipediaを元にした7万単語ほどのテキストデータです。テキストファイル形式になっており、中をのぞいて見ると単語がスペース区切りで延々と並んでいるのがわかります。
word2vecのデモを試す
$ ./demo-word.sh
さきほどダウンロードしたtext8というコーパスを使ってのデモです。実行するとまずword2vecがベクトル計算を行います。Progress:XX.XX%と進捗が表示されるので、気長に待ちます。
(手元のMacBookAirはすぐ熱くなるので外から扇風機を当ててます。)
計算終了後、自動的にデモ立ち上がります。
アルファベットでキーワードを入力すると、類似語が出ます。
$ Enter word or sentence (EXIT to break): soba
Word: soba Position in vocabulary: 46018
Word Cosine distance
-----------------------------------------------------
udon 0.676965
noodles 0.642184
broth 0.630183
tofu 0.622382
steamed 0.619639
ramen 0.598241
buckwheat 0.581692
wonton 0.564115
stew 0.563284
(以下略)
ためしにsobaと入力してみると、上記のように結果が出力されます。単語ベクトル空間においてsobaに一番似ている(コサイン類似度が近い)のはudonだそうです。
EXITと入力することで終了できます。
続いてword-analogyも試してみます。
$ ./word-analogy vectors.bin
ここで指定されているvectors.binというのは、さきほどtext8からword2vecで生成されたベクトルデータです。
実行すると単語を3つ入力するように指示が出ますので、スペース区切りでjapan tokyo spainと入力してみます。
Enter three words (EXIT to break): japan tokyo spain
Word: japan Position in vocabulary: 582
Word: tokyo Position in vocabulary: 4909
Word: spain Position in vocabulary: 804
Word Distance
-----------------------------------------------------
madrid 0.546240
toledo 0.543838
lleida 0.513116
(以下略)
japan tokyo spainに関係するのはmadridである可能性が高いとの結果が出ました。
おわり
word2vecが動いて一安心。
こうなってくると日本語でもいろいろ試したくなってきます。
次は日本語データの作成に挑戦してみます。