【问题标题】:Why is my cosine similarity always positive? (fasttext)为什么我的余弦相似度总是正的? (快文)
【发布时间】:2020-03-25 16:18:23
【问题描述】:

我正在尝试评估表示单词的两个向量的余弦相似度。我正在使用来自 fasttext 的预训练词向量。 现在,我想知道为什么我的余弦相似度总是一个正数,无论我使用什么词。有什么建议吗?

这是我的代码的那一部分。 a 和 b 是词向量。

def cos_sim(a, b):
   dot_product = np.dot(a, b)
   norm_a = np.linalg.norm(a)
   norm_b = np.linalg.norm(b)
   return dot_product / (norm_a * norm_b)

如果有人可以帮助我,我会很高兴,因为我仍然处于初学者的水平。

【问题讨论】:

  • 您在上面发布的代码没有任何问题,当我尝试使用a = [1, 1]b = [-1, -1](即给出-1)时,它按预期工作。所以所有的余弦相似度都是正的纯粹是由于词向量。你是怎么得出他们都是积极的结论的?你都试过了吗?还有余弦相似度的 sklearn 实现,无需自己动手,link
  • @Hiho 感谢您的回复!我尝试了大约 70 个单词或更多。因此,这只是巧合的可能性很小。我也有点困惑的是 np.dot 的描述,它是:“如果 a 是 N-D 数组并且 b 是 M-D 数组(其中 M>=2),它是最后一个轴的和积a 和 b 的倒数第二个轴:dot(a, b)[i,j,k,m] = sum(a[i,j,:] * b[k,:,m]) n 维 (n>2) 向量的点积总是这样计算的吗?我也会尝试 sklearn 实现来检查它是否有所作为.
  • 我不确定点积,但为什么在这种情况下这很重要,a 和 b 都应该是一维的?
  • @Hiho 哦哦哦!是的,对不起!我以为 [1,2,3] 会是 3D 的!好久没码字了!谢谢!

标签: numpy trigonometry similarity fasttext


【解决方案1】:

我不确定您使用的是哪个 fasttext 数据集,但我从 here 下载了 1M、300 维的 wiki 新闻,并使用下面的示例代码,我得到了一些负余弦相似度。

所以你可能只需要尝试更多的词向量,但我不认为你做错了什么。

import io
import numpy as np
from sklearn.metrics.pairwise import cosine_similarity

ffp = "/path/to//wiki-news-300d-1M.vec"

def load_vectors(fname):
    fin = io.open(fname, 'r', encoding='utf-8', newline='\n', errors='ignore')
    n, d = map(int, fin.readline().split())
    data = {}
    for ix, line in enumerate(fin):
        tokens = line.rstrip().split(' ')
        data[tokens[0]] = list(map(float, tokens[1:]))

        if ix > 1000:
            break
    return data

data = load_vectors(ffp)
word_vectors = np.asarray(list(data.values()))

r = cosine_similarity(word_vectors[300:500, :], word_vectors[100:200])

print(r.min())
print(np.count_nonzero(r < 0))

【讨论】:

  • 非常感谢您的努力!当我使用我的模型运行此代码时,它还返回存在一些负余弦相似性......确切地说是 1562。现在我想知道我偶然得到正值的概率有多大。如果我理解正确,r 由 20 000 个余弦相似度组成。因此,一个为负数的概率为 1562/20000=0.0781,这是非常低的。因此,在仅测试 70 个单词时,我没有发现任何负余弦相似性是可以的。如果我弄错了,请纠正我。
  • 是的,我认为你很好,而且 70 人都是积极的只是巧合。
猜你喜欢
  • 2016-11-20
  • 2020-08-12
  • 2019-03-14
  • 1970-01-01
  • 2021-08-04
  • 2014-02-25
  • 2011-01-01
  • 2022-01-07
相关资源
最近更新 更多