1

在向量数据库中,度量方式(Metric, Distance/Similarity Metric)指的是用于衡量两个向量之间“相似度”或“距离”的数学方法。

选择合适的度量方式直接影响到向量检索、排序、匹配的效果,在不同的场景中需要选择不同的度量方式。

1. 欧式距离

欧式距离是最常见的距离度量,描述的是两个点在空间中的“直线距离”。

向量化使得每个数据在多维空间中都有自己的坐标点位置,那么坐标点之间越近的,相似度应该会越高。即欧式距离越小,表示两个向量越相似。

适合用在特征分布均衡、特征量纲一致的场景。

1.1.推导过程

从二维、三维开始,推导欧式距离的计算公式。

二维空间

先看一下二维空间怎么计算欧式距离

如图,计算二维坐标下 A (x1,y1)、B (x2,y2) 两点之间的距离结果为:

$$ d(\mathbf{A}, \mathbf{B}) = \sqrt{(x_2 - x_1)2 + (y_2 - y_1)2} $$

咋一看,这不就是 勾股定理 嘛!

三维空间

再看看三维空间的图

同样计算公式差不多:

$$ d(\mathbf{A}, \mathbf{B}) = \sqrt{(x_2 - x_1)2 + (y_2 - y_1)2 + (z_2 - z_1)2} $$

欧式距离公式

以此类推,可以得出 n 维空间下,欧式距离计算公式为:

$$ d(\mathbf{A}, \mathbf{B}) = \sqrt{\sum_{i=1}{n} (x_i - y_i)2} $$

1.2. 曼哈顿距离

欧式距离是直线距离,类似的还有曼哈顿距离。

如下图,实际地图上两点之间的要走路的距离,不会是一条直线,要基于街区实际的道路来。如下图,以曼哈顿街区距离为例,因此命名曼哈顿距离。

二维公式

$$ \text{曼哈顿距离} = |x2 - x1| + |y2 - y1| $$

N维公式

$$ \text{曼哈顿距离} = \sum_{i=1}^{n} |x_i - y_i| $$

1.3. 欧式距离命名

既然二维空间的公式就是勾股定理,为啥后世命名“欧式距离”。

欧式距离,得名于希腊数学家欧几里得,他在《几何原本》中系统总结了平面(二维)和空间几何(三维)的基本规律,奠定了欧氏几何的基础。为了纪念他,后人将这种空间中的直线距离称为“欧式距离”。

1.4. 缺点

维数灾难

欧式距离在低维空间(如二维或三维)中是直观的。然而,当维度 n 很高时,欧式距离会变得难以直观理解,甚至可能失去意义。

在高维空间中,数据点的分布变得非常稀疏。即使数据点的数量很大,在高维空间中它们仍然显得非常“分散”。这种稀疏性导致:

  • 数据点之间的欧式距离变得很大,导致计算各点欧式距离的值时差距不大。
  • 直线距离(欧式距离)不再是衡量相似度的有效指标,因为数据点的分布过于分散。

欧式距离在高维空间中会因为数据稀疏性、距离趋同等问题失去意义,这被称为“维数灾难”。

没有方向

多维空间中存储的是向量,向量除了有长度,还有方向。在计算距离时容易忽略方向。

如下图的例子,有3个向量:

  • A 向量坐标 ( 1 , 1 )
  • B 向量坐标 ( 3 , 3 )
  • C 向量坐标 ( -1 , -1 )

假如 向量 B、C 是向量库中数据,要查找和向量A 相似度最高的数据,选哪个呢?

通过欧式距离来看,A 离2个向量的距离是相同的。但 向量A 和 向量B 方向相同,和向量C 方向相反,相似度最高的应该是向量B。

因此如果要考虑方向,欧式距离就不太适合了。

2. 内积

2.1. 定义

向量中,在考虑长度的同时,也考虑方向,就可以用向量的内积公式:

向量内积(也叫点积、数量积)是数学中两个向量之间的一种运算,结果是一个数(标量)。

设有两个向量 a、b,则它们的内积定义为:

$$ \vec{a} \cdot \vec{b} = |\vec{a}| \cdot |\vec{b}| \cdot \cos\theta $$

  • a和b的模对应两个向量的长度
  • 两个向量夹角的余弦值对应方向

    • \( \cos\theta \) > 0 :\( \theta \)小于90°,方向“接近”
    • \( \cos\theta \) = 0 :\( \theta \)等于90°,方向“正交”
    • \( \cos\theta \) < 0 :\( \theta \)小大于90°,方向“相反”

2.2. 物理力学应用

内积在物理力学上应用很常见:

当一个物体在力\( \vec{F} \)的作用下,沿着位移\( \vec{s} \)移动时,力对物体做的功为:

$$ W = \vec{F} \cdot \vec{s} = |\vec{F}| \cdot |\vec{s}| \cdot \cos\theta $$

