[英]Calculating cosine similarity from a Gensim model
我正在尝试从Gensim
LDA 主题 model 计算主题间余弦相似度得分,但这证明比我最初预期的要复杂。
Gensim
有一种计算主题之间距离的方法model.diff(model)
,但遗憾的是没有实现余弦距离; 它具有杰卡德距离,但它有点过于依赖向量长度(即,当比较每个主题的前 100 个最重要的词时,距离低于比较前 500 个词,并且当比较全长向量时,距离为 0,如每个主题包括所有术语,但概率不同)。
我的问题是 model 中的 output 看起来像这样(仅显示 4 个顶部单词):
(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"')
因此,为了计算余弦 sim/距离,我必须解析元组的第二个元素(即'0.008*"tax" +...'
部分,它表示术语概率。
我想知道是否有更简单的方法可以从 model 中获得余弦相似度? 或者解析每个单独的术语/概率字符串真的是 go 的唯一方法吗?
谢谢您的帮助。
get_topics()
方法为您提供了一个完整(稀疏)数组,其中每一行是一个主题,每一列是一个词汇。 因此,您可能能够计算出主题到主题的余弦相似度,大致如下:
from sklearn.metrics.pairwise import cosine_similarity
topics = lda_model.get_topics()
sim_18_to_30 = cosine_similarity(topics[18], topics[30]) # topic 18 to topic 30
all_sims = cosine_similarity(topics) # all pairwise similarities
(我还没有在现场 model 上检查此代码;可能会关闭所需的确切形状/等。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.