赞
踩
最近做自然语言处理算法,需要根据词向量判断两个词汇的相似度。面临两个选择:欧氏距离和余弦相似度。选择哪一个好呢?
为便于理解这个问题,假设词向量是二维的。我们分析一下这两种方法计算词向量相似度的方法的特点。假设两个词向量 X ( x 1 , x 2 ) X(x_1,x_2) X(x1,x2) 和 Y ( y 1 , y 2 ) Y(y_1,y_2) Y(y1,y2):
【欧氏距离】:
d
=
(
x
1
−
y
1
)
2
+
(
x
2
−
y
2
)
2
(1)
\tag1 d = \sqrt{(x_1-y_1)^2+(x_2-y_2)^2}
d=(x1−y1)2+(x2−y2)2
(1)
【余弦相似度】:
c
o
s
=
x
1
y
1
+
x
2
y
2
x
1
2
+
x
2
2
y
1
2
+
y
2
2
(2)
\tag2 cos = \frac{x_1y_1+x_2y_2}{\sqrt{x_1^2+x_2^2}\sqrt{y_1^2+y_2^2}}
cos=x12+x22
y12+y22
x1y1+x2y2(2)
参见下图:
其中,欧氏距离是线段 XY 的长度,余弦相似度是单位元弧长X’Y’对应角度的余弦。显而易见,我们也很容易定义一个单元圆(单位球)投影距离,当然,这个投影距离本质上就是向量 X 和 Y 之间的夹角|XOY|。
【夹角距离】:
θ
=
a
r
c
c
o
s
(
x
1
y
1
+
x
2
y
2
x
1
2
+
x
2
2
y
1
2
+
y
2
2
)
(3)
\tag3 \theta=arccos(\frac{x_1y_1+x_2y_2}{\sqrt{x_1^2+x_2^2}\sqrt{y_1^2+y_2^2}})
θ=arccos(x12+x22
y12+y22
x1y1+x2y2)(3)
向量欧氏距离 |XY| 和夹角 |XOY| 并不能保持单调函数关系,也就是说存在这种可能性,欧氏距离增加可能导致对应的单位元投影弧长减少。
产生这种原因的根本原因是,向量欧氏距离是二维空间的度量值,而向量夹角(或单位圆投影弧长)是一维空间的度量值。如果把直角坐标转换成极坐标,就很容易理解了。向量 X ( r x , α ) X(r_x,\alpha) X(rx,α) 和 向量 Y ( r y , β ) Y(r_y,\beta) Y(ry,β)直接舍去极径,只保留极角,相当于把二维空间的图形投影到了一维空间(单位圆圆周)上。
于是我们看到,向量之间的距离|XY|,和向量的夹角距离|XOY| 之间必然存在冲突,导致向量之间距离增加时,其投影之间的距离反而会减少。然而,这是否意味着用向量夹角度量其距离不可行呢?
我们平时看到的照片,是三维空间到二维空间的投影。可以肯定的是,三维空间欧氏距离较近的点,在照片中距离也较近。反之,照片中距离较近的点,在三维空间中未必很近,距离较远的概率也是有的。
既然欧氏距离和夹角距离冲突不可避免,那么冲突的概率有多大呢?
我不打算做严格的理论推导,画一幅图直观说明一下:
图中当向量 B 固定不动,如果 A 点移动到红色区域,则 A、B 的欧氏距离减少但角 AOB 的增加,如果 A 点移动到蓝色区域,则 A、B 的欧氏距离增加但角 AOB 的减少。当 A、B 距离很近时,红色区域面积很小。也就是说,如果欧氏距离较小,夹角距离通常也会很小。但是,夹角距离较小,欧氏距离还是可能较大的。
另外必须说明的是,词向量空间维度较高。例如腾讯的词向量提供了两种规格,一种是100维的,另一种是200维的。在高维空间下,上述冲突空间的比例几乎可以忽略不计。
有一个不成熟的想法:对于向量 X = ( x 1 , x 2 , . . . , x n ) , Y = ( y 1 , y 2 , . . . , y n ) X=(x_1,x_2,...,x_n), Y=(y_1,y_2,...,y_n) X=(x1,x2,...,xn),Y=(y1,y2,...,yn),定义向量 D = ( d 1 , d 2 , . . . , d n ) = ( ∣ x 1 − y 1 ∣ , ∣ x 2 − y 2 ∣ , . . . , ∣ x n , y n ∣ ) D = (d_1,d_2,...,d_n)=(|x_1-y_1|,|x_2-y_2|,...,|x_n,y_n|) D=(d1,d2,...,dn)=(∣x1−y1∣,∣x2−y2∣,...,∣xn,yn∣),如果数据为平均分布,利用统计学知识可以证明:
lim n → ∞ ( d 1 2 + d 2 2 + . . . + d n − 1 2 n − 1 − d 1 2 + d 2 2 + . . . + d n 2 n ) = 0 (4) \tag4 \lim_{n\to \infty }( \frac{d_1^2+d_2^2+...+d_{n-1}^2}{n-1} - \frac{d_1^2+d_2^2+...+d_{n}^2}{n}) =0 n→∞lim(n−1d12+d22+...+dn−12−nd12+d22+...+dn2)=0(4)
打个不严格的比方,如果知道了数学、语文、物理、化学的成绩,即使还不知道英语的成绩,我应该有能力判断出两名学生谁的总成绩更好了。当然,不同课程成绩之间存在一定相关性,而词向量不同维度之间的数据可能没有相关性。但是,如果每个维度的值域都限制在【-1,1】这个有限的区间,那么,如果两个向量前99维坐标计算出的距离很近,用100维坐标计算器距离,大概率也会很近。
换句话讲,当空间维度足够大时,可以用向量在子空间投影来“估算”向量在高维空间距离。这一点与统计学上用少量样本数据估计整体情况是一样的。这种说法不太严格,但可以算是对数据降维使用的一个理由。
用余弦相似度(或向量夹角)取代欧氏距离,仅仅降低了一个维度,对实际的影响更是微乎其微,因此可以放心使用。
向量 $X=(x_1,x_2,…,x_n),Y=(y_1,y_2,…,y_n) $ 归一化后,使其满足:
x
1
2
+
x
2
2
+
.
.
.
+
x
n
2
=
1
y
1
2
+
y
2
2
+
.
.
.
+
y
n
2
=
1
(5)
\tag5 x_1^2+x_2^2+...+x_n^2 = 1 \\ y_1^2+y_2^2+...+y_n^2 = 1
x12+x22+...+xn2=1y12+y22+...+yn2=1(5)
于是,余弦相似度可以简化为:
c
o
s
=
x
1
y
1
+
x
2
y
2
+
.
.
.
+
x
n
y
n
(6)
\tag6 cos=x_1y_1+x_2y_2+...+x_ny_n
cos=x1y1+x2y2+...+xnyn(6)
因此,如果打算采用余弦相似度,可事先把词向量做归一化处理,从而简化后续计算。
余弦相似度值域为 [-1,1],等于1时为完全相似。这个特点在根据词向量计算文本相似度时更为有用。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。