環境
OS X El Capitan 10.11.5
MacBook Pro (Retina 13-inch、Early 2015)
[2016/8/1現在]
MeCab, mecab-ipadic-NEologd のインストール
MeCabはオープンソースの日本語形態素解析ソフトです。
mecab-ipadic-neologdは、Web上のリソースから新しい言葉を登録したMecab用の辞書のことです。さらに、定期的に新しい言葉をアップデートするので、最新の言葉を正しく形態素解析をすることができます。
必要なライブラリをインストール
brew install mecab mecab-ipadic git curl xz
git clone --depth 1 https://github.com/neologd/mecab-ipadic-neologd.git
cd mecab-ipadic-neologd
./bin/install-mecab-ipadic-neologd
ipadicインストール先の確認法
echo `mecab-config --dicdir`"/mecab-ipadic-neologd"
自分の環境では
/usr/local/lib/mecab/dic/mecab-ipadic-neologd
となりました。
実行方法
$ mecab -d /usr/local/lib/mecab/dic/mecab-ipadic-neologd
[文章を入力]
MeCab コマンドライン引数 一覧
http://www.mwsoft.jp/programming/munou/mecab_command.html
mecab-ipadic-NEologdを使うとどうなるの?
例として、「なのはちゃんがケチなのは仕方ない」という例文を形態素解析してみます。
普通のMeCab
mecab-ipadic-NEologdを辞書としたMeCab
普通のMeCabでは「なのはちゃん」を認識することができず、名詞の"なのは"とそうでない"なのは"が一緒になっています。
一方、mecab-ipadic-NEologdを使用すると、きちんと「なのはちゃん」が認識されています。
これ以外にも、
・なのは ― 「魔法少女リリカルなのは」というアニメの登場人物
・はがない ― 「僕は友達が少ない」の略称
・がをられ ― 「彼女がフラグをおられたら」の略称
・はにはに ― 「月は東に日は西に」の略称
・けよりな ― 「夜明け前より瑠璃色な」の略称
上記の様な、判別が難しい語も正しく形態素解析できる様になります。
日本語wikipediaのデータをダウンロード
2.2GBぐらいのサイズがあります。
curl https://dumps.wikimedia.org/jawiki/latest/jawiki-latest-pages-articles.xml.bz2 -o jawiki-latest-pages-articles.xml.bz2
wikipediaのデータをテキストに変換する
wikipediaのデータファイルはXMLで記述されてているので、それを普通のテキストファイルに変換しなければならない。
rubyのインストール
brew rbenv ruby-build
次の2行を、.bash_prifileに記述
export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"
これらを反映させる。
source .bash_profile
rbenvを使って、ruby等をインストール
rbenv install --list
rbenv install 2.3.1
rbenv local 2.3.1
rbenv global 2.3.1
rbenv exec gem install wp2txt bundler
rbenv rehash
rubyがインストールできたら、wikipediaのデータをテキストファイルに変換します。
rbenv exec wp2txt --input-file jawiki-latest-pages-articles.xml.bz2
1時間弱かかります。
これが終わると、20個ほどのファイルが生成されるので、それらを一つのファイルにまとめます。
cat jawiki-latest-pages-articles.xml-* > jawiki_wakati.txt
これで、トレーニング用のデータセットの完成です。
word2vecのダウンロード
どうやらsubversionを使ってダウンロードすると、URL not foundになってしまい、リモートレポジトリが死んでいる様子。
同じものがgithubにあるのでそこから拾ってきます。
git clone https://github.com/svn2github/word2vec.git
cd word2vec
make
./demo-word.sh
Macにインストールする際には、以下のようなエラーが出ます。
$ cd word2vec
$ make
gcc word2vec.c -o word2vec -lm -pthread -O3 -march=native -Wall -funroll-loops -Wno-unused-result
gcc word2phrase.c -o word2phrase -lm -pthread -O3 -march=native -Wall -funroll-loops -Wno-unused-result
gcc distance.c -o distance -lm -pthread -O3 -march=native -Wall -funroll-loops -Wno-unused-result
distance.c:18:10: fatal error: 'malloc.h' file not found
#include <malloc.h>
^
1 error generated.
make: *** [distance] Error 1
malloc.hが無いよーというエラー。
macOSではmalloc.hではなくstdlib.hを使うので、以下のファイルのincludeを変更。
- compute-accuracy.c
- distance.c
- word-analogy.c
// #include <malloc.h>
#include <stdlib.h>
その後、再度ビルドすればインストールできます。
demo-word.shでデモコード
demo-word.shはLinux用なので、Macでは動きません。
以下に同じ様なことを実行するコードを示します。
text8というコーパス用のファイルを取得します。
curl http://mattmahoney.net/dc/text8.zip > text8.zip
unzip text8.zip
学習
word2vecがあるディレクトリにtext8をコピーしてから、ターミナルで以下を実行します。
./word2vec -train text8 -output vectors.bin -cbow 1 -size 200 -window 8 -negative 25 -hs 0 -sample 1e-4 -threads 20 -binary 1 -iter 15
vectors.binというファイルが生成されれば成功です。
デモコードを実行します
./distance vectors.bin
wikipediaデータの学習
./word2vec -train jawiki_wakati.txt -output jawiki_wakati.bin -size 200 -window 5 -sample 1e-3 -negative 5 -hs 0 -binary 1
オプション
-window: 指定した数値の分だけ、単語の前後にある単語を文脈として判断させる
-sample: ランダムに頻出単語を消去する。1e-3は「頻出度が高め」 の意味。
-negative: ランダムに間違った解答として判断させる
実行例
参考URL
http://b.amberfrog.net/post/105527194822/os-x%E3%81%A7word2vec%E3%82%92%E8%A9%A6%E3%81%97%E3%81%A6%E3%81%BF%E3%81%9F
http://blog.umentu.work/ubuntu-word2vec%E3%81%A7%E6%97%A5%E6%9C%AC%E8%AA%9E%E7%89%88wikipedia%E3%82%92%E8%87%AA%E7%84%B6%E8%A8%80%E8%AA%9E%E5%87%A6%E7%90%86%E3%81%97%E3%81%A6%E3%81%BF%E3%81%9F/