「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件のフィードバック