我有2个问题,
我通过找出每个单词在文档中出现的次数从文档中创建了一个向量。这是制作矢量的正确方法吗?还是我还必须做其他事情?
使用上述方法,我创建了 16 个不同大小的文档的向量。现在我想应用余弦相似度来找出每个文档的相似度。我遇到的问题是获得两个向量的点积,因为它们的大小不同。我该怎么做?
我有2个问题,
我通过找出每个单词在文档中出现的次数从文档中创建了一个向量。这是制作矢量的正确方法吗?还是我还必须做其他事情?
使用上述方法,我创建了 16 个不同大小的文档的向量。现在我想应用余弦相似度来找出每个文档的相似度。我遇到的问题是获得两个向量的点积,因为它们的大小不同。我该怎么做?
听起来很合理,只要它意味着你有一个列表/地图/字典/散列(word, count)
作为你的向量表示。
您应该假装在某个向量中没有出现的单词的值为零,而不会将这些零存储在任何地方。然后,您可以使用以下算法来计算这些向量的点积(伪代码):
algorithm dot_product(a : WordVector, b : WordVector):
dot = 0
for word, x in a do
y = lookup(word, b)
dot += x * y
return dot
该lookup
部分可以是任何东西,但为了速度,我会使用哈希表作为矢量表示(例如 Python 的dict
)。