计算两个向量之间的相似性

时间:2018-05-22 08:45:36

标签: python-3.x nlp gensim lda spacy

我使用topic_number = 5对文档语料库进行了LDA。因此,我有五个单词向量,每个单词都与权重或重要程度相关联,如下所示:

Topic_A = {(word_A1,weight_A1), (word_A2, weight_A2), ... ,(word_Ak, weight_Ak)}
Topic_B = {(word_B1,weight_B1), (word_B2, weight_B2), ... ,(word_Bk, weight_Bk)}
.
.
Topic_E = {(word_E1,weight_E1), (word_E2, weight_E2), ... ,(word_Ek, weight_Ek)}

有些词在文档之间很常见。现在,我想知道,我如何计算这些向量之间的相似性。我可以通过编程从头开始计算余弦相似度(和其他相似性度量),但我在想,可能有一种更简单的方法。任何帮助,将不胜感激。提前感谢你花时间在这上面。

  
      
  • 我使用Python 3.6和gensim库进行编程(但我对任何其他库都开放)

  •   
  • 我知道其他人也问过类似的问题(Cosine Similarity and LDA topics),但由于他没有得到答案,我再次提出问题

  •   

1 个答案:

答案 0 :(得分:2)

在LDA之后,您将主题描述为单词的分布。如果您打算比较这些概率向量(如果您愿意,可以使用权重向量),您可以简单地使用为Python实现的任何余弦相似度,例如sklearn

然而,这种方法只会告诉你哪些主题在概括中具有相同的概率。

如果您想基于语义信息而不是单词出现来衡量相似性,您可能希望使用单词向量(如Word2Vec,GloVe或FastText所学习的那些)。

他们学会了用于将单词表示为低维向量,对某些语义信息进行编码的向量。它们在Gensim中很容易使用,典型的方法是加载预先训练的模型,在维基百科文章或新闻中学习。

如果你有由单词定义的主题,你可以将这些单词表示为向量,并获得两个主题中单词之间余弦相似性的平均值(我们为workshop做了)。有些来源使用这些Word Vectors(也称为Word嵌入)来表示某种主题或文档。例如,this一个。

最近有一些出版物结合了主题模型和Word嵌入,如果您有兴趣,可以查找它们。