Word2vec-获取相似度

时间:2018-08-08 13:09:32

标签: python python-3.x nlp gensim word2vec

鉴于我有一个word2vec模型(由gensim设计),我想获得单词之间的排名相似度。 例如,假设我有“ desk”一词,与“ desk”最相似的词是:

  
      
  1. 表0.64
  2.   
  3. 主席0.61
  4.   
  5. book 0.59
  6.   
  7. 铅笔0.52
  8.   

我想创建一个函数,以便:

  

f(办公桌,书本)= 3   由于书本是与办公桌相关的第3个最相似的词。   是否存在?最有效的方法是什么?

1 个答案:

答案 0 :(得分:2)

您可以使用rank(entity1, entity2)来获取距离-与索引相同。

model.wv.rank(sample_word, most_similar_word)

这里不需要下面给出的单独功能。出于参考目的保留它。

假设您在由model.wv.most_similar(sample_word)返回的元组列表中包含单词列表及其向量,如图所示

[('table', 0.64), ('chair', 0.61), ('book', 0.59), ('pencil', 0.52)]

以下函数接受样本单词和最相似的单词作为params,并返回索引或排名(例如[2])(如果输出中存在)

def rank_of_most_similar_word(sample_word, most_similar_word):
    l = model.wv.most_similar(sample_word)
    return [x+1 for x, y in enumerate(l) if y[0] == most_similar_word]

sample_word = 'desk'
most_similar_word = 'book'
rank_of_most_similar_word(sample_word, most_similar_word)

请注意:如注释中所述,在使用topn=x时,请使用model.wv.most_similar()获得前x个最相似的单词。