word2vecを試してみた
以前、 自然言語処理の最新手法"word2vec"で艦これ加賀さんから乳を引いてみる - あんちべ! を読んでいつか試してみたいと思ってたらO'reilly eBookが発売されたので買ってみた。
O'Reilly Japan - word2vecによる自然言語処理
以下メモ
試した環境
1. Subversionのインストール
word2vecのインストールはsvnでソースをチェックアウトしてコンパイルする必要があるのでSubversionをインストールする
$ sudo yum install subversion
$ svn checkout http://word2vec.googlecode.com/svn/trunk/
2. word2vecのインストール
自分の環境ではgccのバージョンが古くてmakeでエラーになった。
$ cd trunk $ make gcc word2vec.c -o word2vec -lm -pthread -Ofast -march=native -Wall -funroll-loops -Wno-unused-result cc1: error: invalid option argument ‘-Ofast’ cc1: 警告: unrecognized command line option "-Wno-unused-result" make: *** [word2vec] エラー 1
makefileに記載されている通り-Ofastを-O2に修正したら正常にコンパイルできた。
$ vi makefile (3行目の-Ofastを-O2に修正する) $ make gcc word2vec.c -o word2vec -lm -pthread -O2 -march=native -Wall -funroll-loops -Wno-unused-result gcc word2phrase.c -o word2phrase -lm -pthread -O2 -march=native -Wall -funroll-loops -Wno-unused-result gcc distance.c -o distance -lm -pthread -O2 -march=native -Wall -funroll-loops -Wno-unused-result gcc word-analogy.c -o word-analogy -lm -pthread -O2 -march=native -Wall -funroll-loops -Wno-unused-result gcc compute-accuracy.c -o compute-accuracy -lm -pthread -O2 -march=native -Wall -funroll-loops -Wno-unused-result chmod +x *.sh
3. デモの実行
デモを試してみる
$ ./demo-word.sh (中略) Starting training using file text8 Vocab size: 71290 Words in train file: 16718843 Alpha: 0.000121 Progress: 99.58% Words/thread/sec: 18.30k real 15m19.959s user 15m15.211s sys 0m3.126sEnter word or sentence (EXIT to break): paris france berlin Word: paris Position in vocabulary: 1055 Word: france Position in vocabulary: 303 Word: berlin Position in vocabulary: 1360 Word Cosine distance ------------------------------------------------------------------------ germany 0.641305 munich 0.623994 italy 0.604374 bonn 0.576762 switzerland 0.571837 commune 0.551926 vienna 0.540705 tempelhof 0.537556 hauptbahnhof 0.537206 belgium 0.530941 roissy 0.525079 (以下略)
paris + france - berlin = germany
という理解で良いのかな?
4. 金魚データで試してみる
金魚の品種の一覧 - WikipediaをスクレイピングしてMeCabで分かち書きしたデータで試してみる。
$ ./kingyo-word.sh Starting training using file word.txt Vocab size: 129 Words in train file: 2793 real 0m0.186s user 0m0.110s sys 0m0.067s Word: リュウキン Position in vocabulary: 67 Word Cosine distance ------------------------------------------------------------------------ もと 0.337724 も 0.261271 ) 0.249494 デメキン 0.245132 交配 0.237717 琉金 0.236579 に 0.235189 が 0.232049 呼ば 0.224686 の 0.223321 蘭 0.222148 。 0.219538 品種 0.217091 ある 0.216454 個体 0.212644 し 0.212374 アズマニシキ 0.210649 花房 0.210146 て 0.206729 せ 0.206413 色 0.206053 ため 0.202992 (以下略
出目金 - 眼球 = 琉金とか和金 + 黒 + 白 = キャリコとかできたら面白いなーと思ったけどテキストデータが少なすぎるのか助詞が多すぎるのか期待したような結果にならなかった。。。orz
面白そうなネタがあったらまた試してみる。