tf-idf权重会影响余弦相似度吗?

3
我正在对文本文档进行聚类。我正在使用tf-idf和余弦相似度。但是,有一些我并不真正理解的东西,尽管我正在使用这些度量方法。tf-idf权重是否会影响两个文档之间的相似性计算?
假设我有以下两个文档:
1- 高树。
2- 高树高树高树高树。
然后,两个文档之间的相似性将为1,尽管两个文档的tf-idf向量是不同的。第二个文档应该比第一个文档的术语具有更高的权重。
假设两个向量的权重为(仅假设):
v1(1.0,1.0)
v2(5.0,8.0)
计算余弦相似度得到1.0。
下面是两个共享相同术语但权重不同的随机向量的草图。
向量之间有明显的角度,因此权重应该起到作用!
这触发了一个问题,tf / idf权重在相似性计算中起什么作用?因为到目前为止,我所理解的是这里的相似性仅关心术语的存在和不存在。
3个回答

4

首先,你的计算有误。(1, 1) 和 (5, 8) 之间的余弦相似度是

1*5 + 1*8 / ||(1, 1)|| * ||(5, 8)||
= 13 / (1.4142 * 9.434)
= .97

其中||x||是向量x的欧几里得范数。

因为我目前理解的是,这里的相似性只关心词项的存在和缺失。

那不是真的。考虑一下:

d1 = "hello world"
d2 = "hello world hello"

使用tf向量(这里不考虑idf)。
v1 = [1, 1]
v2 = [2, 1]

余弦相似度为0.95,而非1。
IDF可能会产生进一步的影响。假设我们加上:
d3 = "hello"

然后df("hello") = 3df("world") = 2,以及d1d2的tf-idf向量变为:

v1' = [ 1.        ,  1.28768207]
v2' = [ 2.        ,  1.28768207]

余弦相似度略小,为0.94。(使用scikit-learn计算的tf-idf和余弦相似度;由于不同种类的tf-idf有所不同,因此其他软件包可能会给出不同的数字。)


3
我认为您在混淆两个不同的概念。
1.余弦相似度测量欧几里得空间中两个不同向量之间的角度,独立于权重如何计算。
2.TF-IDF为文档中的每个术语和给定集合决定权重,可以用于余弦相似度的每个分量(以及其他内容)的向量。
希望这能帮到您。

2
余弦相似度并不真正衡量距离,而是衡量角度。这两者相关但并不相同。 - Fred Foo
@larsmans,关于余弦的观点很有趣。由于在欧几里得空间中,两个向量之间的差异仅通过角度来衡量,这难道不会使得两个向量之间的距离变得更近吗?除了计算两个向量之间的角度之外,还有其他方法来衡量它们之间的差异吗? - alvas
2
@alvas:欧几里得空间中两个向量的距离通常用欧几里得距离来度量。余弦相似度s可以转化为不相似度1-s,但这并不是一个合适的度量标准(http://math.stackexchange.com/questions/102924/cosine-similarity-distance-and-triangle-equation),因此称其为“距离”有点牵强。 - Fred Foo

0

请查看我的回答以及问题本身

Python: tf-idf-cosine: to find document similarity

基本上,如果你想同时使用tf-idf和余弦相似度,那么你可以获取tf-idf向量并将余弦相似度应用于该向量以获得最终结果。所以在这里,你将余弦相似度(在这种情况下是tf-idf向量的点积)应用于tf-idf分数。

答案中还有3个教程,你可以参考一下。它们解释了这个过程如何工作。谢谢。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接