LoginSignup
144
122

More than 5 years have passed since last update.

word2vecを使って、日本語wikipediaのデータを学習する

Last updated at Posted at 2016-08-01

環境

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用の辞書のことです。さらに、定期的に新しい言葉をアップデートするので、最新の言葉を正しく形態素解析をすることができます。

必要なライブラリをインストール
terminal
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インストール先の確認法
terminal
echo `mecab-config --dicdir`"/mecab-ipadic-neologd"

自分の環境では

terminal
/usr/local/lib/mecab/dic/mecab-ipadic-neologd

となりました。

実行方法
terminal
$ 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ぐらいのサイズがあります。

terminal
curl https://dumps.wikimedia.org/jawiki/latest/jawiki-latest-pages-articles.xml.bz2 -o jawiki-latest-pages-articles.xml.bz2

wikipediaのデータをテキストに変換する

wikipediaのデータファイルはXMLで記述されてているので、それを普通のテキストファイルに変換しなければならない。

rubyのインストール

terminal
brew rbenv ruby-build

次の2行を、.bash_prifileに記述

.bash_profile
export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"

これらを反映させる。

terminal
source .bash_profile

rbenvを使って、ruby等をインストール

terminal
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のデータをテキストファイルに変換します。

terminal
rbenv exec wp2txt --input-file jawiki-latest-pages-articles.xml.bz2

1時間弱かかります。

これが終わると、20個ほどのファイルが生成されるので、それらを一つのファイルにまとめます。

terminal
cat jawiki-latest-pages-articles.xml-* > jawiki_wakati.txt

これで、トレーニング用のデータセットの完成です。

word2vecのダウンロード

どうやらsubversionを使ってダウンロードすると、URL not foundになってしまい、リモートレポジトリが死んでいる様子。

同じものがgithubにあるのでそこから拾ってきます。

terminal
git clone https://github.com/svn2github/word2vec.git
cd word2vec
make
./demo-word.sh

Macにインストールする際には、以下のようなエラーが出ます。

terminal
$ 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
c_file
// #include <malloc.h>
#include <stdlib.h>

その後、再度ビルドすればインストールできます。

demo-word.shでデモコード

demo-word.shはLinux用なので、Macでは動きません。
以下に同じ様なことを実行するコードを示します。

text8というコーパス用のファイルを取得します。

terminal
curl http://mattmahoney.net/dc/text8.zip > text8.zip
unzip text8.zip

学習

word2vecがあるディレクトリにtext8をコピーしてから、ターミナルで以下を実行します。

terminal
./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というファイルが生成されれば成功です。

デモコードを実行します

terminal
./distance vectors.bin

wikipediaデータの学習

terminal
 ./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/

144
122
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
144
122