去年、これをやっていたのだが、色々あって他のことに関心が向かったために、使いきれずにおいていたが、もう一度やっておく。類語を抽出できるようになるまでのプロセスをメモがわりに書いておく。
前半は、http://ankaji92.hatenablog.com/entry/2016/11/27/212507を参考にさせていただいた。
まず、適当なフォルダを決めて、wikiの全文を取ってくる。
$ curl https://dumps.wikimedia.org/jawiki/latest/jawiki-latest-pages-articles.xml.bz2 -o jawiki-latest-pages-articles.xml.bz2
これを使えるように変換してまとめる。
$ git clone https://github.com/attardi/wikiextractor $ python3 wikiextractor/WikiExtractor.py jawiki-latest-pages-articles.xml.bz2
一カテゴリずつやっていくが、辛抱強く待つ。一つのファイルにまとめる。
$ cat text/*/* > jawiki.txt
分かち書きアプリのインストール。
$ brew install mecab $ mecab -Owakati jawiki.txt -o data.txt
前は、ここでrubyを使う方法を用いた記憶があるが、使わなくていいので、ここまでは、先の引用元にあるこの方法がいいと思う。次に、word2vecのインストールである。これについては、以下のサイトにある後半部分がc言語でやるとき便利だった。
$ git clone https://github.com/svn2github/word2vec.git
$ cd word2vec
$make
macの場合、malloc.hが無いと、叱られるので、
- compute-accuracy.c
- distance.c
- word-analogy.c
について、sodlib.hに変更する。そして、再度 make。
./word2vec -train data.txt -output jawiki_wakati.bin -size 200 -window 5 -sample 1e-3 -negative 5 -hs 0 -binary 1
data.txtは、先ほど作成したパスを指定し、word2vecも作成したパスを指定して実行する。オプションについては、適宜、webを参考にする。./distanceを、今作成したjawiki_wakati.binを指定して起動する。そして、単語を入力すると、類語のリストを出してくる。
./distance jawiki_wakati.bin Enter word or sentence (EXIT to break): コンビニ Word: コンビニ Position in vocabulary: 10735 Word Cosine distance ------------------------------------------------------------- コンビニエンスストア 0.809326 デイリーヤマザキ 0.685043 店舗 0.652178 スーパーマーケット 0.636046 ドラッグストア 0.628818 ミニストップ 0.620285 キオスク 0.604373 物販 0.603765 ブックオフ 0.599682 直営店 0.597540 ファミリーレストラン 0.597328 ローソン 0.594401 ファミリーマート 0.589032 売店 0.588488 ホームセンター 0.587499 キヨスク 0.587256 惣菜 0.574461 出店 0.572560 セイコーマート 0.568219 量販 0.559042 店 0.558693 飲食 0.557627 セルフサービス 0.555324 ファストフード 0.554968 NEWDAYS 0.554501 以下まだつづく・・・・・・
このdistanceのjava版を作らなければならない。面倒。