gensim LDA主题建模中用于查找相似文本的固定大小主题向量

fixed-size topics vector in gensim LDA topic modelling for finding similar texts

我使用 gensim LDA 主题建模来查找每个文档的主题,并通过比较接收到的主题向量来检查文档之间的相似性。 每个文档被赋予不同数量的匹配主题,因此向量的比较(通过余弦相似度)是不正确的,因为需要相同长度的向量。

这是相关代码:

lda_model_bow = models.LdaModel(corpus=bow_corpus, id2word=dictionary, num_topics=3, passes=1, random_state=47)

#---------------Calculating and Viewing the topics----------------------------
vec_bows = [dictionary.doc2bow(filtered_text.split()) for filtered_text in filtered_texts]

vec_lda_topics=[lda_model_bow[vec_bow] for vec_bow in vec_bows]

for id,vec_lda_topic in enumerate(vec_lda_topics):
    print ('document ' ,id, 'topics: ', vec_lda_topic)

输出向量是:

document  0 topics:  [(1, 0.25697246), (2, 0.08026043), (3, 0.65391296)]
document  1 topics:  [(2, 0.93666667)]
document  2 topics:  [(2, 0.07910537), (3, 0.20132676)]
.....

如您所见,每个向量的长度不同,因此无法在它们之间执行余弦相似度。

我希望输出为:

document  0 topics:  [(1, 0.25697246), (2, 0.08026043), (3, 0.65391296)]
document  1 topics:  [(1, 0.0), (2, 0.93666667), (3, 0.0)]
document  2 topics:  [(1, 0.0), (2, 0.07910537), (3, 0.20132676)]
.....

有什么办法吗?发送

我以前用gensim做主题建模,没遇到过这个问题。理想情况下,如果您传递 num_topics=3,那么它 returns 每个文档的概率最高的前 3 个主题。然后您应该能够通过执行以下操作来生成余弦相似度矩阵:

lda_model_bow = models.LdaModel(corpus=bow_corpus, id2word=dictionary, num_topics=3, passes=1, random_state=47)
vec_lda_topics = lda_model_bow[bow_corpus]
sim_matrix = similarities.MatrixSimilarity(vec_lda_topics)

但出于某种原因,如果您获得的主题数量不相等,您可以假设剩余主题的概率值为零,并在计算相似度时将它们包含在向量中。

P.s.: 如果您可以提供输入文档的样本,那么重现您的输出并进行研究会更容易。

所以如panktijk says in the comment and also ,解决方法是将minimum_probability由默认值0.01改为0.0