Ldaモデルをそのようにトレーニングするとき
dictionary = corpora.Dictionary(data)
corpus = [dictionary.doc2bow(doc) for doc in data]
num_cores = multiprocessing.cpu_count()
num_topics = 50
lda = LdaMulticore(corpus, num_topics=num_topics, id2Word=dictionary,
workers=num_cores, alpha=1e-5, eta=5e-1)
すべてのドキュメントのすべてのnum_topics
の完全なトピック分布を取得したいと思います。つまり、この特定のケースでは、各ドキュメントに配布に寄与する50のトピックおよび50のトピックすべての投稿にアクセスできるようにしたい。この出力は、LDAの数学に厳密に準拠している場合にLDAが実行する必要があることです。ただし、gensimは、示されているように特定のしきい値を超えるトピックのみを出力しますここ。たとえば、私がしようとすると
lda[corpus[89]]
>>> [(2, 0.38951721864890398), (9, 0.15438596408262636), (37, 0.45607443684895665)]
これは、ドキュメント89に最も貢献する3つのトピックのみを示しています。上記のリンクで解決策を試しましたが、これはうまくいきません。私はまだ同じ出力を取得します:
theta, _ = lda.inference(corpus)
theta /= theta.sum(axis=1)[:, None]
同じ出力を生成します。つまり、ドキュメントごとに2,3トピックのみを生成します。
私の質問は、このしきい値を変更して、[〜#〜] full [〜#〜]eachドキュメントのトピック配布?ドキュメントへのトピックの貢献がどれほど重要でない場合でも、完全なトピック配布にアクセスするにはどうすればよいですか?完全な配布が必要な理由は、ドキュメントの配布間で KL類似性 検索を実行できるようにするためです。
前もって感謝します
まだ誰も返信していないようですので、gensim documentation を与えられる限り、これに答えようと思います。
パラメータを設定する必要があるようですminimum_probability
から0.0まで、モデルをトレーニングして目的の結果を取得します。
lda = LdaMulticore(corpus=corpus, num_topics=num_topics, id2Word=dictionary, workers=num_cores, alpha=1e-5, eta=5e-1,
minimum_probability=0.0)
lda[corpus[233]]
>>> [(0, 5.8821799358842424e-07),
(1, 5.8821799358842424e-07),
(2, 5.8821799358842424e-07),
(3, 5.8821799358842424e-07),
(4, 5.8821799358842424e-07),
(5, 5.8821799358842424e-07),
(6, 5.8821799358842424e-07),
(7, 5.8821799358842424e-07),
(8, 5.8821799358842424e-07),
(9, 5.8821799358842424e-07),
(10, 5.8821799358842424e-07),
(11, 5.8821799358842424e-07),
(12, 5.8821799358842424e-07),
(13, 5.8821799358842424e-07),
(14, 5.8821799358842424e-07),
(15, 5.8821799358842424e-07),
(16, 5.8821799358842424e-07),
(17, 5.8821799358842424e-07),
(18, 5.8821799358842424e-07),
(19, 5.8821799358842424e-07),
(20, 5.8821799358842424e-07),
(21, 5.8821799358842424e-07),
(22, 5.8821799358842424e-07),
(23, 5.8821799358842424e-07),
(24, 5.8821799358842424e-07),
(25, 5.8821799358842424e-07),
(26, 5.8821799358842424e-07),
(27, 0.99997117731831464),
(28, 5.8821799358842424e-07),
(29, 5.8821799358842424e-07),
(30, 5.8821799358842424e-07),
(31, 5.8821799358842424e-07),
(32, 5.8821799358842424e-07),
(33, 5.8821799358842424e-07),
(34, 5.8821799358842424e-07),
(35, 5.8821799358842424e-07),
(36, 5.8821799358842424e-07),
(37, 5.8821799358842424e-07),
(38, 5.8821799358842424e-07),
(39, 5.8821799358842424e-07),
(40, 5.8821799358842424e-07),
(41, 5.8821799358842424e-07),
(42, 5.8821799358842424e-07),
(43, 5.8821799358842424e-07),
(44, 5.8821799358842424e-07),
(45, 5.8821799358842424e-07),
(46, 5.8821799358842424e-07),
(47, 5.8821799358842424e-07),
(48, 5.8821799358842424e-07),
(49, 5.8821799358842424e-07)]
それが他の誰かを助けるかもしれない場合:
LDAモデルをトレーニングした後、低いしきい値で制限せずにドキュメントのすべてのトピックを取得する場合は、get_document_topicsメソッドを呼び出すときにminimum_probabilityを0に設定する必要があります。
ldaModel.get_document_topics(bagOfWordOfADocument, minimum_probability=0.0)