the*_*gen 1 nlp similarity spacy
我试图了解Spacy中的相似性是如何工作的。我尝试使用梅拉尼娅·特朗普的讲话和米歇尔·奥巴马的讲话来看看它们有多相似。
这是我的代码。
import spacy
nlp = spacy.load('en_core_web_lg')
file1 = open("melania.txt").read().decode('ascii', 'ignore')
file2 = open("michelle.txt").read().decode('ascii', 'ignore')
doc1 = nlp(unicode(file1))
doc2 = nlp(unicode(file2))
print doc1.similarity(doc2)
我得到的相似分数是0.9951584208511974。在我看来,这个相似度分数非常高。它是否正确?难道我做错了什么?
默认情况下,spaCy计算余弦相似度。通过比较单词向量或单词嵌入(单词的多维含义表示)来确定相似性。
它返回 return (numpy.dot(self.vector, other.vector) / (self_norm * other_norm))
text1 = 'How can I end violence?'
text2 = 'What should I do to be a peaceful?'
doc1 = nlp(text1)
doc2 = nlp(text2)
print("spaCy :", doc1.similarity(doc2))
print(np.dot(doc1.vector, doc2.vector) / (np.linalg.norm(doc1.vector) * np.linalg.norm(doc2.vector)))
输出:
spaCy : 0.916553147896471
0.9165532
似乎spaCy的.vector方法创建了向量。文档说,spaCy的模型是根据GloVe的向量进行训练的。
小智 5
SpaCy 对于句子或文档的相似度只是构成它们的所有词向量的平均值。因此,如果有 2 次演讲(这些将是多个句子)
那么每个语音的相关词向量之间的相似度可能会很高。但如果你只用单个短句子做同样的事情,那么它在语义上就会失败。
例如,考虑下面的两个句子:
第 1 句:“这是关于飞机和航空公司的”
第 2 句:“这与飞机和航空公司无关”
0.989662尽管含义相反,这两个句子在 SpaCy 中都会给出很高的相似度分数 ( )。看起来not的向量与句子中的其余单词没有太大不同,而且vector_norm也很相似。