我正在学习单词嵌入和余弦相似度。我的数据由两组相同的单词组成,但是使用2种不同的语言。
我做了两个测试:
我应该获得完全相同的结果吗?我注意到有时我有两个相反的结果。由于这是我的新手,因此我试图找出我做错了什么还是背后有解释。根据我的阅读,软余弦相似度应该比通常的余弦相似度更准确。
现在是时候显示一些数据了。不幸的是,我无法发布部分数据(单词本身),但是我会尽力为您提供我可以提供的最大信息。
之前的一些其他详细信息:
(1-distance.cosine(data['LANG1_AVG'].iloc[i],data['LANG2_AVG'].iloc[i]))
对于通常的余弦相似性,我使用Fast Vector cosine similarity中的FastText Multilingual,其定义方式如下:
@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))
正如您从此处的图片中所看到的,对于某些词,使用这两种方法我获得了相同或相当的结果。对于其他人,我获得了两个完全不同的结果。我该怎么解释?
答案 0 :(得分:1)
据我了解,两个向量x和y之间的软相似性由(avg(x)* avg(y))/(abs(avg(x))* abs(avg(y)))= sign(avg(x)* avg(y)),取1或-1,取决于平均值是否具有相同的符号。这可能不是很有帮助。
通过(x * y)/(|| x || * || y ||)计算余弦相似度。指向相同方向的2个矢量的相似度为1(x * x = || x || ^ 2),指向相反方向的2个矢量的相似度为-1(x * -x =-|| x || ^ 2)和2个垂直向量的相似度为0((1,0)*(0,1)= 0)。如果向量之间的角度不等于0、90、180或270之一,则您将获得(但不等于)-1和1之间的相似度得分。
底线:忘记平均值,仅使用余弦相似度。请注意,余弦相似度是比较向量的方向而不是长度。
PS:法语中“ able”的翻译是“ capable”而不是“ able”;)
答案 1 :(得分:0)
经过更多的研究,我发现了2014年的论文(Soft Similarity and Soft Cosine Measure: Similarity of Features in Vector Space Model)解释了何时以及如何使用特征的平均值可能有用,并且还解释了什么是精确的软余弦量度:< / p>
我们的想法更笼统:我们建议修改 向量空间模型中相似度的计算方式 考虑到功能的相似性。如果我们申请 这个想法到余弦度量,然后是“软余弦 引入了“措施”,而不是传统的“硬性措施” 余弦”,忽略了特征的相似性。注意 当我们考虑每对特征的相似性时, 等同于在VSM中引入新功能。 本质上,我们在两对之间具有相似性矩阵 的功能,所有这些功能代表了VSM中的新维度。