英語版WikipediaでLDA

Wikipediaのデータをスクロールスキャンする」を行ったけど、まずは、Wikipediaのデータに対してLDAを適用してみることにする。日本語への適用は次回にするとして、まずは英語のWikipediaに適用してみる。
まずは、wikipediaをダウンロードする。

$ wget http://dumps.wikimedia.your.org/enwiki/latest/enwiki-latest-pages-articles.xml.bz2

結構でかいので時間がかかるだろう…。
ダウンロードできたら、今回、利用するLDAの実装はgensimを利用するので、インストールしておく。

$ pip install gensim

sklearnには、LDAの実装は存在しないので、gensimを利用しておく。
まずはコーパスを作成する。

$ python -m gensim.scripts.make_wiki enwiki-latest-pages-articles.xml.bz2 wiki_en_output

実行する環境にもよると思うけど、1日とかかかるかも。完了すると、wiki_en_output〜のファイルが複数生成される。
あとはトピックの生成をする。コマンドラインで実行してもいいけど、今回は以下のようなwiki_lda.pyを作って実行する。

# coding: utf-8
import logging, gensim
from optparse import OptionParser
import sys
def main(argv=sys.argv):
    parser = OptionParser(prog="wiki_lda.py")
    parser.add_option("--wordids", dest="wordids",
                  help="WordIDs", metavar="WORDIDS")
    parser.add_option("--tfidf", dest="tfidf",
                  help="TFIDF", metavar="TFIDF")
    parser.add_option("--output", dest="output",
                  help="Output", metavar="OUTPUT",
                  default='wiki_lda.pkl')
    (options, args) = parser.parse_args()
    logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO)
    id2word = gensim.corpora.Dictionary.load_from_text(options.wordids)
    mm = gensim.corpora.MmCorpus(options.tfidf)
    model = gensim.models.ldamodel.LdaModel(corpus=mm,
                                            id2word=id2word,
                                            num_topics=100,
                                            update_every=1,
                                            chunksize=10000,
                                            passes=1)
    model.save(options.output)
    return 0
if __name__ == "__main__":
    sys.exit(main())

まぁ、大したものではないけど…。num_topicsを100にしているので、適当に変えても良いだろう。
あとは、

$ python wiki_lda.py --wordids wiki_en_output_wordids.txt.bz2 --tfidf wiki_en_output_tfidf.mm --output wiki_lda_en.pkl

とすれば、トピックモデルが完成する。こっちは数時間で完了すると思う。
保存したモデルは、

$ python
>>> import gensim
>>> model = gensim.models.ldamodel.LdaModel.load("wiki_lda.pkl")
>>> for data in model.print_topics(100):
...     print data

とかすれば、利用して確認することができる。

「英語版WikipediaでLDA」への1件のフィードバック

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です