word2vecをmacosXで使った時のメモ

word2vecのインストールからcos類似度出すところまでのメモ。

 

例えば、以下のページを参考に。
https://nzigen.com/ysawa/word2vec-install/

word2vecをインストールしてmake
git clone https://github.com/svn2github/word2vec.git

上記のページ(https://nzigen.com/ysawa/word2vec-install/)には、makeが通らないとあります。
makeした時のエラーを見てわかると思うけど、
原因は、malloc.hがないということ。
ただ、macの場合は、malloc.hをstdlib.hに書き換えることで解決できると以下のページに書いてあった。
http://blog.tottokug.com/entry/2014/04/17/160603

 

makeしてエラーが出るのは以下の3つ。これらの中にあるmalloc.hをstdlib.hに書き換える。
distance.c
word-analogy.c
compute-accuracy.c

 

vimで置換処理するなら、
%s/malloc.h/stdlib.h/g
以下のページを参考。
http://qiita.com/waoooon/items/8d982e49692c8145ca4b

これで、makeが通った。

 

 

当たり前だけど、
単語をベクトル化するためには、文書が必要です。
http://m0t0k1ch1st0ry.com/blog/2016/08/28/word2vec/
ここのページを参考に青空文庫の「老人と海」を取ってきた。
けど、unzipがうまくいかないので、結局
http://www.aozora.gr.jp/cards/001847/files/57347_57224.html
の文字をコピペして、utf-8形式のtextファイル”roujin_umi.txt”にした(おい)。
いやあ、unzipのところも解決しようとしたんだけど、
時間がまあまあかかりそうだったので、とりあえずは、ね。

 

で、
http://sucrose.hatenablog.com/entry/2012/07/11/175721
を参考に、以下をターミナルで実行。
cat roujin_umi.txt | mecab -F"%f[6] " -U"%m " -E"\n" > wakati_roujin.txt
上記コマンドの意味は、テキストファイルをcatした中身を原形の分かち書きにするということ。
分かち書きしたものが、wakati_roujin.txt

 

ふうう、やっと準備ができた。
それでは、word2vecに掛けるよ。
コマンドには、オプションがいろいろあって、ページによって人によって、いろいろやってる。
ここでは、
http://qiita.com/quvo/items/9ef250d58971eadf6e1a
を参考にした。
で、そのコマンドが以下。
time ./word2vec -train wakati_roujin.txt -output output.bin -cbow 0 -size 200 -window 5 -negative 0 -hs 1 -sample 1e-3 -binary 1

 

output.binというものが出てきます。
output.binを使って、cos類似度を出します。
./distance output.bin

 

ここで、冒頭に書いたdistanceを使うんですねえ。(なので、冒頭のエラーを無視すると、cos類似度が出せない。)

 

で、
Enter word or sentence (EXIT to break):
と聞かれるので、気になるワードとの距離を見てみましょう。ここでは、「老人」でやってみました。
Word: 老人 Position in vocabulary: 21

Word Cosine distance
------------------------------------------------------------------------
出る 0.734239
生まれる 0.730401
はっきり 0.716233
逃げる 0.714332
泣く 0.709535
通り 0.705360
小鳥 0.701028
自身 0.694294
(出力が長いのでここでは、上位の方だけ示しました)

 

以上です。
お役に立てれば、幸いです。

今後の課題としては、
・unzipのところを解決せねば。
pythonから使えるようにせねば。

 

これに限らず、
macだといろいろ対応大変なので、
Ubuntuにしようかなと思った。

 

追記。こちらのページが参考になる。

qiita.com