在 Python 中 spaCy 的教程示例中,
结果 apples.similarity(oranges)
是
0.39289959293092641
0.7857989796519943
有什么理由吗?教程的原始文档 https://spacy.io/docs/ 与我得到的答案不同的教程:http: //textminingonline.com/getting-started-with-spacy
谢谢
在 Python 中 spaCy 的教程示例中,
结果 apples.similarity(oranges)
是
0.39289959293092641
0.7857989796519943
有什么理由吗?教程的原始文档 https://spacy.io/docs/ 与我得到的答案不同的教程:http: //textminingonline.com/getting-started-with-spacy
谢谢
这似乎是 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)
如果您正在对同义词的相似度得分进行排名,这可能没问题。但是如果你需要正确的余弦相似度分数,那么结果是不正确的。
我在这里提交了问题。希望它会很快得到修复。
多亏了 Ethan 关于问题跟踪器的报告,这个问题现在得到了修复。
现在,您还将获得默认情况下的 GloVe 向量——因此相似性通常应该更准确。
这可能是因为其中一个比较文本有一个超出词汇表的词。注意:不同的spacy模型OOV单词不同!模型有不同的词汇。