根据我在stackoverflow上发现的几篇文章(例如此Why does word2Vec use cosine similarity?),在训练了word2vec(CBOW或Skip-gram)模型之后,通常的做法是计算两个单词向量之间的余弦相似度。但是,这对我来说似乎有些奇怪,因为该模型实际上是使用点积作为相似性分数进行训练的。这方面的一个证据是,我们在训练后得到的词向量的范数实际上是有意义的。那么为什么人们在计算两个单词之间的相似度时仍然使用余弦相似度而不是点积呢?
答案 0 :(得分:1)
答案 1 :(得分:-1)
我对你的问题没有明确的答案,OP。但我绝对赞同你的问题。几年前我使用过 word 2 vec,但我根本没有使用相似性。现在我正在 gensim 中训练一个 item2vec 模型,我发现 cosine sim 不能很好地工作,这正是你刚才所说的原因。
所以回想一下为什么,很明显,在优化word2vec模型时,损失函数来自点积,为了减少损失,我们增加了点积。所以这可以通过拉伸 vec 或将 vec 推得更近来实现。只有推在一起的部分会增加余弦模拟。因此点积应该是更真实的函数。我也通过运行验证过。