繁体   English   中英

使用Word2vec来确定一组词中最相似的两个词

[英]Use Word2vec to determine which two words in a group of words is most similar

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

我怎样才能做到这一点?

[“建筑师”,“护士”,“外科医生”,“祖母”,“爸爸”]

根据您的评论,假设您使用的是gensim的word2vec:

加载或训练模型进行嵌入,然后在模型上调用:

min_distance = float('inf')
min_pair = None
word2vec_model_wv = model.wv  # Unsure if this can be done in the loop, but just to be safe efficiency-wise
for candidate_word1 in words:
    for candidate_word2 in words:
        if candidate_word1 == candidate_word2:
            continue  # ignore when the two words are the same

        distance = word2vec_model_wv.distance(candidate_word1, candidate_word2)
        if distance < min_distance:
            min_pair = (candidate_word1, candidate_word2)
            min_distance = distance

https://radimrehurek.com/gensim/models/keyedvectors.html#gensim.models.keyedvectors.WordEmbeddingsKeyedVectors.distance

也可能是相似的(我不完全确定是否存在差异)。 https://radimrehurek.com/gensim/models/keyedvectors.html#gensim.models.keyedvectors.WordEmbeddingsKeyedVectors.similarity

如我期望的那样,如果相似性随着使用更接近的单词而变得更大,那么您将希望最大化而不是最小化,而只是将距离函数调用替换为相似性调用。 基本上,这只是对上的简单最小/最大函数。

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

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

from itertools import combinations
candidate_words = ['architect', 'nurse', 'surgeon', 'grandmother', 'dad']
all_pairs = combinations(candidate_words, 2)

然后,使用成对相似性装饰对:

scored_pairs = [(w2v_model.wv.similarity(p[0], p[1]), p)
                for p in all_pairs]

最后,排序以将最相似的对放在首位,并报告得分和对:

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

如果您想紧凑但不易读,则可以使用(长)“ 1-liner”:

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

更新:

整合@ ryan-feldspar关于max()的建议,并力求最小化,这也应该用于报告最佳配对(而不是其得分):

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM