计算两种不同尺寸矢量的余弦相似度

时间:2012-09-19 15:01:00

标签: math vector nlp dot-product cosine-similarity

我有2个问题,

  1. 我通过查找每个单词出现在文档中的次数,从文档中创建了一个向量。这是制作载体的正确方法吗?或者我还必须做其他事情吗?

  2. 使用上述方法,我创建了16个文档的向量,这些文档具有不同的大小。现在我想应用余弦相似性来找出每个文档的相似程度。我遇到的问题是得到两个向量的点积,因为它们的大小不同。我该怎么做?

1 个答案:

答案 0 :(得分:3)

  1. 听起来很合理,只要这意味着您有(word, count)对的list / map / dict / hash作为矢量表示。

  2. 对于某些向量中没有出现的单词,您应该pretend that you have zero values,而不将这些零存储在任何位置。然后,您可以使用以下算法计算这些向量的点积(伪代码):

    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)。