在之前的文章 嵌入和语义检索 中,我们了解了把文本变成向量的方法,由于这些向量相当于将文本做了分类:语义相近的距离越近,所以这些向量就可以很方便的应用于语义检索场景了。
比较向量相似度(vector similarity)的常见算法主要分为两大类:
1️⃣ 基于“角度/方向”的度量
2️⃣ 基于“距离/差异”的度量
下面我们系统的整理一下。
一、基于“方向”的相似度算法(常用于语义相似度)
这些方法关注向量间的夹角或方向一致性,而不太关心长度。
1. 余弦相似度(Cosine Similarity)
-
公式:
$$ \text{cosine-sim}(A, B) = \frac{A \cdot B}{||A|| , ||B||} $$ -
值域:[-1, 1]
越接近 1,表示两个向量方向越相似。 -
特点:
忽略向量的大小,只看“方向”是否一致。 -
应用:
文本嵌入、语义搜索、推荐系统(例如BERT、Word2Vec后常用)。
2. 点积(Dot Product)
-
公式: $$ A \cdot B = \sum_i A_i B_i $$
-
几何意义:
点积的几何意义本质是将一个向量投影到另一个向量上,再计算投影长度与被投影向量长度的乘积,它直接关联向量的方向关系。
点积的另一个计算公式为:$\vec{A} \cdot \vec{B} = |\vec{A}| \cdot |\vec{B}| \cdot \cos\theta$,其中$\theta$是两个向量的夹角,这个公式直接体现了其几何意义,可拆解为两步:- 计算向量$\vec{B}$在向量$\vec{A}$方向上的投影长度,即$|\vec{B}| \cdot \cos\theta$;
- 将这个投影长度与向量$\vec{A}$的自身长度$|\vec{A}|$相乘,得到点积结果。
反过来,也可以理解为向量$\vec{A}$在$\vec{B}$方向上的投影长度乘以$|\vec{B}|$,结果完全相同。
数学真是太神奇了,使用不同的方法计算,正确结果只有一个。
- 衍生意义:判断向量方向关系:
点积的正负和大小,能直接反映两个向量的方向关联,这是其几何意义的重要应用:
- $\vec{A} \cdot \vec{B} > 0$:$\cos\theta > 0$,夹角$\theta < 90^\circ$,两个向量方向大致相同(锐角或同向);
- $\vec{A} \cdot \vec{B} = 0$:$\cos\theta = 0$,夹角$\theta = 90^\circ$,两个向量垂直(正交);
- $\vec{A} \cdot \vec{B} < 0$:$\cos\theta < 0$,夹角$\theta > 90^\circ$,两个向量方向大致相反(钝角或反向)。
- 特点:
向量越长、方向越相近,点积越大。 若向量已归一化,则点积 = 余弦相似度。 - 应用:
在神经网络、注意力机制(attention score)中常用。
3. 皮尔逊相关系数(Pearson Correlation)
- 公式: $$ r(A, B) = \frac{\sum_i (A_i - \bar{A})(B_i - \bar{B})}{\sqrt{\sum_i (A_i - \bar{A})^2} \sqrt{\sum_i (B_i - \bar{B})^2}} $$
- 特点:
衡量线性相关性,与余弦相似度相似,但会去除平均值影响。 - 应用:
用户行为相似度、推荐系统协同过滤。
二、基于“距离”的相似度算法(越小越相似)
这些算法测量两个向量的“距离”,常用于数值特征。
4. 欧氏距离(Euclidean Distance)
-
公式: $$ d(A, B) = \sqrt{\sum_i (A_i - B_i)^2} $$
-
几何意义:
欧氏距离的几何意义本质是n维空间中两个点之间的“直线距离”,是平面几何中两点间距离公式在高维空间的直接推广。从二维到高维的直观理解:
欧氏距离的核心是“直线最短”,在不同维度空间中表现为具体的直线距离:
- 二维空间:平面上两点 $(x_1,y_1)$ 和 $(x_2,y_2)$ 之间的直线距离,公式为 $\sqrt{(x_2-x_1)^2 + (y_2-y_1)^2}$,对应勾股定理中斜边的长度。
- 三维空间:立体空间中两点 $(x_1,y_1,z_1)$ 和 $(x_2,y_2,z_2)$ 之间的直线距离,公式扩展为 $\sqrt{(x_2-x_1)^2 + (y_2-y_1)^2 + (z_2-z_1)^2}$。
- n维空间:对于抽象的n维数据点(如机器学习中的特征向量),欧氏距离同样表示两点沿各维度坐标差值构成的“超空间直线长度”,公式为 $\sqrt{\sum_{i=1}^n (x_{i2}-x_{i1})^2}$。
- 特点:
直观、最常见。距离越小越相似(如两个用户的偏好特征、两个样本的属性)。 - 应用:
聚类(KMeans)、图像向量检索。
5. 曼哈顿距离(Manhattan Distance)
- 公式: $$ d(A, B) = \sum_i |A_i - B_i| $$
- 特点:
对异常值更鲁棒,适合稀疏向量。 - 应用:
特征稀疏的场景(如词袋模型)。
6. 闵可夫斯基距离(Minkowski Distance)
- 公式: $$ d(A, B) = \left( \sum_i |A_i - B_i|^p \right)^{1/p} $$
- 特点:
欧氏距离(p=2)和曼哈顿距离(p=1)的泛化形式。
7. 切比雪夫距离(Chebyshev Distance)
- 公式: $$ d(A, B) = \max_i |A_i - B_i| $$
- 特点:
只关心最大差异的维度。
实际应用推荐
| 应用场景 | 推荐算法 |
|---|---|
| 文本语义相似度 | 余弦相似度、欧氏距离、点积 |
| 图像特征匹配 | 欧氏距离、余弦相似度 |
| 用户行为相似度 | 皮尔逊相关系数 |
| 稀疏特征向量 | 曼哈顿距离 |
总结
在语义检索(semantic retrieval)领域,最常用的相似度比较算法是:余弦相似度(使用最广泛、最经典的语义相似度算法)、欧氏距离、点积。
在语义检索系统(如基于 BERT / BGE / SimCSE / OpenAI Embedding)的实现里:
| 算法 | 常见用途 | 备注 |
|---|---|---|
| 余弦相似度 | 文本语义检索、RAG系统 | 默认标准 |
| 欧氏距离 | 向量数据库内部优化 | 距离越小越相似 |
| 点积相似度 | 注意力机制、嵌入匹配 | 速度快,常见于模型内部 |
🪐感谢观看,祝好运🪐