计算文档搜索的余弦相似度时的TF-IDF向量内容

时间:2015-07-17 05:41:14

标签: tf-idf corpus cosine-similarity cosine

假设您正在尝试在语料库中找到与给定搜索查询最相似的文档。我已经看到一些示例创建了TF-IDF向量,这些向量是给定查询的长度,有些创建TF-IDF向量,使用语料库中的每个术语。

其中一种方法是"纠正"这样做的方法?

1 个答案:

答案 0 :(得分:1)

假设您的语料库为["funny dogs", "boring cats", "funny bunnies"],词汇["funny", "boring", "dogs", "cats", "bunnies"]。文件的TF-IDF矩阵是[[0.5,0,1,0,0],[0,0.5,0,1,0],[0.5,0,0,0,1]]

您有两种表示新文档的方式(搜索查询):

1:密集载体。

有趣的猫的密集TF-IDF载体"是[1,0,0,1,0]。与每个文档的余弦相似性的公式(我实际上只是做点积;我因为每个文档向量具有相同的范数而遗漏了分母)

cos("funny cats", "funny dogs") ~ 0.5*0.5+0*0+0*1+1*0+0*0 = 0.25
cos("funny cats", "boring cats") ~ 0.5*0+0*0.5+0*0+1*1+0*0 = 1
cos("funny cats", "funny bunnies") ~ 0.5*0.5+0*0+0*0+1*0+0*1 = 0.25

所以最接近的比赛是"无聊的猫"因为"猫"是一个比#34;搞笑"更为罕见且可能更具信息量的词。

2:稀疏矢量。

"有趣的猫的稀疏TF-IDF载体"是[[0,0.25], [3,1]]。计算是

cos("funny cats", "funny dogs") ~ 0.5*0.5+1+1 = 0.25
cos("funny cats", "boring cats") ~ 0.5+1*1 = 1
cos("funny cats", "funny bunnies") ~ 0.5*0.5+1*0 = 0.25

基本上,由于您只查看非零值,因此您执行的操作较少。这取决于词汇表中有多少单词,这可能也可能不重要。