理解向量

vector 2d coordinates

向量具有维度和方向。 例如,下图描绘了一个二维向量 \vec{a},在笛卡尔坐标系中表示为箭头。 向量 \vec{a} 的头部位于点 (a_1, a_2)。 x 坐标值为 a_1,y 坐标值为 a_2。这些坐标也称为向量的分量。

相似性

可以使用几种数学公式来确定两个向量是否相似。 其中最直观、最容易理解的是余弦相似度。 请看以下显示三组图表的图片:

vector similarity

当向量 \vec{A} 和 \vec{B} 指向彼此靠近时,如第一张图所示,它们被认为是相似的。 当向量指向彼此垂直时,它们被认为是不相关的;当它们指向彼此远离时,它们被认为是相反的。

它们之间的夹角 \theta 是衡量其相似度的一个很好的指标。 如何计算角度 \theta?

我们都熟悉 勾股定理

那么当 ab 之间的夹角不是 90 度时呢?

引入 余弦定理

余弦定理

a^2 + b^2 - 2ab\cos\theta = c^2

下图以向量图的形式展示了这种方法: lawofcosines

该向量的模定义为其分量形式:

\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{C}||^2 替换为 ||\vec{B} - \vec{A}||^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_i2} \cdot \sum_{i=1}{n}{B_i2}}

这是向量存储简单实现中使用的关键公式,可以在 SimpleVectorStore 实现中找到。