PythonのgensimパッケージがLatent Dirichlet Allocationを実装する方法を理解しようとしています。次のことを行っています。
データセットを定義する
documents = ["Apple is releasing a new product",
"Amazon sells many things",
"Microsoft announces Nokia acquisition"]
ストップワードを削除した後、辞書とコーパスを作成します。
texts = [[Word for Word in document.lower().split() if Word not in stoplist] for document in documents]
dictionary = corpora.Dictionary(texts)
corpus = [dictionary.doc2bow(text) for text in texts]
次に、LDAモデルを定義します。
lda = gensim.models.ldamodel.LdaModel(corpus=corpus, id2Word=dictionary, num_topics=5, update_every=1, chunksize=10000, passes=1)
次に、トピックを印刷します。
>>> lda.print_topics(5)
['0.181*things + 0.181*Amazon + 0.181*many + 0.181*sells + 0.031*nokia + 0.031*Microsoft + 0.031*Apple + 0.031*announces + 0.031*acquisition + 0.031*product', '0.077*nokia + 0.077*announces + 0.077*acquisition + 0.077*Apple + 0.077*many + 0.077*Amazon + 0.077*sells + 0.077*Microsoft + 0.077*things + 0.077*new', '0.181*Microsoft + 0.181*announces + 0.181*acquisition + 0.181*nokia + 0.031*many + 0.031*sells + 0.031*Amazon + 0.031*Apple + 0.031*new + 0.031*is', '0.077*acquisition + 0.077*announces + 0.077*sells + 0.077*Amazon + 0.077*many + 0.077*nokia + 0.077*Microsoft + 0.077*releasing + 0.077*Apple + 0.077*new', '0.158*releasing + 0.158*is + 0.158*product + 0.158*new + 0.157*Apple + 0.027*sells + 0.027*nokia + 0.027*announces + 0.027*acquisition + 0.027*Microsoft']
2013-12-03 13:26:21,878 : INFO : topic #0: 0.181*things + 0.181*Amazon + 0.181*many + 0.181*sells + 0.031*nokia + 0.031*Microsoft + 0.031*Apple + 0.031*announces + 0.031*acquisition + 0.031*product
2013-12-03 13:26:21,880 : INFO : topic #1: 0.077*nokia + 0.077*announces + 0.077*acquisition + 0.077*Apple + 0.077*many + 0.077*Amazon + 0.077*sells + 0.077*Microsoft + 0.077*things + 0.077*new
2013-12-03 13:26:21,880 : INFO : topic #2: 0.181*Microsoft + 0.181*announces + 0.181*acquisition + 0.181*nokia + 0.031*many + 0.031*sells + 0.031*Amazon + 0.031*Apple + 0.031*new + 0.031*is
2013-12-03 13:26:21,881 : INFO : topic #3: 0.077*acquisition + 0.077*announces + 0.077*sells + 0.077*Amazon + 0.077*many + 0.077*nokia + 0.077*Microsoft + 0.077*releasing + 0.077*Apple + 0.077*new
2013-12-03 13:26:21,881 : INFO : topic #4: 0.158*releasing + 0.158*is + 0.158*product + 0.158*new + 0.157*Apple + 0.027*sells + 0.027*nokia + 0.027*announces + 0.027*acquisition + 0.027*Microsoft
>>>
この結果から多くを理解することはできません。各単語の出現確率を提供していますか?また、トピック#1、トピック#2などの意味は何ですか?最も重要なキーワードに多少似たものを期待していました。
すでに gensimチュートリアル を確認しましたが、実際にはあまり役に立ちませんでした。
ありがとう。
探している答えは gensimチュートリアル です。 lda.printTopics(k)
は、k
ランダムに選択されたトピックに最も貢献している単語を出力します。これは、(部分的に)与えられたトピックのそれぞれの上の単語の分布であり、それらの単語が左側のトピックに現れる確率を意味すると仮定できます。
通常、大きなコーパスに対してLDAを実行します。途方もなく小さなサンプルでLDAを実行しても、最良の結果は得られません。
このチュートリアルは、すべてを非常に明確に理解するのに役立つと思います- https://www.youtube.com/watch?v=DDq3OVp9dNA
私も最初はそれを理解するのに多くの問題に直面しました。簡単にいくつかのポイントの概要を説明します。
潜在ディリクレ配分では、
ドキュメントを作成するプロセスが次のようになることを想像してください-
LDAは、この線に沿って一種のバックトラックです-ドキュメントを表す単語の袋があるとすると、それが表すトピックは何でしょうか?
したがって、あなたの場合、最初のトピック(0)
INFO : topic #0: 0.181*things + 0.181*Amazon + 0.181*many + 0.181*sells + 0.031*nokia + 0.031*Microsoft + 0.031*Apple + 0.031*announces + 0.031*acquisition + 0.031*product
things
、Amazon
、およびmany
についての詳細は、それらがより高い比率を持ち、Microsoft
またはApple
についてではなく、大幅に低い値。
より深く理解するためにこのブログを読むことをお勧めします(エドウィン・チェンは天才です!)- http://blog.echen.me/2011/08/22/introduction-to-latent-dirichlet-allocation/
Gensim LDA実装の使用方法を理解するために、最近、Pythonで70,000のシンプルなwikiダンプ記事にトピックモデリングをゼロから実装するブログ投稿を書いています。
ここでは、gensimのLDAをトピックモデリングに使用する方法について詳しく説明しています。の使用法を見つけることができます
ElementTree library for extraction of article text from XML dumped file.
Regex filters to clean the articles.
NLTK stop words removal & Lemmatization
LDA from gensim library
GensimパッケージのLDA実装の理解に役立つことを願っています。
パート1
トピックモデリング(パート1):シンプルなウィキペディアのダンプから記事コーパスを作成する
パート2
そのWordがそのトピックに関連付けられている可能性の割合を返しています。デフォルトでは、LDAは上位10語を表示します:)