5.4 使用余弦度量相似度
要度量两个目标词 v v v 和 w w w 的相似度,需要一个指标:输入两个维数相同的向量——可能都以词为维度、长度为 V V V ,也可能都以文档为维度、长度为 D D D ——输出二者的相似程度。最常用的指标是两向量夹角的余弦。
与 NLP 中多数向量相似度度量一样,余弦基于线性代数中的点积 (dot product),也称内积 (inner product):
dot product ( v , w ) = v ⋅ w = ∑ i = 1 N v i w i = v 1 w 1 + ⋯ + v N w N (5.7) \operatorname{dot\ product}(\mathbf v,\mathbf w)=\mathbf v\cdot\mathbf w=\sum_{i=1}^Nv_iw_i=v_1w_1+\cdots+v_Nw_N\tag{5.7} dot product ( v , w ) = v ⋅ w = i = 1 ∑ N v i w i = v 1 w 1 + ⋯ + v N w N ( 5.7 ) 点积可以充当相似度指标,因为当两个向量在相同维度上都有大值时,点积往往较高。反之,在不同维度为零的正交向量 (orthogonal vectors)点积为 0,表示很不相似。
但原始点积偏爱长向量。向量长度定义为:
∣ v ∣ = ∑ i = 1 N v i 2 (5.8) |\mathbf v|=\sqrt{\sum_{i=1}^Nv_i^2}\tag{5.8} ∣ v ∣ = i = 1 ∑ N v i 2 ( 5.8 ) 向量越长、各维数值越高,点积也越高。高频词往往与更多词共现,且各共现值更高,因此向量更长,原始点积也会更大。但我们希望相似度不受词频影响。
为对向量长度归一化,用两个向量长度的乘积除点积。根据向量点积定义,这个归一化点积正好等于两向量夹角的余弦:
a ⋅ b = ∣ a ∣ ∣ b ∣ cos θ a ⋅ b ∣ a ∣ ∣ b ∣ = cos θ (5.9) \begin{array}{rcl}\mathbf a\cdot\mathbf b&=&|\mathbf a||\mathbf b|\cos\theta\\\frac{\mathbf a\cdot\mathbf b}{|\mathbf a||\mathbf b|}&=&\cos\theta\end{array}\tag{5.9} a ⋅ b ∣ a ∣∣ b ∣ a ⋅ b = = ∣ a ∣∣ b ∣ cos θ cos θ ( 5.9 ) 因此,向量 v \mathbf v v 与 w \mathbf w w 的余弦相似度 (cosine similarity)为:
cos ( v , w ) = v ⋅ w ∣ v ∣ ∣ w ∣ = ∑ i = 1 N v i w i ∑ i = 1 N v i 2 ∑ i = 1 N w i 2 (5.10) \cos(\mathbf v,\mathbf w)=\frac{\mathbf v\cdot\mathbf w}{|\mathbf v||\mathbf w|}=\frac{\sum_{i=1}^Nv_iw_i}{\sqrt{\sum_{i=1}^Nv_i^2}\sqrt{\sum_{i=1}^Nw_i^2}}\tag{5.10} cos ( v , w ) = ∣ v ∣∣ w ∣ v ⋅ w = ∑ i = 1 N v i 2 ∑ i = 1 N w i 2 ∑ i = 1 N v i w i ( 5.10 ) 有些应用会预先把每个向量除以其长度,得到长度为 1 的单位向量 (unit vector)。对单位向量,点积就等于余弦。
同向向量的余弦为 1,正交向量为 0,反向向量为 −1。不过,原始频率值均非负,因此这类向量的余弦范围是 0 到 1。
使用下表的简化原始计数,比较 cherry 和 digital 中谁与 information 的意义更接近:
pie data computer cherry 442 8 2 digital 5 1683 1670 information 5 3982 3325
cos ( cherry, information ) = 442 × 5 + 8 × 3982 + 2 × 3325 44 2 2 + 8 2 + 2 2 5 2 + 398 2 2 + 332 5 2 = . 018 cos ( digital, information ) = 5 × 5 + 1683 × 3982 + 1670 × 3325 5 2 + 168 3 2 + 167 0 2 5 2 + 398 2 2 + 332 5 2 = . 996 \begin{array}{l}\cos(\text{cherry, information})=\frac{442\times5+8\times3982+2\times3325}{\sqrt{442^2+8^2+2^2}\sqrt{5^2+3982^2+3325^2}}=.018\\\cos(\text{digital, information})=\frac{5\times5+1683\times3982+1670\times3325}{\sqrt{5^2+1683^2+1670^2}\sqrt{5^2+3982^2+3325^2}}=.996\end{array} cos ( cherry, information ) = 44 2 2 + 8 2 + 2 2 5 2 + 398 2 2 + 332 5 2 442 × 5 + 8 × 3982 + 2 × 3325 = .018 cos ( digital, information ) = 5 2 + 168 3 2 + 167 0 2 5 2 + 398 2 2 + 332 5 2 5 × 5 + 1683 × 3982 + 1670 × 3325 = .996 模型判断 information 与 digital 的距离远近于它与 cherry 的距离,这很合理。
图 5.5 余弦相似度的粗略图示。在由附近 computer 和 pie 的计数定义的二维空间中,展示 cherry、digital 和 information 三个词的向量。图中没有直接画出余弦,但突出了夹角:digital 与 information 的夹角小于 cherry 与 information 的夹角。两个向量越相似,余弦越大而夹角越小;夹角最小(0 ∘ 0^\circ 0 ∘ )时余弦达到最大值 1。
余弦相似度可用于估计词相似度,如寻找词语释义、追踪词义变化,或自动发现不同语料中的词义。要找目标词 w w w 最相似的 10 个词,可以计算 w w w 与其余 ∣ V ∣ − 1 |V|-1 ∣ V ∣ − 1 个词的余弦并排序,取前 10 个。