SpaCy 中的 .similarity 方法是如何计算的?

机器算法验证 自然语言 word2vec tf-idf nltk
2022-02-15 07:01:20

不确定这是否是正确的堆栈站点,但这里有。

.similiarity 方法是如何工作的?

哇 spaCy 很棒!它的 tfidf 模型可能更简单,但 w2v 只需要一行代码?!

在他 关于 spaCy 的10 行教程中,andrazhribernik向我们展示了可以在令牌、发送、单词块和文档上运行的 .similarity 方法。

之后nlp = spacy.load('en')doc = nlp(raw_text) 我们可以在令牌和块之间进行 .similarity 查询。.similarity但是,这种方法在幕后计算的是什么?

SpaCy 已经有了非常简单的.vector,它计算从 GloVe 模型训练的 w2v 向量(一个.tfidf.fasttext方法有多酷?)。

该模型是简单地计算这两个 w2v、.vector、向量之间的余弦相似度还是比较其他一些矩阵?文档中的细节不清楚任何帮助表示赞赏!

2个回答

找到了答案,简而言之,是的:

链接到源代码

return numpy.dot(self.vector, other.vector) / (self.vector_norm * other.vector_norm)

这看起来像是计算余弦相似度的公式,并且向量似乎是用 SpaCy 创建的.vector,文档说它是从 GloVe 的 w2v 模型训练的。

默认情况下,它是余弦相似度,向量对文档中的缺失词进行平均。

您还可以通过将钩子设置为 来自定义它doc.user_hooks['similarity']这个管道组件包装了相似度函数,可以很容易地自定义相似度:

https://github.com/explosion/spaCy/blob/develop/spacy/pipeline.pyx#L50