Python Spacy初学者:相似功能

时间:2016-10-09 12:35:18

标签: python nlp spacy

在Python的spaCy教程示例中,apples.similarity(oranges)的结果是 0.39289959293092641 而不是0.7857989796519943

有什么理由吗? 本教程的原始文档 https://spacy.io/docs/ 一个教程与我得到的答案不同: http://textminingonline.com/getting-started-with-spacy

由于

3 个答案:

答案 0 :(得分:9)

这似乎是spacy中的一个错误。

不知何故vector_norm计算错误。

import spacy
import numpy as np
nlp = spacy.load("en")
# using u"apples" just as an example
apples = nlp.vocab[u"apples"]
print apples.vector_norm
# prints 1.4142135381698608, or sqrt(2)
print np.sqrt(np.dot(apples.vector, apples.vector))
# prints 1.0

然后在vector_norm中使用similarity,它总是返回一个始终是正确值的一半的值。

def similarity(self, other):
    if self.vector_norm == 0 or other.vector_norm == 0:
        return 0.0
    return numpy.dot(self.vector, other.vector) / (self.vector_norm * other.vector_norm)

如果您对同义词的相似性分数进行排名,则可能没问题。但是如果你需要正确的余弦相似度得分,那么结果是不正确的。

我提交了问题here。希望很快就会得到解决。

答案 1 :(得分:2)

感谢Ethan关于问题跟踪器的报告,现在已经修复了。

现在默认情况下你也会获得GloVe向量 - 所以相似性通常应该更准确。

答案 2 :(得分:0)

这可能是因为比较文本之一的单词含糊。注意:OOV单词对于不同的spacy模型是不同的!模型有不同的词汇。