为什么我的余弦相似度总是为正? (快速文本)

问题描述 投票:0回答:1

我正在尝试评估代表单词的两个向量的余弦相似度。我正在使用来自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)

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

numpy trigonometry similarity fasttext
1个回答
0
投票

[我不确定您使用的是哪个快速文本数据集,但是我从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))
© www.soinside.com 2019 - 2024. All rights reserved.