Ubuntu + word2vecで日本語版wikipediaを自然言語処理してみた

Facebook にシェア
Pocket
LINEで送る
このエントリーを Google ブックマーク に追加

前回に引き続き。

[amazonjs asin=”4339027510″ locale=”JP” title=”言語処理のための機械学習入門 (自然言語処理シリーズ)”]

 

関連パッケージをインストール

前回と重複しているパッケージもあるけど、一応下記をインストール。
MeCabは品詞分解するときに利用。

[shell] apt-get install -y git autoconf bison build-essential libssl-dev libyaml-dev libreadline6-dev zlib1g-dev libncurses5-dev libffi-dev libgdbm3 libgdbm-dev mecab mecab-naist-jdic
[/shell]

 

rbenv環境を構築

wikipediaのデータを処理するのにrubyのライブラリのwp2txtを使うため、rbenvをインストールする。

[shell] cd
git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
vi ~/.bashrc
[/shell] [shell title=”.bashrcの内容”] export PATH="$HOME/.rbenv/bin:$PATH"
[/shell] [shell] source ~/.bashrc
[/shell] [shell title=”ruby2.2.4をインストール”] rbenv install –list
rbenv install 2.2.4
rbenv local 2.2.4
rbenv global 2.2.4
rbenv exec gem install wp2txt bundler
rbenv rehash
[/shell]

 

日本語wikipediaのデータをダウンロード

ここからwikipediaのデータがダウンロードできるので、wgetで
[shell] cd ~/trunk
mkdir wikipedia
cd wikipedia
curl https://dumps.wikimedia.org/jawiki/latest/jawiki-latest-pages-articles.xml.bz2 -o jawiki-latest-pages-articles.xml.bz2
[/shell]

 

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

[shell] rbenv exec wp2txt –input-file jawiki-latest-pages-articles.xml.bz2
[/shell]

 

テキストに変換したWikipediaのデータを品詞分解する

MeCabを使って、品詞分解をしてwakati.txtに出力する。ファイルが膨大な大きさになっているため、headコマンドで一応内容を確認する。

[shell] cat jawiki-latest-pages-articles.xml*.txt | mecab -Owakati -b 81920 > wakati.txt
ls -l wakati.txt
-rw-r–r– 1 umentu umentu 6456527441 12月 19 06:37 wakati.txt
head wakati.txt

[ [ アンパサンド ] ]

アンパサンド ( ampersand , & ) と は 「 … と … 」 を 意味 する 記号 で ある 。 英語 の " and " に 相当 する ラテン語 の " e t " の 合 字 で 、 " etc . " ( e t cetera = and s o forth ) を "& c . " と 記述 する こと が ある の は その ため 。 Trebuchet M S フォント で は 、 1 0 px と 表示 さ れ " e t " の 合 字 で ある こと が 容易 に わかる 。

= = 歴史 = =

その 使用 は 1 世紀 に 遡る こと が でき ( 1 ) 、 5 世紀 中葉 ( 2 , 3 ) から 現代 ( 4 – 6 ) に 至る まで の 変遷 が わかる 。

Z に 続く ラテン 文字 アルファベット の 2 7 字 目 と さ れ た 時 期 も ある 。
[/shell]

 

word2vecに学習させる

wakati.txtの内容をword2vecに学習させる。PCのスペックによって膨大な時間がかかるので注意。3時間ほどかかった。

[shell] time ../word2vec -train wakati.txt .output wiki.bin -size 200 -window 5 -sample 1e-3 -negative 5 -hs 0 -binary 1
[/shell]

オプションは以下の通り。

-window: 指定した数値の分だけ、単語の前後にある単語を文脈として判断させる
-sample: ランダムに頻出単語を消去する。1e-3は「頻出度が高め」 の意味。
-negative: ランダムに間違った解答として判断させる
-hs: Use Hierarchical Softmax?word2vecの仕組みを理解してないとわからなかった。
-binary: 結果をバイナリとして保存する

 

試してみる

distanceを使って実行する。
「Enter word or sentence (EXIT to break):」が表示されたら、好きなワードを入力すると関連するワードが表示される。

[shell] ../distance wiki.bin
パソコン
Word: パソコン Position in vocabulary: 3608
Word Cosine distance
————————————————————————
パーソナルコンピュータ 0.764240
コンピューター 0.758330
コンピュータ 0.750865
電卓 0.701924
PDA 0.699686
タブレット 0.687180
マイコン 0.681690
アプリケーション 0.680706
ノートブック 0.678845
端末 0.675508
ソフトウェア 0.674676
メインフレーム 0.671590
Macintosh 0.667261
マイクロコンピュータ 0.663744
ワークステーション 0.659894
プリンター 0.658573
インターネット 0.657802
ソフト 0.654141
デバイス 0.650028
プリンタ 0.649079

[/shell]

学習させるファイルを変えるだけで学習する内容が変わるため、いろいろ試したいところ。

Related posts

One Thought to “Ubuntu + word2vecで日本語版wikipediaを自然言語処理してみた”

コメントを残す