我正在尝试使用 Word2vec 的 python 包装器。我有一个词嵌入或一组词,可以在下面看到,我试图从中确定哪两个词彼此最相似。
我怎样才能做到这一点?
['建筑师'、'护士'、'外科医生'、'祖母'、'爸爸']
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)
| 归档时间: |
|
| 查看次数: |
1859 次 |
| 最近记录: |