gensimを使ったwikipediaのコーパス作成

ツイッターの男女判定(2013年4月2日の記事)のために、LDAを使ったテキストマイニングがやりたくなった。そのために、まず練習としてgensimを使ってwikipediaのコーパスを作成してみた。その手順メモ。


gensim関係のやってみたシリーズのリンク一覧


Python GensimでLDAを使うための前準備・パッケージのインストール

gensimを使ったwikipediaのコーパス作成

gensim0.8.6のチュートリアルをやってみた【コーパスとベクトル空間】

gensim0.8.6のチュートリアルをやってみた【Topics and Transformations】

gensim0.8.6のチュートリアルをやってみた【Similarity Queries】



LDAを使うためにはgensimを使うのが簡単らしい


LDA(Latent Dirichlet Allocations)を使うために現時点で一番簡単な方法は、pythonのgensimというパッケージを使う方法のようです。


gensimのインストール方法は、「Python GensimでLDAを使うための前準備・パッケージのインストール」に書いています。


この記事では、gensimに実装されたLDAを使ってツイッターの分析を行う手順を書いています。となるはずだったんですが、事前にやることが多かったのでそこまでいっていません…(^^)



gensimが正しくインストールされていることの確認


pythonは環境の準備がけっこうややこしいので、正しくインストールできていることの確認からやります。


numpy, scipy, gensimがpythonのインタープリターでエラーなくimportできれば、それぞれのパッケージは正しくインストールできています。


cd
python2.7

>>> import numpy
>>> import scipy
>>> import gensim

この時点でエラーが起きる場合は、「Python GensimでLDAを使うための前準備・パッケージのインストール」を参考に、関連するパッケージをインストールし直してみてください。


※すごく重要な注意点※

上記の記事では最新版のnumpy, scipy, gensimをインストールしていますが、日本語版wikipediaのコーパス作成にはgensim0.7.8を使う必要があります。


日本語版wikipediaのコーパス作成に他の人が作ってくださったpythonスクリプトを利用するのですが、そのスクリプトがgensim0.7.8にしか対応していないためです。


numpy, scipy, gensimは、最後にインストールしたバージョンが使われるっぽいです。


本記事では、英語版wikipediaのコーパス作成にはgensim0.8.6(最新版)日本語版wikipediaのコーパス作成にはgensim0.7.8を利用しています。



gensim0.8.6を使って英語版wikipediaのコーパスを作成する


ツイッターに対してLDAを適用するにしても事前の知識がなさすぎて色々意味不明なので、まずは、英語版(と日本語版)のwikipediaのコーパスを作成し、そのコーパスに対してtfidf, LSA, LDAを適用してみます。


英語版のコーパスと日本語版のコーパスを両方作る意味は特にない(日本語版だけでいい)のですが、gensimが正しくインストールできているかの確認のためにやった方が無難です。「公式チュートリアル」の手順通りにやります。


cd
wget http://dumps.wikimedia.org/enwiki/20130304/enwiki-20130304-pages-articles.xml.bz2

# これだけで実行すると、必要なオプションの情報が表示される
python2.7 -m gensim.scripts.make_wiki

# 改めて実行
python2.7 -m gensim.scripts.make_wiki enwiki-20130304-pages-articles.xml.bz2 output

# gensim0.8.6だとこれらのファイルが生成される
output_bow.mm
output_bow.mm.index
output_tfidf.mm
output_tfidf.mm.index
output_wordids.txt

ここだけで8時間くらいかかりました。EC2のM3 ダブルエクストララージインスタンス(CPU仮想コアx8、メモリ30G、1.5ドル/時!)で実行しました。ハイメモリーエクストララージだと24時間ちょいです。CPUの性能が実行時間にかなり影響するようです。ちなみにCore i7のMacBook Proだと9時間くらいのようです。


英語版wikipediaのbz2ファイルだけで9GByte以上あるので気を付けてください。さらに、約35GByteのディスクスペースが必要だと公式ドキュメントに書いてあります。私はEBSをマウントして使いました。


