RAG学习总结2--向量数据库
一、向量数据库基础
向量表示:将自然语言、图像等非结构化数据通过嵌入模型转化为高维向量。向量的距离和方向能体现语义上的相似性。
向量数据库:专门存储高维向量及其元数据的数据库。核心能力是高效执行近似最近邻搜索,实现语义检索。
与传统数据库的区别:传统数据库依赖精确匹配或关键词索引,难以捕捉语义;向量数据库通过向量相似度实现“语义=向量距离近”的检索。
混合检索:实际项目中常将向量语义检索与标量过滤、全文检索等结合,先通过元数据过滤候选集,再进行向量相似度排序,或融合多种得分做最终排序。这样既能做语义理解,又能保证精确条件的匹配。
二、向量的核心概念
| 概念 | 说明 |
|---|---|
| 向量维度 | 向量的特征数量,如 384、768、1024。维度越高,表达能力越强,但计算与存储开销也越大。 |
| 向量长度(模) | 向量到原点的欧氏距离。如向量(3,4)的长度为 √(3²+4²)=5。长度有时蕴含文本长度、词频等信息。 |
| 向量方向 | 向量的指向,是判断语义相似度的主要依据。常用度量有余弦相似度、内积、欧氏距离。 |
三、相似度度量与对比
余弦相似度
关心什么:只关心两个向量之间的夹角,完全忽略长度。
公式:cos(θ) = (A·B) / (||A|| ||B||),值域 [-1, 1]。
直观理解:两束从原点发出的射线,夹角越小越相似。哪怕一束长一束短,只要指向一致就是 1。
示例:A = [1,0], B = [2,0] 方向完全相同,余弦相似度为 1;A = [1,0], B = [0,1] 垂直,为 0。
内积
关心什么:方向 + 长度。公式为A·B = ||A|| ||B|| cos(θ)。
直观理解:若两个向量同向且都很长,内积会非常大;若方向相似但都很短,内积较小。所以它偏爱“方向一致且信息强度高”的项。
适用场景:推荐系统中,热门物品的向量可能模长较大,内积会自然给它们更高打分,可以作为一种“热度加权”。
欧氏距离
关心什么:向量在空间中端点之间的直线距离,公式为√(Σ(Ai - Bi)²)。
直观理解:两点越靠近越相似。它同时受方向和长度的影响,而且对绝对位置的差异敏感。
| 度量方式 | 关心内容 | 数值含义 | 归一化后的等价形式 | 适用场景 |
|---|---|---|---|---|
| 余弦相似度 | 只关心方向,忽略长度 | 越接近 1 越相似,取值 [-1,1] | 等于内积 | 文本语义相似,长度差异无意义时 |
| 内积 | 方向+长度 | 数值越大越相似,无上界 | 等于余弦相似度 | 需同时考虑方向和强度时(如推荐系统中的打分) |
| 欧氏距离 | 方向+长度(绝对位置) | 数值越小越相似,≥0 | 单调相关于余弦相似度(距离=2-2cosθ) | 向量空间绝对位置敏感的场景 |
归一化影响:将向量长度映射为 1,消除长度差异。此时欧氏距离、余弦相似度、内积可互相推导,选择哪个度量本质上等价。务必在存储和检索时使用相同的归一化方式。
四、近似最近邻搜索
4.1 为什么需要 ANN
在全量向量上逐个计算相似度的暴力检索(FLAT)虽然精确,但延迟高、资源消耗大。ANN 利用索引结构先快速缩小候选范围,再在小范围内精细比较,在可控质量损失下大幅提升速度。
4.2 常见 ANN 算法对比表
FLAT:即无索引,直接扫描。它提供 100% 精确的结果,是衡量其他 ANN 算法召回率的黄金标准,但只适用于万级以下的小数据量。
IVF(倒排文件)
如何工作:使用 K-Means 将全体向量聚成nlist个簇(桶),每个簇有一个中心点。查询向量到达时,先计算它与哪个桶中心最近,只去最近的nprobe个桶里暴力搜索。
参数含义:增大nlist,桶更细碎,检索时需探测更多桶才能维持召回率;增大nprobe,探测桶数增多,召回率上升但延迟也增加。它是最基础且广泛使用的加速结构。
HNSW(分层可导航小世界图)
如何工作:类似“高速公路+普通公路”的导航。构建多层图,最上层只有少数节点,边很长,供快速跳转;最下层包含所有节点,边稠密,负责精细定位。搜索时从上层随机点出发,贪婪地向最近邻居移动,逐层下钻,直到最底层。
关键参数:M(每个节点最大连接数)影响图密度和内存;efConstruction控制构建时搜索宽度,越大图质量越好;efSearch控制查询时搜索宽度,越大召回率越高。它无需训练,支持实时插入,但内存占用较高。
PQ(乘积量化)
如何压缩:将高维向量切成m段短向量,每段用独立的聚类算法生成k个代表向量(码本)。存储时,用每段最近的码本编号(整数)代替原始浮点数。例如,768 维切 96 段,每段用 256 个中心量化,存储从 768×32bit 变为 96×8bit,压缩 32 倍。
近似距离计算:查询时,预计算查询向量每段与对应码本所有中心点的距离,查表组合近似得出全向量的距离,速度快且无需解压。精度损失源于量化误差,可通过增加段数或码本大小缓解。
SQ(标量量化)
如何压缩:独立将每个维度的浮点值均匀映射到低位整数,例如 float32 转换为 int8,直接用数值范围缩放。
优点:简单,计算仍为整数运算,精度损失温和均匀。常作为快速降低内存的基础手段,或与 IVF/HNSW 结合。
| 算法 | 原理 | 精确度 | 速度 | 内存占用 | 关键参数 | 备注 |
|---|---|---|---|---|---|---|
| FLAT | 暴力计算所有向量 | 100% 精确 | 慢 | 低(仅存原始向量) | 无 | 基线算法,小数据或要求绝对精确时用 |
| IVF | 聚类分桶,查询时只搜索最近的 nprobe 个桶 | 近似(可调) | 中–快 | 中(需存储聚类中心) | nlist(桶数),nprobe(探测桶数) | 需训练,适合中等规模,常与其他技术组合 |
| HNSW | 多层图结构,上层稀疏快速跳转,下层稠密精细搜索 | 高(近似) | 极快 | 较高(图连接开销) | M(每层连接数),efConstruction(构建搜索宽度),efSearch(查询搜索宽度) | 无需训练,增量插入友好,内存占用较大 |
| PQ (乘积量化) | 将向量分段,每段独立聚类量化,用短编码表示 | 有损压缩,精度可调 | 快(查表算距离) | 极低(压缩比高) | 子空间数m,每段码本大小k | 常与 IVF 结合为 IVF_PQ,大幅减少内存 |
| SQ (标量量化) | 将每个浮点维度转换为低位整数 | 轻微精度损失 | 快(整数计算) | 低(如 float32→int8) | 量化位数 | 简单有效,常作快速压缩手段 |
补充说明:
IVF需要预先训练,生成桶中心;检索时增大
nprobe可提高召回率,但增加延迟。HNSW构建时
efConstruction越大图质量越高但慢,查询时efSearch越大召回率越高。PQ/SQ属于向量压缩技术,往往与 IVF 或 HNSW 结合使用,减少存储空间并加速距离估计。
PQ 与 SQ 对比:
| 量化方式 | 压缩原理 | 压缩率 | 距离计算 | 精度影响 | 典型应用 |
|---|---|---|---|---|---|
| PQ | 分子空间聚类编码 | 极高(可几十倍) | 预计算距离表查表 | 有结构性误差 | 大规模向量库,内存受限 |
| SQ | 逐维度标量量化 | 中等(2-4倍) | 直接整数运算 | 均匀轻微降低 | 需要保留较高精度的压缩场景 |
五、混合检索的实际形态
常见混合检索模式:
过滤+向量搜索:先根据标签、时间等标量条件过滤候选,再在过滤集合上执行 ANN,保证结果满足硬性约束。
多路召回+融合排序:同时进行向量语义召回和全文检索召回,将两路结果通过融合公式(如加权求和、互惠排名融合 RRF)合并排序。
向量与稀疏向量组合:使用稠密向量做语义,稀疏向量做关键词匹配,结合 BM25 等分数,实现语义和字面兼顾的检索。
这解决了纯语义检索可能遗漏精确词汇匹配的缺陷,是生产环境的标配。
六、检测指标速览
| 指标 | 含义 | 关注点 |
|---|---|---|
| 召回率 (Recall@k) | 前 k 个结果中相关项占所有相关项的比例 | 是否找得全 |
| 准确率 (Precision@k) | 前 k 个结果中相关项的比例 | 找得是否准 |
| 延迟 (Latency) | 查询响应时间(平均/分位数) | 用户体验与吞吐 |
| 成本 (Cost) | 内存/磁盘占用、计算资源消耗 | 系统可扩展性 |
| MRR (平均倒数排名) | 第一个相关结果排名的倒数,对所有查询取平均 | 关注首个正确答案的位置 |
| nDCG (归一化折损累计增益) | 考虑排序位置和相关度等级,对排序质量评价 | 多级相关性下的排序质量 |
在实际项目中,常常需要根据业务需求在召回率与延迟、成本间取得平衡(例如调整nprobe、efSearch等参数)。