- Motivation
在计算两个特征之间的相似程度的时候经常会用到余弦相似度公式,这个公式以前在高中学过,不高好像已经基本还给老师了,今天再这里补充一下。在NLP中经常需要对特征表征之后的高维向量之间计算相似度,有向量 a \mathrm a a和向量 b \mathrm b b, a = ( x 1 , x 2 , . . . , x n ) \mathrm a=(x_1,x_2,...,x_n) a=(x1,x2,...,xn), b = ( x 1 ′ , x 2 ′ , . . . , x n ′ ) \mathrm b=(x'_1,x'_2,...,x'_n) b=(x1′,x2′,...,xn′),则向量 a \mathrm a a和 b \mathrm b b之间的余弦相似度为
c o s < a , b > = a ⋅ b ∣ a ∣ ∣ b ∣ = x 1 x 1 ′ + x 2 x 2 ′ + , . . . , + x n x n ′ x 1 ² + x 2 ² + , . . . , + x n ² x 1 ′ ² + x 2 ′ ² + , . . . , + x n ′ ² = u T v ∣ ∣ u ∣ ∣ 2 ∣ ∣ v ∣ ∣ 2 cos<\mathrm a,\mathrm b>=\frac{\mathrm a·\mathrm b}{|\mathrm a||\mathrm b|}=\frac{x_1x'_1+x_2x'_2+,...,+x_nx_n'}{\sqrt{x_1²+x_2²+,...,+x_n²}\sqrt{x'_1²+x'_2²+,...,+x'_n²}}=\frac{u^Tv}{||u||_2||v||_2} cos<a,b>=∣a∣∣b∣a⋅b=x1²+x2²+,...,+xn²x1′²+x2′²+,...,+xn′²x1x1′+x2x2′+,...,+xnxn′=∣∣u∣∣2∣∣v∣∣2uTv
2.Derivation proof
首先需要该公式来之于两向量的数量积公式
a
⋅
b
=
∣
a
∣
∣
b
∣
c
o
s
<
a
,
b
>
\mathrm a·\mathrm b=|\mathrm a||\mathrm b|cos<\mathrm a,\mathrm b>
a⋅b=∣a∣∣b∣cos<a,b>该公式的推导如下:
在图片中有
c
=
a
−
b
\mathrm c = \mathrm a - \mathrm b
c=a−b,(注:为了表示的方便我们在二维的平面上表示向量,实际上特征的维度一般可以达到几百甚至几千维)由余弦定理可以得到如下公式
c
²
=
a
²
+
b
²
−
2
∣
a
∣
∣
b
∣
c
o
s
<
a
,
b
>
①
c²=\mathrm a²+\mathrm b²-2|\mathrm a||\mathrm b|cos<\mathrm a,\mathrm b>①
c²=a²+b²−2∣a∣∣b∣cos<a,b>①
把
c
=
a
−
b
\mathrm c = \mathrm a - \mathrm b
c=a−b带入到公式①中化简之后便可以得到数量积公式。
a
⋅
b
=
∣
a
∣
∣
b
∣
c
o
s
<
a
,
b
>
\mathrm a·\mathrm b=|\mathrm a||\mathrm b|cos<\mathrm a,\mathrm b>
a⋅b=∣a∣∣b∣cos<a,b>
补充:
关于余弦定理的几何证明方法如下:
如图所示,在△ABC中,BC=a,AC=b,AB=c,
作AD⊥BC于D,则AD=c*sinB,DC=a-BD=a-c*cosB
在Rt△ACD中,
b²=AD²+DC²=(c*sinB)²+(a-c*cosB)²
=c²sin²B+a²-2ac*cosB+c²cos²B
=c²(sin²B+cos²B)+a²-2ac*cosB
=c²+a²-2ac*cosB