查询和文档之间的余弦相似度

时间:2018-11-09 02:10:31

标签: python numpy multidimensional-array information-retrieval cosine-similarity

因此,我正在努力寻求信息检索的概念。是关于给定查询的文档的余弦相似性。

我正在处理约1000个文件,以生成带有[docID x词]的词频矩阵。

我已经生成了这个矩阵,但是我对如何处理查询并从中生成余弦相似度感到困惑。

我得到了一个查询,该查询包含了我应该通过语料库解析的术语。并生成了一个向量,其中所有docID都包含至少一个单词。

所以我应该根据余弦相似度来计算所有这些行向量?

示例:

查询是一个列表,其中在术语频率矩阵中具有列位置和术语

OccurenceVector是一个数组,其中包含查询中所有单词的所有文档

Query = [[2796, 'crystalline'], [6714, 'lens'], [5921, 'including'], [5566, 'humans']]
OccurrenceVector = array([ 13,  14,  15,  72,  79, 138, 142, 164, 165, 166, 167, 168, 169,
   170, 171, 172, 180, 181, 182, 183, 184, 185, 186, 211, 212, 213,
   499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511,
   512, 513])

我的思考过程是这样的:

  1. [docID x项]的频率矩阵(行x列)

  2. 接收带有针对语料库的词语的查询

  3. 使用这些术语出现的所有docID检索向量

  4. 检索与检索到的docID对应的每一行

  5. 计算检索到的所有行之间的余弦相似度?

这是用这样的多维数组计算余弦相似度的正确方法吗?

1 个答案:

答案 0 :(得分:1)

我建议您看看6th Chapter of IR Book(尤其是6.3)。

您还需要将查询视为文档。在为文档构造查询时,构造一个向量。然后,为了获得最佳匹配,您需要针对查询的所有文档向量计算相似度。

请记住,您还可以选择一个文档向量,并计算它与语料库中所有其他文档的相似度。通过这种方式,您可以计算文档之间的相似度。

希望这会有所帮助。

欢呼