空间"en_core_web_lg"模型向量给出错误的相似性输出



刚刚开始学习NLP,并跟随Udemy课程。我正在尝试使用向量的余弦相似度来计算单词相似度。

import spacy
nlp = spacy.load('en_core_web_lg')
# Choose the words you wish to compare, and obtain their vectors
word1 = nlp.vocab['wolf'].vector
word2 = nlp.vocab['dog'].vector
word3 = nlp.vocab['cat'].vector
# Import spatial and define a cosine_similarity function
from scipy import spatial
cosine_similarity = lambda x, y: 1 - spatial.distance.cosine(x, y)
# Write an expression for vector arithmetic
# For example: new_vector = word1 - word2 + word3
new_vector = word1 - word2 + word3
# List the top ten closest vectors in the vocabulary to the result of the expression above
computed_similarities = []
for word in nlp.vocab:
if word.has_vector:
if word.is_lower:
if word.is_alpha:
similarity = cosine_similarity(new_vector, word.vector)
computed_similarities.append((word, similarity))
computed_similarities = sorted(computed_similarities, key=lambda item: -item[1])
print([w[0].text for w in computed_similarities[:10]])
['wolf', 'cat', 'i', 'cuz', 'dare', 'u', 'dog', 'she', 'ai', 'ca']

在上面的输出中,大多数单词甚至不接近新的向量。根据导师理想的输出应该是:

['maned', 'wolfs', 'wolf', 'lynx', 'wolve', 'yotes', 'canids', 'boars', 'foxes', 'wolfdogs']

另一个问题是,当我试图计算其他单词,如king, man和queen时,输出是:

['king', 'woman', 'she', 'who', 'wolf', 'when', 'dare', 'cat', 'was', 'not']

不是

['king','queen','commoner','highness','prince','sultan','maharajas','princes','kumbia','kings']

在这个输出中,像"wolf"one_answers";cat"因为我首先在上面的狼,猫和狗的例子上运行了这个函数。如果我在重新加载模型后运行国王,男人和女王的例子,那么"狼";和";cat"还有一些不相关的词

我已经卸载并重新安装了模型以及重新创建了环境,但结果总是相同的。我做错了什么吗?我该如何解决这个问题?

如果我正确理解你的问题,问题不在于质量,而是你的代码输出与你在Udemy上看到的不同。

可能发生的事情是Udemy导师使用了不同版本的space或不同的模型。你应该确认他们使用的是什么版本,然后安装相同的版本。

相关内容

最新更新