word2vecを試してみたが・・・の話
動機
少し前からword2vecの存在は知っていたけど、下記の理由で流していた
けど、下記の理由で触ってみようと思った。
word2vecについて
- 他の方のブログをよんでください
- googleの実装の公式は下記
インストール
- MAC OS X Mavericks にインストールした
手順
基本的には、公式サイトにある通り
- SVNチェックアウト
- チェックアウトしたディレクトリで、
make
する- しかし、エラーとなるので、compute-accuracy.c/distance.c/word-analogy.cのファイルを修正
#include <malloc.h>
を#include <malloc/malloc.h>
に変更- malloc.hの場所が変わったらしい
- しかし、エラーとなるので、compute-accuracy.c/distance.c/word-analogy.cのファイルを修正
- インストール完了
- コンソールで
word2vec
をうって、helpがでれば成功
使い方
mecabで形態素解析:word2devは空白区切りのテキストデータを学習データとするので、その形式にする
cat {元データ} | mecab --node-format="%f[6] " --eos-format="\n" > {mecabedデータ}
学習
word2vec -train {mecabedデータ} -output {train_result.bin} -window 10 -binary 1
分析
#単語間の距離 word2vec/distance {train_result.bin} #AにとってのBは、Cにとっての何か(B - A + C = ?) word2vec/word-analogy {train_result.bin}
ちょっとハマった点
analogyで複数単語を指定するときのスペースを全角にすると区切りを認識してくれない
ダメ
Enter three words (EXIT to break): い い お Only 1 words were entered.. three words are needed at the input to perform the calculation
OK
Enter three words (EXIT to break): い い お Word: い Position in vocabulary: 0 Out of dictionary word!
結果について:全く検証してないですが
- TwitterAPIで取得した100件を学習データとしてやってみたが、全然データが足りない
- Ngramとかよりも、ある程度のデータが必要だなーと思った
- analogyをうまく使うには、そもそものデータをどこから持ってくるのかを考えないといけない?
- 足し算・引き算を使えるようにするためには、ある程度、広範囲に言及しているテキストデータが必要な気がするなー