【发布时间】:2019-07-31 00:32:04
【问题描述】:
我正在学习词嵌入和余弦相似度。我的数据由两组相同的单词组成,但有两种不同的语言。
我做了两个测试:
- 我使用词向量的平均值来测量余弦相似度(我认为应该改为软余弦相似度)
- 我使用词向量测量了余弦相似度
我应该期望获得完全相同的结果吗?我注意到有时我有两个相反的结果。由于我是新手,我试图弄清楚我是否做错了什么,或者背后是否有解释。根据我一直在阅读的内容,软余弦相似度应该比通常的余弦相似度更准确。
现在,是时候向您展示一些数据了。不幸的是,我无法发布我的部分数据(单词本身),但我会尽力为您提供我可以提供给您的最大信息。
之前的一些其他细节:
- 我正在使用 FastText 创建嵌入,skipgram 模型 默认参数。
- 对于软余弦相似度,我使用Scipy spatial distance cosine。按照一些人的建议,要衡量余弦相似度,我似乎应该从公式中减去 1,例如:
(1-distance.cosine(data['LANG1_AVG'].iloc[i],data['LANG2_AVG'].iloc[i]))
-
对于通常的余弦相似度,我使用来自FastText Multilingual 的Fast Vector cosine similarity,以这种方式定义:
@classmethod def cosine_similarity(cls, vec_a, vec_b): """Compute cosine similarity between vec_a and vec_b""" return np.dot(vec_a, vec_b) / \ (np.linalg.norm(vec_a) * np.linalg.norm(vec_b))
正如您从此处的图像中看到的那样,对于某些单词,我使用这两种方法获得了相同或非常相似的结果。对于其他人,我得到了两个完全不同的结果。我该如何解释?
【问题讨论】:
-
生成一个最小的例子。如果您无法显示您正在使用的单词,请尝试使用其他可以显示的单词。
-
平均值的公式是什么?我从来没有听说过以这种方式计算向量相似度,这似乎很奇怪,而且你想保留一个向量与另一个向量相比的位置信息,如果你计算平均值,你会丢失这些信息......而且,你为什么期望结果是否相似?
-
@roadrunner66 我加了一个例子
-
@qmeeus 我不确定它们是否应该相似。这是我第一次这样做,所以我对此有点困惑:我问了周围,他们说这可能只是矢量尺寸的问题。平均值的公式是对同一单词的值的简单统计平均值。
标签: python machine-learning cosine-similarity word-embedding machine-translation