Python 从Gensim模型计算余弦相似性

Python 从Gensim模型计算余弦相似性,python,gensim,topic-modeling,cosine-similarity,Python,Gensim,Topic Modeling,Cosine Similarity,我试图从GensimLDA主题模型计算主题间余弦相似性分数,但这比我最初预期的要复杂 Gensim有一种计算主题之间距离的方法model.diff(model),但遗憾的是,没有实现余弦距离;它有jaccard距离,但有点太依赖于向量长度(即,当比较每个主题前100个最重要的单词时,距离低于比较前500个,而当比较全长向量时,距离为0,因为每个主题包括所有术语,但概率不同) 我的问题是,模型的输出如下所示(仅显示了4个最上面的单词): 因此,为了计算余弦sim/距离,我必须解析元组的第二个元素(

我试图从
Gensim
LDA主题模型计算主题间余弦相似性分数,但这比我最初预期的要复杂

Gensim
有一种计算主题之间距离的方法
model.diff(model)
,但遗憾的是,没有实现余弦距离;它有jaccard距离,但有点太依赖于向量长度(即,当比较每个主题前100个最重要的单词时,距离低于比较前500个,而当比较全长向量时,距离为0,因为每个主题包括所有术语,但概率不同)

我的问题是,模型的输出如下所示(仅显示了4个最上面的单词):

因此,为了计算余弦sim/距离,我必须解析元组的第二个元素(即
'0.008*“tax”+…'
部分,它表示术语概率

我想知道是否有一种更简单的方法可以从模型中获得余弦相似性?或者解析每个术语/概率串真的是唯一的方法

感谢您的帮助。

使用
get_topics()
方法可以获得一个完整(稀疏)数组,其中每行是一个主题,每列是一个词汇词。因此,您可以计算主题到主题的余弦相似性,大致如下所示:

来自sklearn.metrics.pairwise import cosine\u相似度
topics=lda\u model.get\u topics()
sim_18_至_30=余弦相似性(主题[18],主题[30])主题18至主题30
所有相似性=余弦相似性(主题)#所有成对相似性
(我还没有在活动模型上检查此代码;确切的所需形状/等可能已关闭。)

(30, '0.008*"tax" + 0.004*"cut" + 0.004*"bill" + 0.004*"spending"')
(18, '0.009*"candidate" + 0.009*"voter" + 0.009*"vote" + 0.009*"election"')
(42, '0.047*"shuttle" + 0.034*"astronaut" + 0.026*"launch" + 0.025*"orbit"')
(22, '0.023*"boat" + 0.020*"ship" + 0.015*"migrant" + 0.013*"vessel"')