使用 Word2vec 确定一组单词中哪两个单词最相似

Kan*_*ann 5 python word2vec

我正在尝试使用 Word2vec 的 python 包装器。我有一个词嵌入或一组词,可以在下面看到,我试图从中确定哪两个词彼此最相似。

我怎样才能做到这一点?

['建筑师'、'护士'、'外科医生'、'祖母'、'爸爸']

goj*_*omo 3

itertools@rylan-feldspar 的答案通常是正确的方法并且会起作用,但是您可以使用标准 Python 库/习惯用法(尤其是列表理解和排序函数)更紧凑地完成此操作。

例如,首先使用combinations()fromitertools生成所有候选词对:

from itertools import combinations
candidate_words = ['architect', 'nurse', 'surgeon', 'grandmother', 'dad']
all_pairs = combinations(candidate_words, 2)
Run Code Online (Sandbox Code Playgroud)

然后,用成对的相似性来装饰这些对:

scored_pairs = [(w2v_model.wv.similarity(p[0], p[1]), p)
                for p in all_pairs]
Run Code Online (Sandbox Code Playgroud)

最后,排序以将最相似的对放在第一位,并报告该分数和对:

sorted_pairs = sorted(scored_pairs, reverse=True)
print(sorted_pairs[0])  # first item is most-similar pair
Run Code Online (Sandbox Code Playgroud)

如果你想要紧凑但可读性差一点,它可能是一个(长)“1-liner”:

print(sorted([(w2v_model.wv.similarity(p[0], p[1]), p) 
              for p in combinations(candidate_words, 2)
             ], reverse=True)[0])
Run Code Online (Sandbox Code Playgroud)

更新:

整合 @ryan-feldspar 关于 的建议max(),并追求极简,这也应该能够报告最佳对(但不是其分数):

print(max(combinations(candidate_words, 2),
          key=lambda p:w2v_model.wv.similarity(p[0], p[1])))
Run Code Online (Sandbox Code Playgroud)