どうも〜。 私、社内の文章ファイルの自然言語解析を行っています。自然言語で機械学習を行うには、テキストをどのようにして数値化すればいいのかというのが最初に出てきます。N-gram、BoW、TF-IDF、LDAなどなど、テキストを数値化する方法は割と多いです。数年前からは、ニューラルネットワークを用いたWord2Vecというのも出てきました。 私のほうの解析でも、このWord2Vecを使った数値化を行って機械学習を行っておりますので、今回は、その方法を紹介しようかと思います。正確には、Word2VecではなくDoc2Vecという手法であり、Word2Vecの応用技術です。 ここでは、Word2VecやDoc2Vecの詳細については省きますので、理論などを知りたい方は、以下のリンクを参照して下さい。
Doc2Vecの仕組みとgensimを使った文書類似度算出チュートリアル
開発環境
- Ubuntu 16.04 LTS / 64bit
- Python3.6
- MeCab (形態素解析器)
- gensim (自然言語処理ライブラリ)
Wikipediaの全記事の取得
ここから、jawiki-latest-pages-articles.xml.bz2をダウンロードします。記事はXML形式になってます。
ダウンロードしたら以下のコマンドで解凍します。解凍すると容量がなんと11GB!
$ bzip2 -d jawiki-latest-pages-articles.xml.bz2
次に、Ruby製のツール「wp2txt」を利用します。このツールは、Wikipediaの全データ(XML)をテキストに変換してくれます。Ubuntu環境に「wp2txt」を用意するには、以下を実行して下さい。(Rubyのバージョンは最新のものを入れたほうが良いかもしれません。)
$ sudo apt-get install -y git
$ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
$ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
$ source ~/.bash_profile
$ Ruby2.0.0-p647をインストール
$ rbenv install 2.0.0-p647
$ rbenv global 2.0.0-p647
$ gem install wp2txt
wp2txtをインストールしたら、以下のコマンドを実行してXMLをテキストファイルに変換します。変換にはかなりの時間がかかります。
$ wp2txt --input-file ./jawiki-latest-pages-articles.xml
wp2txtで変換するとテキストが複数のファイルに分割されて保存されます。これらを1つのファイルにまとめます。以下のコマンドを実行すると巨大なテキストファイル(5.7GB)ができます。
$ cat jawiki-latest-pages-articles-* > wiki.txt
次に、テキストファイルを形態素解析して、テキストを分かち書きにします。形態素解析にはMeCabを使います。以下のコマンドを実行すると、分かち書きしたテキストファイル(6.6GB)ができます。(オプションでipadic-neologdを辞書指定しています。デフォルトの辞書でもできますが、ipadic-neologd辞書を使うと新語にも対応できるのでオススメです。)
$ mecab -O wakati -b 100000 -d /usr/lib/mecab/dic/mecab-ipadic-neologd wiki.txt -o wiki_wakati.txt
次回
今回はここまでにしておきます。Wikipediaの全記事を引っ張ってくるだけでもそれなりの労力がいることがご理解いただけたかと思いますw
いやホント、結構時間かかりましたからね〜。私のPCのCPUはCore i7 7700Kでかなりの高スペックなんですが、wp2txtの実行に2、3時間くらい要しましたし、mecabの処理にも1時間程要しましたよーorz なんで、皆さんがこれと同じことをやるとすると、半日以上はかかるんじゃないでしょうかね〜ww
ということで、次回は今回の続きのPart2を書こうかと思います。実は、WikipediaデータをそのままDoc2Vecで学習しようとすると................. まだまだ苦労がありますのでご期待下さいww