SpaCy中的相似功能如何工作?

时间:2018-10-29 15:58:18

标签: python machine-learning spacy text-analytics-api

我尝试了一个,例如

“正”和“负”这两个词不是相似的词,而是相反的词,但spaCy给我的相似度为81%。

这是我的代码

import spacy

nlp = spacy.load('en_core_web_lg')
word1 = nlp(u'negative')
word2 = nlp(u'positive') 
word1_word2 = word1.similarity(word2)

print(word1_word2)

2 个答案:

答案 0 :(得分:1)

通常,使用它们对应的词向量之间的余弦相似度来计算这样的词相似度。在相同上下文中经常使用的单词最终会在向量空间中的相似位置出现,前提是假设使用相似的单词表示相似的事物。例如,King和Queen可能相似,而King和Man可能相似,但是Queen和Man应该不太相似(尽管它们仍然都指“人”,并且它们都是名词,所以它们可能仍然比《人类与燃烧》更相似。

您希望这些词(“正”和“负”)彼此为负(余弦相似度为-1),但它们相似,因为它们几乎完全相同,除了负号另一个。全局语义向量空间包含了比否定更多的思想,因此这两个词在其他方面最终变得非常相似。您可以做的是计算它们的平均向量,然后计算Positive -> average = - (Negative -> average),然后用差分向量Positive -> average(或更准确地说,"Positive" - ("Positive" - "Negative") / 2)来近似否定的想法,即您特别感兴趣也就是说,您可以将该向量添加到其他案例中以也将它们取反。 "Yes" + ("Negative" - "Positive") ~= "No"

所有这些只是说,您观察到的效果不是Spacy的错,并且您不会通过使用Gensim或Sklearn避免它,这是由于在这种情况下“相似性”的含义所致。如果您想要单词之间更易理解的,人为设计的语义关系,请考虑一下WordNet,它是手动创建的,很可能在您的两个单词之间明确地具有某种“否定”关系。

答案 1 :(得分:0)

不幸的是,以上操作无效:“是” +(“负”-“正”)〜=“是”