gpt4 book ai didi

python - 使用相同来源的余弦相似度和完全不同的结果

转载 作者:行者123 更新时间:2023-11-30 09:42:22 25 4
gpt4 key购买 nike

我正在学习词嵌入和余弦相似度。我的数据由两组相同的单词组成,但使用两种不同的语言。

我做了两个测试:

  1. 我使用词向量的平均值来测量余弦相似度(我认为它应该被称为软余弦相似度)
  2. 我使用词向量测量了余弦相似度

我应该期望获得完全相同的结果吗?我注意到有时我会得到两个相反的结果。由于我是新手,我想弄清楚我是否做错了什么或者背后是否有解释。根据我读到的内容,软余弦相似度应该比通常的余弦相似度更准确。

现在,是时候向您展示一些数据了。不幸的是,我无法发布我的部分数据(文字本身),但我会尽力为您提供尽可能多的信息。

之前的一些其他细节:

  • 我正在使用 FastText 创建嵌入、skipgram 模型默认参数。
  • 对于软余弦相似度,我使用 Scipyspatial distance cosine 。根据一些人的建议,为了测量余弦相似度,我似乎应该从公式中减去 1,例如:

(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):
    """计算 vec_a 和 vec_b 之间的余弦相似度"""
    返回 np.dot(vec_a, vec_b)/\
    (np.linalg.norm(vec_a) * np.linalg.norm(vec_b))

正如您从此处的图像中看到的,对于某些单词,我使用两种方法获得了相同的结果或非常相似的结果。对于其他人,我得到了两个完全不同的结果。我该如何解释这一点?

My data v2

最佳答案

据我了解,两个向量 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”在法语中的翻译是“有能力”而不是“能够”;)

关于python - 使用相同来源的余弦相似度和完全不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57192563/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com