首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >word2vec的余弦相似性大于1

word2vec的余弦相似性大于1
EN

Stack Overflow用户
提问于 2016-12-29 20:52:21
回答 1查看 9.7K关注 0票数 6

我使用spark的word2vec算法来计算文本的文档向量。

然后,我使用模型对象的findSynonyms函数来获得几个单词的同义词。

我看到的是这样的东西:

代码语言:javascript
复制
w2vmodel.findSynonyms('science',4).show(5)
+------------+------------------+
|        word|        similarity|
+------------+------------------+
|     physics| 1.714908638833209|
|     fiction|1.5189824643358183|
|neuroscience|1.4968051528391833|
|  psychology| 1.458865636374223|
+------------+------------------+

我不明白为什么余弦相似性被计算为大于1,余弦相似性应该在0到1之间,或者max -1和+1 (取负角度)。

为什么这里超过一个?这里出什么问题了?

EN

回答 1

Stack Overflow用户

发布于 2016-12-29 21:11:33

您应该规范化从word2vec获得的单词向量,否则您将得到无界点积或余弦相似度值。

来自Levy等人,2015年 (实际上,大多数关于单词嵌入的文献):

将向量归一化为单位长度,然后再用于相似度计算,使余弦相似度和点积等价。

如何进行规范化?

你可以在下面这样做。

代码语言:javascript
复制
import numpy as np

def normalize(word_vec):
    norm=np.linalg.norm(word_vec)
    if norm == 0: 
       return word_vec
    return word_vec/norm

参考资料

更新:为什么word2vec的余弦相似度大于1?

根据这个回答,在word2vec的火花实现中,findSynonyms实际上并不返回余弦距离,而是余弦距离乘以查询向量的范数。

排序和相对值与实际余弦距离一致,但实际值都是缩放的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41387000

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档