Word2veC语言 获得相似度排名



鉴于我有一个word2vec模型(由gensim(,我想获得单词之间的排名相似性。 例如,假设我有"办公桌"这个词,与"办公桌"最相似的词是:

  1. 表0.64
  2. 椅子 0.61
  3. 预订 0.59
  4. 铅笔 0.52

我想创建一个函数,这样:

f(书桌,书( = 3 由于书是与书桌第三相似的词。 它存在吗?最有效的方法是什么?

您可以使用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)]

以下函数接受示例单词和最相似的单词作为参数,并返回索引或秩(例如。[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=xmodel.wv.most_similar()时获取前 x 个最相似的单词,如评论中所述。

最新更新