如何在gensim LDA中获取所有文档的document_topics分布?

9

我是Python的新手,需要构建一个LDA项目。在进行了一些预处理步骤后,这是我的代码:

dictionary = Dictionary(docs)
corpus = [dictionary.doc2bow(doc) for doc in docs]

from gensim.models import LdaModel
num_topics = 10
chunksize = 2000
passes = 20
iterations = 400
eval_every = None
temp = dictionary[0]
id2word = dictionary.id2token
model = LdaModel(corpus=corpus, id2word=id2word, chunksize=chunksize, \
                       alpha='auto', eta='auto', \
                       random_state=42, \
                       iterations=iterations, num_topics=num_topics, \
                       passes=passes, eval_every=eval_every)

我想获取文档的主题分布,对于所有的文档,获得前10个主题分布的概率。但是当我使用以下代码时:

get_document_topics = model.get_document_topics(corpus)
print(get_document_topics)

输出仅出现
<gensim.interfaces.TransformedCorpus object at 0x000001DF28708E10>

如何获得文档的主题分布?

1个回答

11

函数get_document_topics接受一个以BOW格式表示的单个文档作为输入。由于您正在对完整语料库(一组文档)进行调用,因此它返回一个可迭代对象,其中包含每个文档的分数。

您有几个选项。如果您只需要一个文档,请在要获取值的文档上运行它:

get_document_topics = model.get_document_topics(corpus[0])

或者按照以下方式获取所有文档的得分数组:

get_document_topics = [model.get_document_topics(item) for item in corpus]

或者直接从你的原始代码中访问每个对象:

get_document_topics = model.get_document_topics(corpus)
print(get_document_topics[0])

谢谢!是否可以获取有关文档主题分布的信息,而不是单个文档?我想检查语料库中10个主题的重要性。 - wayne64001
我不确定你具体想要什么。LDA的工作原理是通过计算主题在整个语料库中相对于文档的重要性来确定主题的重要性。如果您想查看它认为的主题,请使用model.show_topics()。根据gensim文档(https://radimrehurek.com/gensim/models/ldamodel.html#gensim.models.ldamodel.LdaModel.show_topics):“与LSA不同,LDA中主题之间没有自然顺序。返回的主题子集因此是任意的,并且可能会在两次LDA训练运行之间发生变化。” - Andrew McDowell

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接