我试图找到两个随机单词的余弦相似度(使用手套向量)。正如预期的那样,相似度的分布集中在 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()
