【问题标题】:How is SpaCy's similarity computed?SpaCy 的相似度是如何计算的?
【发布时间】:2018-03-03 01:24:34
【问题描述】:

这里是初学者 NLP 问题:

.similiarity 方法是如何工作的?

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

在他的10 line tutorial on spaCyandrazhribernik 中向我们展示了可以在令牌、发送、单词块和文档上运行的 .similarity 方法。

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

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

模型相似度模型是简单地计算这两个 w2v-GloVe-vector 之间的余弦相似度还是做其他事情? documentation 中的具体情况尚不清楚;任何帮助表示赞赏!

【问题讨论】:

标签: python machine-learning nlp word2vec spacy


【解决方案1】:

找到了答案,总之,是的:

Link to Souce Code

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

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

【讨论】:

    【解决方案2】:

    假设你说的方法是token相似度法,你可以在源码here中找到函数。如您所见,它计算向量之间的余弦相似度。

    正如教程中所说:

    一个词嵌入是一个词的表示,并通过扩展整个语言语料库,在一个向量或其他形式的数字映射中。这允许对单词进行数值处理,单词相似度表示为单词嵌入映射维度中的空间差异。

    所以向量距离可以和词的相似度相关。

    【讨论】:

    • 是的,这就是我所指的 - 谢谢!我的问题更多:这些“向量”是如何计算的?它只是使用与 token.vector 相同的 GloVe word2vec 模型吗?我认为答案是肯定的,因为我找不到任何其他用于词嵌入的向量化方法(例如词袋或 tfidf)。
    • 因此默认情况下,它会加载使用 GloVe 算法计算的一百万个英文单词的向量。您可以为单词词典计算自己的向量表示,并使用 vocab.load_vectors() 加载它们。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-28
    • 1970-01-01
    • 2021-11-18
    • 2019-10-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多