web-dev-qa-db-ja.com

gensimを使用したLDA実装の理解

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チュートリアル を確認しましたが、実際にはあまり役に立ちませんでした。

ありがとう。

26
visakh

探している答えは gensimチュートリアル です。 lda.printTopics(k)は、kランダムに選択されたトピックに最も貢献している単語を出力します。これは、(部分的に)与えられたトピックのそれぞれの上の単語の分布であり、それらの単語が左側のトピックに現れる確率を意味すると仮定できます。

通常、大きなコーパスに対してLDAを実行します。途方もなく小さなサンプルでLDAを実行しても、最良の結果は得られません。

17
Steve P.

このチュートリアルは、すべてを非常に明確に理解するのに役立つと思います- https://www.youtube.com/watch?v=DDq3OVp9dNA

私も最初はそれを理解するのに多くの問題に直面しました。簡単にいくつかのポイントの概要を説明します。

潜在ディリクレ配分では、

  • 単語の順序はドキュメントでは重要ではありません-Bag of Wordsモデル。
  • A document is a distribution over topics
  • topicは、順に、words上の分布です単語
  • LDAは確率的生成モデルです。事後分布を使用して隠れ変数を推測するために使用されます。

ドキュメントを作成するプロセスが次のようになることを想像してください-

  1. トピックを超える分布を選択する
  2. トピックを描画し、トピックからWordを選択します。トピックごとにこれを繰り返します

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

thingsAmazon、およびmanyについての詳細は、それらがより高い比率を持ち、MicrosoftまたはAppleについてではなく、大幅に低い値。

より深く理解するためにこのブログを読むことをお勧めします(エドウィン・チェンは天才です!)- http://blog.echen.me/2011/08/22/introduction-to-latent-dirichlet-allocation/

17
Utsav T

上記の回答が投稿されて以来、gensimを使用してLDAの直感を得るための非常に素晴らしい視覚化ツールがいくつかあります。

PyLDAvisパッケージをご覧ください。これは素晴らしい ノートブックの概要 です。そして、これは非常に役立つ ビデオの説明 エンドユーザー向けです(9分間のチュートリアル)。

お役に立てれば!

9
plfrick

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

トピックモデリング(パート2):潜在ディリクレ割り当ての記事からトピックを発見する

結果として得たいくつかのトピックのワードクラウド(10ワード)。 enter image description here

2
Abhijeet Singh

そのWordがそのトピックに関連付けられている可能性の割合を返しています。デフォルトでは、LDAは上位10語を表示します:)

0
Sara