在使用点积相似性进行训练后,为什么在Word2Vec中使用余弦相似性

时间:2019-01-28 22:10:01

标签: nlp word2vec cosine-similarity word-embedding dot-product

根据我在stackoverflow上发现的几篇文章(例如此Why does word2Vec use cosine similarity?),在训练了word2vec(CBOW或Skip-gram)模型之后,通常的做法是计算两个单词向量之间的余弦相似度。但是,这对我来说似乎有些奇怪,因为该模型实际上是使用点积作为相似性分数进行训练的。这方面的一个证据是,我们在训练后得到的词向量的范数实际上是有意义的。那么为什么人们在计算两个单词之间的相似度时仍然使用余弦相似度而不是点积呢?

2 个答案:

答案 0 :(得分:1)

余弦相似度和点积都是相似度,但是点积对幅度敏感,而余弦相似度不敏感。根据一个单词的出现次数,它可能与另一个单词的点积大或小。我们通常对向量进行归一化以防止这种影响,因此所有向量都具有单位幅度。但是,如果您的特定下游任务需要将出现次数作为特征,那么可能会乘以点积,但是如果您不关心计数,则可以简单地计算余弦相似度,以将它们归一化。

答案 1 :(得分:-1)

我对你的问题没有明确的答案,OP。但我绝对赞同你的问题。几年前我使用过 word 2 vec,但我根本没有使用相似性。现在我正在 gensim 中训练一个 item2vec 模型,我发现 cosine sim 不能很好地工作,这正是你刚才所说的原因。

所以回想一下为什么,很明显,在优化word2vec模型时,损失函数来自点积,为了减少损失,我们增加了点积。所以这可以通过拉伸 vec 或将 vec 推得更近来实现。只有推在一起的部分会增加余弦模拟。因此点积应该是更真实的函数。我也通过运行验证过。