原理剖析:向量数据库与 RAG 语义检索机制
在 AI 工具搜索、意图识别、记忆管理、知识扩展等场景中,核心需求往往是对大量模糊文本的语义进行高效检索。
传统的关键词匹配难以满足需求,因此需要通过向量化表示(embedding)与 向量数据库 来实现语义级别的近似搜索(Approximate Nearest Neighbor, ANN)。
向量数据库
向量数据库是 **RAG(Retrieval-Augmented Generation)**的核心组件,用于存储文本对应的向量特征及其原始信息,并提供高效的相似度检索。
向量与相似度计算
文本经 embedding 模型 处理后会生成高维特征向量。比较两个文本语义相似度的本质就是比较两个向量的接近程度,常见算法包括:
余弦相似度 (Cosine Similarity)
- 公式:
- 解释:通过向量夹角余弦值衡量相似度,值域 [-1,1]。值越接近 1,向量越接近同向,文本越相似。
- 余弦距离**:通常取 1— similarity 作为“距离”,值域 [0,2]。
- 二维图示:
欧氏距离 (Euclidean Distance)
- 公式:
- 解释:直观的空间距离,值域 [0,+∞)。距离越小,向量越相似。
算法选择:余弦相似度更适合方向性为主的文本向量;欧氏距离适合数值尺度有物理意义的场景。
- 二维图示:
向量数据库的构建
理论上,只需将文本转化为向量并入库即可,但实践中需要处理以下问题:
1、文本过大:
- 将长文本分块,每块生成向量
- 检索时可索引到分块文本,也可在后处理阶段关联回原文
- 或对分块向量做平均池化(mean pooling),形成整体向量
2、冷门关键词缺失:
- 在入库前可做文本清洗与领域扩充
- 使用更强的领域特化 embedding 模型以减少未覆盖词。
- 清洗数据时生成关联问题,递归查询
向量索引与检索
精确最近邻(NN)
-
直接对查询向量与数据库所有向量逐一计算相似度,时间复杂度 。
-
优点:结果精准。
-
缺点:大规模数据时检索过慢。
近似最近邻(ANN)
为了在查询速度和准确率间取得平衡,引入 ANN 算法。
典型方案:
NSW(Navigable Small World)
- 将每个节点与其附近的 n 个节点建立连接形成无向图。
- 检索时从任意节点出发,不断跳向距离目标向量更近的邻居,直到无法找到更近节点。
- 可能仅得到局部最优解,但速度远快于 O(n)。
类比:从一座山头寻找山谷中的村子,只能看见周围几座山,持续走向更低的山头,虽然不保证到达最低点,但能快速到达一个足够低的谷地。
HNSW(Hierarchical NSW)
- 在 NSW 基础上加入类似 **跳表 (skip list)**的多层结构:
- 优势:在保持较高召回率的同时,大幅降低检索时间。
类比:例如我想从成都到重庆,那我先粗略看下地图,中间可能经过:资阳、自贡,那我再继续找成都到自贡的高速,再找成都到这条高速的路。
图示:
向量压缩:Product Quantization (PQ)
当数据规模极大时,向量维度与数量都会带来存储和计算瓶颈。
Product Quantization (PQ)是一种经典的无监督向量压缩与快速近似搜索技术。
核心原理
1、分块:将 d 维向量划分为 m 个子空间(sub-vector),每个子空间维度为 d/m。
2、子空间聚类:对每个子空间独立进行 k-means 聚类,得到 k 个质心(codebook)。
3、编码:每个子空间的真实向量用距离最近的质心索引表示。
- 原向量用 m 个质心编号拼接而成的离散码表示,大幅压缩存储空间。
4、存储:仅需保存 codebook 和 m 个索引,而无需保存原始浮点向量。
图示:
k-means 聚类
算法思想
- 给定簇数 k,希望找到 k 个“质心”(centroid),使得每个样本点都被分到距离最近的质心所在的簇。
- 最小化的目标函数:
是第 i 个簇的样本集合。
是簇中心。
典型流程
1、初始化质心
随机选择 k 个数据点作为初始质心,或使用改进的**k-means++**初始化方法来提高稳定性。
2、分配样本
将每个样本分配到与其最近的质心对应的簇。
3、更新质心
对每个簇重新计算质心:即簇中所有样本的平均值。
4、迭代
重复“分配—更新”步骤,直到质心不再明显移动或达到最大迭代次数。
二维图示:
类比:找两个点的中点,先在两点中间随机取一个点,假设为中点,再判断中点到两点间的距离,再向距离远的点移动一些(移动到(midx+x)/2),直到距离两点的距离差值到了某个可接受的程度。
注意:图示范围仅作为示意,实际上 k-means 聚类的范围在二维平面应是圆形。
距离计算方式
PQ 的目标不仅是压缩,还要支持高效近似距离计算。主要有两类:
对称距离计算 ( Symmetric Distance Computation )
- 场景:数据库中存储的也是 PQ 编码后的压缩向量。
- 方法:在查询时,直接在压缩码之间预计算距离查找表,比较编码索引。
- 特点:存储与计算都最节省,但精度稍低。
非对称距离计算 ( Asymmetric Distance Computation, ADC )
- 场景:仅数据库向量被 PQ 压缩,查询向量保持原始精度。
- 方法:对查询向量与各 codebook 的质心预计算距离表,然后根据数据库中每个向量的编码索引快速累加对应质心距离。
- 特点:相比对称方式精度更高,计算量略大,但仍远低于逐一精确计算。
在实际 ANN 检索中,ADC 是最常见的选择,因为它在存储和精度之间取得良好平衡。
直观图解
总结
- 向量数据库是实现 RAG、语义检索的核心技术,依赖高效的相似度计算与 ANN 索引结构。
- HNSW在保持高召回率的同时提升检索速度,已成为主流 ANN 算法。
- PQ 压缩有效缓解存储与计算压力,并通过 ADC 在保证近似精度的前提下实现快速距离估计。
本文首发于 Yak Project 公众号,阅读原文。
