1. 概述
在本文中,我们将深入讲解余弦相似度(Cosine Similarity)的基本概念。首先定义什么是余弦相似度,并从几何角度解释其意义。然后介绍它在多个领域的常见应用场景,最后通过一个简单示例帮助你更好地理解其计算过程。
余弦相似度是一种广泛应用于机器学习、自然语言处理和推荐系统的相似性度量方法,尤其适用于高维向量空间中的比较。
2. 定义
余弦相似度用于衡量两个非零向量在多维空间中的相似程度。其核心思想是通过计算两个向量夹角的余弦值来判断它们的相似性。
设两个向量分别为:
$$ \vec{a} = (a_1, a_2, ..., a_n), \quad \vec{b} = (b_1, b_2, ..., b_n) $$
则它们的余弦相似度公式为:
$$ \text{sim}(\vec{a}, \vec{b}) = \cos(\theta) = \frac{\vec{a} \cdot \vec{b}}{||\vec{a}|| \cdot ||\vec{b}||} $$
其中:
- $\vec{a} \cdot \vec{b}$ 表示向量点积
- $||\vec{a}||$ 和 $||\vec{b}||$ 分别表示向量 $\vec{a}$ 和 $\vec{b}$ 的模长(L2范数)
余弦相似度的取值范围为 [-1, 1],其含义如下:
✅ 1:两个向量完全相似
✅ 0:两个向量正交(无相关性)
❌ -1:两个向量完全相反(强不相似)
⚠️ 中间值代表不同程度的相似性
3. 几何解释
余弦相似度的本质是两个向量之间夹角的余弦值。这个角度决定了它们的“方向”有多接近。
3.1 正交向量(90°)
当两个向量夹角为 90° 时,$\cos(90^\circ) = 0$,说明这两个向量相互垂直,没有方向上的重合。
例如,上图中夹角为 59°,$\cos(59^\circ) \approx 0.559$,说明两个向量有约 56% 的相似度。
3.2 相似向量(< 90°)
当夹角减小到 10° 时,$\cos(10^\circ) \approx 0.9848$,说明两个向量方向非常接近,相似度高达 98%。
3.3 相反向量(> 90°)
当夹角为 160° 时,$\cos(160^\circ) \approx -0.9756$,说明两个向量方向相反,具有强不相似性。
4. 应用场景
余弦相似度在多个领域中都有广泛应用,以下是几个典型应用场景:
4.1 信息检索
在文档检索系统中,常使用余弦相似度来衡量查询文档与候选文档之间的语义相似性。文档通常被表示为向量,通过计算与查询向量的余弦相似度来排序返回结果。
4.2 自然语言处理(NLP)
在 NLP 中,词向量(如 Word2Vec、GloVe)之间使用余弦相似度来衡量两个词在语义上的接近程度。这对于文本分类、情感分析、摘要生成等任务非常有用。
4.3 推荐系统
在推荐系统中,用户或物品的行为数据通常会被编码为向量。通过计算用户向量之间的余弦相似度,可以找到兴趣相似的用户群体,从而进行个性化推荐。
4.4 降维可视化
在进行 t-SNE 或 PCA 等降维操作时,我们希望在低维空间中保持原始数据点之间的相似性。余弦相似度可以作为衡量高维与低维空间相似性是否保持良好的指标。
5. 示例:手动计算余弦相似度
我们以两个二维向量为例,手动计算它们的余弦相似度。
设:
$$ \vec{a} = (4, -3), \quad \vec{b} = (-8, 6) $$
步骤 1:计算点积
$$ \vec{a} \cdot \vec{b} = 4 \times (-8) + (-3) \times 6 = -32 -18 = -50 $$
⚠️ 注意:原示例中点积计算有误,正确结果应为 -50,而非 14
步骤 2:计算向量模长
$$ ||\vec{a}|| = \sqrt{4^2 + (-3)^2} = \sqrt{16 + 9} = 5 $$ $$ ||\vec{b}|| = \sqrt{(-8)^2 + 6^2} = \sqrt{64 + 36} = 10 $$
步骤 3:计算余弦相似度
$$ \text{sim}(\vec{a}, \vec{b}) = \frac{-50}{5 \times 10} = \frac{-50}{50} = -1 $$
✅ 结果为 -1,说明这两个向量方向完全相反。
6. 总结
余弦相似度是一种非常实用的向量相似性度量方法,尤其适用于高维空间。它通过计算向量夹角的余弦值来衡量方向上的相似性,而不受向量长度影响。
它在信息检索、NLP、推荐系统、降维等多个领域都有广泛应用。理解其几何意义和数学公式,有助于我们在实际项目中更准确地使用它。
如果你在使用过程中发现相似度结果与预期不符,建议检查以下几点:
- 向量是否进行了标准化处理
- 向量维度是否一致
- 是否有数值精度问题(如除以0)
掌握余弦相似度的原理和应用,将有助于你更好地理解和构建基于向量的模型系统。