余弦相似度的一些问题

4

昨天我学习到余弦相似度的定义如下:

enter image description here

它可以有效地衡量两个向量的相似度。

我发现这里的定义使用L2范数来标准化AB的点积,我感兴趣的是为什么不在分母中使用AB的L1范数?

我的老师告诉我,如果我在分母中使用L1范数,则当A=B时,余弦相似度将不为1。然后,我进一步问他,如果我修改余弦相似度的定义如下,相对于原始模型,修改模型的优缺点是什么?

sim(A,B) = (A * B) / (||A||1 * ||B||1) 如果 A!=B

sim(A,B) = 1 如果 A==B

如果有人能给我更多的解释,我将不胜感激。

1个回答

10
如果您使用了L1范数,则不再计算余弦相似度。
余弦是一个几何概念,而不是随意的定义。它有一整套附加的数学理论。如果您使用了L1范数,就不再测量角度了。
另请参阅:维基百科:三角函数-余弦 请注意,余弦函数在L2归一化向量上单调递增到欧氏距离。
Euclidean(x,y)^2 = sum( (x-y)^2 ) = sum(x^2) + sum(y^2) - 2 sum(x*y)

如果 x 和 y 被 L2 正则化,那么 sum(x^2)=sum(y^2)=1,然后

Euclidean(x_norm,y_norm)^2 = 2 * (1 - sum(x_norm*y_norm)) = 2 * (1 - cossim(x,y))

因此,使用余弦相似性基本上意味着将数据标准化为单位长度。但是,与此相关的还有计算上的好处,因为对于稀疏数据,sum(x * y)的计算成本更低。

如果对数据进行了L2归一化,则

Euclidean(x_norm, y_norm) = sqrt(2) * sqrt(1-cossim(x,y))

针对你问题的第二部分:修正 L1 范数并不容易。考虑向量 (1,1) 和 (2,2)。显然,这两个向量具有相同的角度,因此应该具有余弦相似度为 1。

使用您的方程式,它们将具有相似度 (2+2)/(2*4) = 0.5

看向向量 (0,1) 和 (0,2) - 大多数人认为它们应该具有与上面示例相似的相似度(余弦确实给出相同的相似度),但是您的方程式得到的结果是 (0+2)/(1+2) = 0.6666...。所以您的相似度并不符合直觉,对吗?


感谢您的解释。我认为可以使用L1范数的原因是基于以下示例:Doc1包含(I,love,you),而Doc2只有(you)。我认为(you)是Doc1和Doc2之间共享的常见单词。 Doc1选择(you)的概率为1/3。那么,在我看来,Doc1和Doc2之间的相似度似乎为1/3,但如果使用余弦相似度,则相似度将为1 / sqrt(3)。您能告诉我为什么在我的示例中1 / sqrt(3)比1/3更好吗?谢谢。 - John Smith
这就是如何定义(0,0,1)和(1,1,1)之间的角度...如果你想要一个不同的距离度量 - 例如Jaccard - 那很好;但它不再是一个角度,而是例如集合交集大小;或者如果你对概率距离(“Doc1选择的概率...”)感兴趣,那么可以看看发散度量和\chi^2距离。这些存在,但它们有不同的直觉和名称。 - Has QUIT--Anony-Mousse

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