其中:

  • \( W \):做功
  • \( \vec{F} \):力的向量
  • \( \vec{s} \):位移向量
  • \( \theta \):力和位移的夹角

当 \( \vec{F} \)和 \( \vec{s} \) 同方向时,\( \cos\theta \)= 1 ,相同的力做功最大。

2.3. 向量相似度应用

在实际应用中,内积常用来衡量两个向量的相似度。例如:

  • 文本向量化后相似度计算:将文本转为向量后,两个文本的内积越大,说明它们内容越相似。
  • 推荐系统中的Embedding匹配:用户和商品分别用向量表示,内积越大,表示用户和商品越“匹配”。

\( \cos\theta \)值的范围是 [ -1 , 1 ] ,但向量的长度没有限制,因此内积的值区间为:\( (-\infty, +\infty) \)

向量数据库中存储的是向量的多维坐标,在计算内积的时候,不可能量每个向量之间夹角\( \theta \)的角度。

因此通常会用到 内积的另一个计算公式:

$$ \vec{a} \cdot \vec{b} = a_1b_1 + a_2b_2 + ... + a_nb_n = \sum_{i=1}^n a_i b_i $$

没错,如果是二维坐标系下 \( \vec{a} \) 的坐标 \( (x_1,y_1) \),\( \vec{b} \) 的坐标 \( (x_2,y_2) \),那么一下两个公式是等价的,都表示两个向量之间的内积:

$$ \vec{a} \cdot \vec{b} = |\vec{a}| \cdot |\vec{b}| \cdot \cos\theta = x_1x_2 + y_1y_2 $$

3. 内积公式推导

3.1. 余弦定理推导内积公式

假设在平面上有两个点 \( A(x_1, y_1) \) 和 \( B(x_2, y_2) \),以及原点 \( O(0, 0) \)。我们要通过余弦定理推导出两向量 \( \mathbf{OA} \) 和 \( \mathbf{OB} \) 的点积公式,即:

$$ \mathbf{OA} \cdot \mathbf{OB} = x_1x_2 + y_1y_2 $$

数学推导公式时,先确定 已知 ,那么这里的已知项就是 三角形余弦定理

已知:三角形余弦定理

在一个任意三角形中,设三角形的三个顶点为 A、B、C,对应的三边分别为:

  • a:顶点 A 对应的边(即边 BC)
  • b:顶点 B 对应的边(即边 AC)
  • c:顶点 C)对应的边(即边 AB)

如果 是边 b 和 c 所夹的角(即角 \( \angle BAC \) ),那么余弦定理可以表示为:

$$ a2 = b^2 + c^2 - 2bc\cos\theta $$

余弦定理是直角三角形勾股定理的推广。在直角三角形中,夹角 \( \theta = 90^\circ \),因此 \( \cos\theta = 0 \)。此时,余弦定理退化为勾股定理:

$$ a^2 = b^2 + c^2 $$

余弦定理在以下情况下非常有用:

  1. 求三角形的一边:已知两边及它们夹角,求第三边的长度。
  2. 求三角形的角度:已知三边的长度,求任意一个角的大小。
1、向量的模长和夹角

在几何中:

  • 向量 \( \mathbf{OA} \) 的长度(模)为: \( |\mathbf{OA}| = \sqrt{x_12 + y_12} \)
  • 向量 \( \mathbf{OB} \)的长度(模)为: \( |\mathbf{OB}| = \sqrt{x_22 + y_22} \)
  • 向量 \( \mathbf{OA} \) 和 \( \mathbf{OB} \) 的夹角为 \( \theta \)。

根据余弦定理,我们知道:

$$ |\mathbf{AB}|2 = |\mathbf{OA}|2 + |\mathbf{OB}|^2 - 2|\mathbf{OA}||\mathbf{OB}|\cos\theta $$

其中 \( |\mathbf{AB}| \) 是点 A 和点 B 的距离。

2、点 A 和点 B 的距离

点 ( A(x_1, y_1) ) 和点 ( B(x_2, y_2) ) 的距离 ( \( |\mathbf{AB}| \) ) 可以通过两点间距离公式计算:

$$ |\mathbf{AB}| = \sqrt{(x_2 - x_1)2 + (y_2 - y_1)2} $$

因此:

$$ |\mathbf{AB}|2 = (x_2 - x_1)2 + (y_2 - y_1)^2 $$

3、将距离公式代入余弦定理

根据余弦定理:

$$ |\mathbf{AB}|2 = |\mathbf{OA}|2 + |\mathbf{OB}|^2 - 2|\mathbf{OA}||\mathbf{OB}|\cos\theta $$

将点 ( A ) 和点 ( B ) 的距离公式代入:

$$ (x_2 - x_1)2 + (y_2 - y_1)2 = (x_12 + y_12) + (x_22 + y_22) - 2\sqrt{x_12 + y_12}\sqrt{x_22 + y_22}\cos\theta $$