抜粋した実行ログもアップしておきました。

gensim.scripts.make_wikiの実行ログ



gensim0.7.8を使って日本版wikipediaのコーパスを作成する


英語版とほとんど同じ手順です。日本語版の場合は先に分かち書きをしておく必要があるのでmecabが必要になります。さらに、他の人が作ってくださったpythonスクリプトを利用します。


mecabとmecab-pythonバインディングをインストールしておく必要があります。「mecabの辞書に新しい単語を登録する方法」の通りにインストールしておいてください。


jawikicorpus.pyこのpythonスクリプトを保存してください。日本語版wikipediaに対する分かち書きとコーパス作成を行うpythonスクリプトです。


mecab、 mecab-pythonバインディング、pythonスクリプト、の準備ができたら下記のコマンドを実行してください。


cd
wget http://dumps.wikimedia.org/jawiki/latest/jawiki-latest-pages-articles.xml.bz2

python2.7 jawikicorpus.py jawiki-latest-pages-articles.xml.bz2 jawiki

# gensim0.7.8だとこれらのファイルが生成される
jawiki_bow.mm
jawiki_tfidf.mm
jawiki_wordids.txt

英語版wikipediaのコーパス作成をgensim0.8.6でやったときより生成されるファイル数が減ってますが、おそらく、gensim0.7.8だと機能が少ない=生成されるファイル数も少ない、みたいな感じなんだと思います。


再度になりますが、numpy, scipy, gensimのバージョンを「LSIやLDAを手軽に試せるGensimを使った自然言語処理入門」と揃えておかないとエラーが起きる点に注意です。特にgensimのバージョンが重要です。


ちなみに、gensimのバージョンだけ上げ下げすると、scipy0.11とgensim0.7.8の組み合わせのときに、scipyのmaxentropyモジュールのimportに失敗します。gensimの作者いわく、「たいして使ってないモジュールだから必要な関数だけコピればOK」だそうです。



wikipediaのコーパス生成時に作成されたファイルの意味


先ほどのpythonスクリプトの作者のページいわく、下記のような意味らしいです。


jawiki_bow.mm

単語頻度(Term Frequency, tf)を次元の値とする文書単語行列


jawiki_tfidf.mm

単語頻度からtfidfを計算した文書単語行列


jawiki_wordids.txt

次元と単語の関係。例えば、1次元目は"python"を表す、など。Gensimの中ではDictionaryと呼ばれる。


紹介した解説記事はgensim0.7.8を対象としているので、gensim0.8.6でしか生成されない下記のファイルの意味は不明です…(^^)


output_bow.mm.index

gensim0.8.6で英語版wikipediaのコーパスを作成すると一緒に生成される。


output_tfidf.mm.index

gensim0.8.6で英語版wikipediaのコーパスを作成すると一緒に生成される。



まだまだ続きます…!


ここまででやっと、必要なライブラリのインストール、正しく動くことの確認、wikipediaのコーパス作成が終わりました。


次回は、今回作成した日本語版wikipediaのコーパスに対して、tfidf, LSA, LDAを適用してみます。さらに次々回でやっと、ツイッター分析にいけそうです。


全然お手軽じゃないですね…(^^)



参考リンク


gensim公式チュートリアル一覧

http://radimrehurek.com/gensim/tutorial.html


gensim公式 LSA、LDAの実行方法

http://radimrehurek.com/gensim/wiki.html


「gensimで日本語版wikipediaのコーパスを作成し、tfidf、LSA、LDAを適用してみる方法」が解説されています。すごく分かりやすいです。本記事でもだいぶ参考にしています。

LSIやLDAを手軽に試せるGensimを使った自然言語処理入門


面白かったのでメモ。

LDAを利用した、twitter上のユーザ類似度判定システム


EC2のインスタンスタイプとAPI名一覧

EC2の料金一覧


著者プロフィール
Webサイトをいくつか作っています。
著者プロフィール