SpaCy的相似度是如何计算的?

3

初学者NLP问题:

.similarity方法是如何工作的?

哇,spaCy太棒了!它的tfidf模型可能更容易预处理,但只有一行代码的w2v(token.vector)?! - 太棒了!

在他在spaCy上的10行教程中,andrazhribernik向我们展示了可以在tokens、sents、word chunks和docs上运行的.similarity方法。

nlp = spacy.load('en')doc = nlp(raw_text)之后,我们可以在tokens和chunks之间进行.similarity查询。然而,在这个.similarity方法背后计算的是什么?

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

模型相似性模型是否仅计算这两个w2v-GloVe向量之间的余弦相似度或者还有其他事情发生?规格未在文档中明确说明。任何帮助都将不胜感激!


更新:从v2.0.1.0开始,加载其他预训练向量(例如Facebook的FastText)非常容易。感谢spaCy团队!https://spacy.io/usage/vectors-similarity#custom-loading-other - whs2k
2个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
3
假设您所指的方法是令牌相似性,您可以在源代码此处找到该函数。如您所见,它计算向量之间的余弦相似度。 正如教程中所述: 块引用:单词嵌入是单词(以及整个语言语料库)的表示,通过向量或其他形式的数字映射来实现。这允许将单词作为数字处理,其中单词相似性表示为单词嵌入映射维度的空间差异。 因此,向量距离可以与单词相似性相关联。

是的,那就是我所指的 - 謝謝!我的問題更多的是:這些“向量”是如何計算的?它只是使用與token.vector相同的GloVe word2vec模型嗎?我認為答案是肯定的,因為我找不到任何其他詞嵌入向量化方法的提及(例如詞袋或tfidf)。 - whs2k
1
默认情况下,它使用GloVe算法计算的一百万个英语单词的向量进行加载。您可以为单词字典计算自己的向量表示,并使用vocab.load_vectors()进行加载。 - lmartens

1

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

源代码链接

return numpy.dot(self.vector, other.vector) / (self.vector_norm * other.vector_norm)
这似乎是计算余弦相似度的公式,向量似乎是使用SpaCy的.vector创建的,该文档表示其经过GloVe的w2v模型训练。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,