4、展开两边并比较
  • 展开左边:

    $$ (x_2 - x_1)2 + (y_2 - y_1)2 = x_22 - 2x_1x_2 + x_12 + y_22 - 2y_1y_2 + y_12 $$

  • 整理得到

$$ x_12 + y_12 + x_22 + y_22 - 2(x_1x_2 + y_1y_2) $$

  • 右边为:

$$ x_12 + y_12 + x_22 + y_22 - 2\sqrt{x_12 + y_12}\sqrt{x_22 + y_22}\cos\theta $$

  • 比较两边的式子,发现:

    $$ -2(x_1x_2 + y_1y_2) = -2\sqrt{x_12 + y_12}\sqrt{x_22 + y_22}\cos\theta $$

  • 消去 (-2),得到:

    $$ x_1x_2 + y_1y_2 = \sqrt{x_12 + y_12}\sqrt{x_22 + y_22}\cos\theta $$

5、点积公式

根据点积的定义:

$$ \mathbf{OA} \cdot \mathbf{OB} = |\mathbf{OA}||\mathbf{OB}|\cos\theta $$

因此,点积可以表示为:

$$ \mathbf{OA} \cdot \mathbf{OB} = x_1x_2 + y_1y_2 $$

6、结论

我们从三角形的余弦定理出发,推导出了二维向量点积的公式:

$$ \mathbf{OA} \cdot \mathbf{OB} = x_1x_2 + y_1y_2 $$

3.2. 附加:余弦定理推导

如果对余弦定理的公式也存疑,可以看看下图证明二中通过勾股定理推导余弦定理。

4. 余弦相似度

了解完内积后,余弦相似度就很容易理解了。

余弦就是 \( \cos\theta \) 。

计算余弦相似度,就是计算两个向量之间 \( \cos\theta \) 的值。

二维空间下,内积公式:

$$ \vec{a} \cdot \vec{b} = |\vec{a}| \cdot |\vec{b}| \cdot \cos\theta = \sqrt{x_1^2 + y_1^2} \cdot \sqrt{x_2^2 + y_2^2} \cdot \cos\theta = x_1x_2 + y_1y_2 $$

因此余弦相似度公式:

$$ \cos\theta = \frac{x_1x_2 + y_1y_2}{\sqrt{x_1^2 + y_1^2} \cdot \sqrt{x_2^2 + y_2^2}} $$

对应 在多维空间下完整余弦相似度公式为:

$$ \text{Cosine Similarity} = \frac{\sum_{i=1}^n a_i b_i}{\sqrt{\sum_{i=1}^n a_i^2} \cdot \sqrt{\sum_{i=1}^n b_i^2}} $$

5. 语义向量化更关注方向

在大语言模型的应用场景中,通常通过嵌入模型将文本语义转换成向量。在RAG检索时,也是在向量数据库中检索相似度更高的向量。

那么文本语义经过嵌入模型向量化后,更关注向量的长度还是方向呢?这决定了我们使用哪种度量方式。

首先得出结论,更关注方向,度量方式首选余弦相似度。

5.1. 嵌入模型向量化属性

文本语义在经过嵌入模型向量化之后,生成的向量主要包含方向和长度两个属性。

向量的方向

方向代表了文本的语义信息。

如果两个文本的语义相近(比如都是在说“天气很好”),它们被嵌入后的向量方向会很接近。

向量的长度

长度(也叫范数、模、norm)可以理解为该向量的“强度”或“置信度”,但在大多数文本嵌入场景下,长度本身通常不携带具体的语义信息。

嵌入模型有时会输出长度不同的向量,这可能和输入文本的长度、模型训练细节等有关。但大部分情况下,我们并不关心它的长度。

5.2. 语义相似度只看方向

语义相似度的本质是:两个向量的方向越接近,说明它们的语义越相似。
长度差异通常是无关的,甚至会被人为归一化掉。

假设有两篇文章:

  • A:“我喜欢苹果”
  • B:“我很喜欢苹果,非常喜欢苹果”

用BERT等模型提取它们的向量(Embedding)后,得到两个高维向量(假设用二维举例,实际是几百维甚至更高):

  • 向量A:[1, 1]
  • 向量B:[3, 3] (因为B的句子更长、重复多次,Embedding向量模长更大)
用欧式距离

$$ \text{欧式距离} = \sqrt{(3-1)2 + (3-1)2} = \sqrt{4 + 4} = \sqrt{8} \approx 2.83 $$

看起来“距离很大”,但实际上两句话语义几乎一样,只是B更啰嗦而已。

用余弦相似度

$$ \text{cosine}(A, B) = \frac{1 \times 3 + 1 \times 3}{\sqrt{12+12} \times \sqrt{32+32}} = \frac{6}{\sqrt{2} \times \sqrt{18}} = \frac{6}{\sqrt{36}} = \frac{6}{6} = 1 $$

余弦相似度为1,说明两句话“方向完全一致”,即语义完全一样。


KerryWu
679 声望171 粉丝

保持饥饿