平均随机词向量的余弦相似度

数据挖掘 机器学习 词嵌入
2022-03-06 10:27:51

我试图找到两个随机单词的余弦相似度(使用手套向量)。正如预期的那样,相似度的分布集中在 0 附近,因为可以合理地认为两个随机词不会彼此相似。

但是,当我尝试对 10 个单词的 2 个随机集合做类似的事情时,即我取两个集合中 10 个单词的平均向量并计算余弦相似度,相似度往往集中在 0.8。

这似乎表明给定 2 个 10 个单词的随机句子,它们在语义上很可能是相似的。这可能是什么解释?

包含 python 代码来重现结果。

import spacy
nlp = spacy.load('en')

vocab = nlp.vocab
words = np.array([x.orth_.encode('utf8') for x in vocab])

hist1 = []
n = 1000
num_words = 1
for _ in range(n):
    x,y = choice(words, size=(2,num_words))
    x = nlp(" ".join([u.decode('utf8') for u in x]))
    y = nlp(" ".join([u.decode('utf8') for u in y]))
    s = x.similarity(y)
    hist1.append(s)

hist10 = []
n = 1000
num_words = 10
for _ in range(n):
    x,y = choice(words, size=(2,num_words))
    x = nlp(" ".join([u.decode('utf8') for u in x]))
    y = nlp(" ".join([u.decode('utf8') for u in y]))
    s = x.similarity(y,)
    hist10.append(s)

plt.hist([hist1,hist10], label=[1,10])
plt.legend()

余弦相似度分布

1个回答

这里没有什么太令人惊讶的了。随着您对越来越多的单词进行采样,样本均值是总体均值的更好估计值。这被称为大数定律。