如何在gensim中获取LDA模型中的主题编号

时间:2012-12-17 11:20:57

标签: python nlp lda gensim

我在text_corpus上使用gensim训练了LDA模型。

>lda_model = gensim.models.ldamodel.LdaModel(text_corpus, 10)

现在,如果必须推断出新的文本文档text_sparse_vector,我必须这样做

>lda_model[text_sparse_vector]
[(0, 0.036479568280206563), (3, 0.053828073308160099), (7, 0.021936618544365804), (11, 0.017499953446152686), (15, 0.010153090454090822), (16, 0.35967516223499041), (19, 0.098570351997275749), (26, 0.068550060242800928), (27, 0.08371562828754453), (28, 0.14110945630261607), (29, 0.089938130046832571)]

但是如何获得每个相应主题的单词分布。例如,我如何知道主题编号16的前20个单词?

类gensim.models.ldamodel.LdaModel具有名为show_topics的方法(topics = 10,topn = 10,log = False,formatted = True),但正如文档所述,它显示随机选择的主题列表。

有没有办法链接或打印我可以将推断的主题数字映射到单词分布?

3 个答案:

答案 0 :(得分:6)

lda.print_topic(x, topn=20) 

将为您提供主题x的前20个功能

答案 1 :(得分:0)

如果您有K个主题,那么:

print(str(["Topic #"+str(k)+":\n" + str(lda.show_topic(k,topn=20)) for k in range(K)]))

会让你变得丑陋,但却始终如一地对输出进行排序。

答案 2 :(得分:0)

此处的最后一行将更改每个主题的单词数。希望这会有所帮助:)

# train and save LDA model

lda_model = gensim.models.LdaMulticore(bow_corpus, num_topics=20, id2word=dictionary, passes=2, workers=2, chunksize=400000)

# check out the topics 

for idx, topic in lda_model.print_topics(-1):
   print('Topic: {} \nWords: {}'.format(idx, topic))

# swap out '30' for any number and this line will give you that many words per topic :)
lda_model.print_topics(idx, 30)