【问题标题】:Get topic probability distribution for new document获取新文档的主题概率分布
【发布时间】:2021-04-13 11:09:18
【问题描述】:

我有一个名为 model 的工作主题模型,具有以下设置:

model = LdaModel(corpus=corpus,
                             id2word=id2word,
                             num_topics=10, 
                             random_state=100,
                             update_every=1,
                             chunksize=100,
                             passes=50,
                             alpha='auto',
                             per_word_topics=True)

这个模型是在data_words上训练的,这是一个列表,每个列表中都有一个文本字符串,例如:

data_words = [['This is the first text'],['This is another text'], ['Here is the very last text']]

在这种情况下,len(data_words) 是 3,但根据我的实际数据,它是(大约)4000。

基于经过训练的主题模型,我想将来自data_words 的 4000 个文档中的每一个都表示为主题概率分布。对于每个文档,这将是一个 num_topics 维向量,每个单元格表示该文档中表示某个主题的概率。

按照documentation,我采取了以下步骤:

from gensim.corpora.dictionary import Dictionary
common_dictionary = Dictionary(data_words)
common_corpus = [common_dictionary.doc2bow(text) for text in data_words]

为了得到分布,我跑了: model[common_corpus[0]]

这里的输出是一个元组。其中第一个元素model[common_corpus[0]][0]如下:

[(0, 0.26094702),
 (1, 0.29876992),
 (3, 0.3244001),
 (7, 0.045543537),
 (8, 0.03196496),
 (9, 0.031232798)]

这是第一个文档的主题分布并且主题 2、4、5 和 6 的概率等于 0 是否正确?还是我应该以不同的方式解释?

最终,我想要一个 4000xnum_topics 矩阵,其中每个单元格代表文档中某个主题的概率。假设model[common_corpus[0]][0] 是我怀疑的,我可以编写一个函数来从model[common_corpus[0]][i] 为每个文档i 获取该矩阵。有没有更快的方法来获得这个矩阵?

【问题讨论】:

    标签: python-3.x vector probability lda


    【解决方案1】:

    https://radimrehurek.com/gensim/models/ldamodel.html之后,所有概率低于参数minimum_probability的主题都将被丢弃(默认:0.01)。如果设置 minimum_probability=0,则会得到文档的整个主题概率分布(以元组的形式)。

    关于你的第二个问题,我相信唯一能让你获得主题文档分发的方法就是上面的那个。因此,您需要遍历数据集的所有文档以获取文档主题矩阵。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-03
      • 1970-01-01
      • 2017-12-22
      • 2017-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-15
      相关资源
      最近更新 更多