如何在Python Gensim中从主题分布比较两个文档之间的主题相似度?

Vic*_*ang 4 python lda gensim

我使用 Gensim 在语料库上训练了 LDA 模型。现在我已经有了每个文档的主题分布,如何比较两个文档的主题相似程度?我想要一个总结性的衡量标准。例如,以下是两个文档的主题分布。共有75个主题。为简洁起见,我仅显示概率最大的前 10 个主题(因此主题不按顺序排列)。(40, 0.5523168) 表示主题 #40 对于 DOC #1 的概率为 0.5523168。我应该计算两个向量之间的欧几里德距离或余弦距离吗?使用此汇总度量,我是否可以说,例如,DOC 1 与 DOC2 比 DOC3 更相似,或者 DOC1 和 DOC 2 在主题上比 DOC 3 和 DOC 4 更相似?谢谢你!

DOC #1:
[(40, 0.5523168), (60, 0.12225048), (43, 0.07556598), (41, 0.065885976), 
(22, 0.05838573), (24, 0.044774733), (74, 0.019839266), (65, 0.019544959), 
(51, 0.015470431), (36, 0.013449047)]


DOC #2:
[(73, 0.58864516), (41, 0.16827711), (51, 0.09783472), (63, 0.06510383), 
(24, 0.04722658), (32, 0.014467965), (44, 0.012267662), (47, 0.0031533625), 
(18, 0.0022214972), (0, 1.2154361e-05)]
Run Code Online (Sandbox Code Playgroud)

小智 6

Gensim 功能

Gensim 提供了similarities.docsim“计算向量空间模型中文档集合的相似性”的功能。您可以在此处查看文档,这里还有相似性查询的教程。

文档相似性度量

使用欧几里德距离将是一个不常见的选择 - 可以,但存在潜在的问题。您可以使用余弦相似度(链接到python教程) - 这取两个文档向量角度的余弦,其优点是易于理解(1=文档完全相似,-1=文档没有相似性)完全)是的,您可以比较文档 1 和 2 的余弦相似度,并将其与文档 3 和 4 的余弦相似度进行比较,或者计算 doc1 到 doc2 以及 doc1 和 doc3 的相似度值并进行比较。这里有一个非常好的教程。

即使您的问题有所不同,您也可能会在 CrossValidated 上找到我对这个问题的回答,内容非常丰富。

Gensim 还提供其他距离度量。这些几乎都包含在 gensim 中matutils

主题距离

您还可以使用上面链接中的(某些)距离来测量主题之间的距离,例如 Hellinger 距离。