Skip to content
Spring AI 文档版本 2.1.0-SNAPSHOT 源快照 ab16b99f 更新于 2026-10-16

理解向量

向量具有维度和方向。 例如,下图以箭头形式,在笛卡尔坐标系中描绘了一个二维向量 \vec{a}。

向量 \vec{a} 的头部位于点 (a_1, a_2)。 x 坐标值为 a_1,y 坐标值为 a_2。这些坐标也被称为向量的分量。

相似度

可以使用若干数学公式来判断两个向量是否相似。 其中最直观、最易于可视化和理解的是余弦相似度。 考虑下面展示三组图形的图片:

当向量 \vec{A} 和 \vec{B} 指向彼此靠近的方向时(如第一张图),它们被视为相似。 当它们彼此垂直指向时被视为无关,当它们彼此相背指向时则被视为相反。

它们之间的夹角 \theta 是衡量其相似度的良好指标。 那么夹角 \theta 该如何计算呢?

我们都熟悉勾股定理。

那么当 a 与 b 之间的夹角不是 90 度时呢?

这时就轮到余弦定理登场了。

.余弦定理 a^2 + b^2 - 2ab\cos\theta = c^2

下图以向量图展示了这一方法:

该向量的模长用其分量定义为:

.模长 \vec{A} * \vec{A} = ||\vec{A}||^2 = A_1^2 + A_2^2

两个向量 \vec{A} 与 \vec{B} 之间的点积,用其分量定义为:

.点积 \vec{A} * \vec{B} = A_1B_1 + A_2B_2

用向量的模长与点积改写余弦定理,得到如下结果:

.向量形式的余弦定理 ||\vec{A}||^2 + ||\vec{B}||^2 - 2||\vec{A}||||\vec{B}||\cos\theta = ||\vec{C}||^2

用 ||\vec{B} - \vec{A}||^2 替换 ||\vec{C}||^2,得到如下结果:

.仅以 \vec{A} 和 \vec{B} 表示的向量形式余弦定理

||\vec{A}||^2 + ||\vec{B}||^2 - 2||\vec{A}||||\vec{B}||\cos\theta = ||\vec{B} - \vec{A}||^2

将其展开便得到余弦相似度的公式。

.余弦相似度 similarity(vec{A},vec{B}) = \cos(\theta) = \frac{\vec{A}\cdot\vec{B}}{||\vec{A}\||\cdot||\vec{B}||

这个公式适用于高于 2 或 3 的维度,尽管很难直观想象。不过,它在一定程度上是可以被可视化的。 在 AI/ML 应用中,向量拥有数百甚至数千个维度是很常见的。

下面展示了在高维空间中利用向量分量的相似度函数。 它借助求和数学记号,把先前给出的模长与点积的二维定义扩展到 N 维。

.以向量分量表示的余弦相似度 similarity(vec{A},vec{B}) = \cos(\theta) = \frac{ \sum_{i=1}^{n} {A_i B_i} }{ \sqrt{\sum_{i=1}^{n}{A_i^2} \cdot \sum_{i=1}^{n}{B_i^2}}

这就是向量库简单实现中所使用的关键公式,可在 SimpleVectorStore 实现中找到——仅适用于测试和演示目的。

BytesRouter 是社区翻译站点,所有译文仅供参考,一切以官方英文原文为准。