返回日志
1 分钟阅读

向量嵌入与相似度数学入门指南

通俗易懂地讲解现代AI如何将文本含义表示为空间坐标、余弦相似度的工作原理,以及向量数据库的Normalize-then-Dot优化技巧。

Vector DatabasesRetrieval-Augmented Generation (RAG)LLM Agents
向量嵌入与相似度数学入门指南

传统的搜索引擎完全依赖字符串匹配。如果你搜索 "automotive",系统会直接漏掉仅包含 "car" 的文档,仅仅是因为字符不匹配。

现代人工智能系统通过向量嵌入(Vector Embeddings)解决这一问题。嵌入模型不再比较字面字符串,而是将词语、句子或整篇文章映射为捕获潜在概念含义的空间坐标。

在这篇初学者指南中,我们将剖析嵌入如何在几何空间中表示含义,比较衡量文本相似度的核心数学指标,并探讨向量数据库在实际生产中使用的性能优化技巧。


1. 什么是向量嵌入?

嵌入模型是一个通晓语义的神经网络。它接收输入文本,并输出一个固定长度的浮点数数组,称为向量

Input Text: "automobile"  ---> Embedding Model ---> [0.024, -0.412, 0.891, ..., 0.105]
Input Text: "car"         ---> Embedding Model ---> [0.021, -0.408, 0.887, ..., 0.112]

这些数字并非随机产生,而是高维数学地图上的坐标。由于 "car""automobile" 含义几乎完全相同,模型会将它们的坐标安排在彼此相邻的位置。


2. 语言的几何学:理解维度

向量数组中数字的总个数决定了它的维度(例如标准模型中的768维,或更大模型中的1536维)。

虽然人类无法直观想象768维空间,但其几何原理与在纸上绘制2D向量完全一致:

  1. 每个向量都始于原点 [0, 0, ... 0]
  2. 向量的各维度数值决定了箭头沿各个坐标轴延伸的距离。
  3. 箭头的末端落在语义空间中的一个特定点上。
2D Vector Space Visualization:

  Y Axis (Concept: Technology)
    ^
    |      * "laptop" [2.1, 4.8]
    |      * "computer" [2.3, 4.5]
    |
    |                         * "banana" [4.9, 0.4]
    +------------------------------------------------> X Axis (Concept: Food)

核心法则:永远不要试图孤立理解单个坐标(例如假设第42个维度代表“水果”)。语义分布在所有维度组合形成的整体模式中。


3. 数学指标:衡量空间距离与相似度

为了判断两段文本是否具有相同的含义,计算机通过衡量它们在空间中的向量箭头距离来计算:

1. 向量模长(L2 范数)

测量从原点到箭头末端的直线长度:

a=i=1nai2\|\mathbf{a}\| = \sqrt{\sum_{i=1}^{n} a_i^2}

2. 点积(Dot Product)

将两个等长向量对应位置的坐标相乘并将结果求和:

ab=i=1naibi\mathbf{a} \cdot \mathbf{b} = \sum_{i=1}^{n} a_i b_i

3. 欧氏距离(L2 距离)

测量两个向量箭头末端之间的直线物理距离:

d(a,b)=i=1n(aibi)2d(\mathbf{a}, \mathbf{b}) = \sqrt{\sum_{i=1}^{n} (a_i - b_i)^2}

4. 余弦相似度(Cosine Similarity)

测量两个向量箭头之间的夹角 θ\theta,完全忽略箭头的长度:

cos(θ)=abab\cos(\theta) = \frac{\mathbf{a} \cdot \mathbf{b}}{\|\mathbf{a}\| \|\mathbf{b}\|}

  • 文本搜索的金标准: 如果一个包含3个词的短查询和一篇500字的文章探讨相同主题,它们的向量箭头将指向完全相同的方向(θ0    cos(θ)1.0\theta \approx 0^\circ \implies \cos(\theta) \approx 1.0)。

4. 生产工程实践:“Normalize-Then-Dot” 优化技巧

在数百万个向量上实时计算余弦相似度需要执行大量的开方与除法运算,在每秒处理数百万次查询时会造成严重的CPU性能瓶颈。

向量数据库(如 Pinecone、Milvus 和 pgvector)采用了一项数学优化技巧:

步骤 1:写入时单位化(Normalize)

当存入新向量时,系统首先将其模长标准化为精确的 1.01.0(单位向量 a^\hat{\mathbf{a}}):

a^=aa\hat{\mathbf{a}} = \frac{\mathbf{a}}{\|\mathbf{a}\|}

步骤 2:简化查询计算

当文档向量和查询向量的模长均为 1.01.0 时(即 a^=1\|\hat{\mathbf{a}}\| = 1b^=1\|\hat{\mathbf{b}}\| = 1),余弦公式中的分母恒等于 11

cos(θ)=a^b^1×1=a^b^\cos(\theta) = \frac{\hat{\mathbf{a}} \cdot \hat{\mathbf{b}}}{1 \times 1} = \hat{\mathbf{a}} \cdot \hat{\mathbf{b}}

通过预先归一化,余弦相似度直接简化为基础的点积运算。数据库完全避免了运行时的除法计算,在保证完全相同精度的同时,实现了极致的检索速度。

Share this article