向量检索全链路:距离度量、搜索算法与结果重排

6 阅读2分钟

向量检索全链路:距离度量、搜索算法与结果重排

在大模型时代,向量检索已成为 RAG(检索增强生成)、推荐系统、图像检索等场景的核心基础设施。无论是 RAG 中“先检索再生成”的关键环节,还是推荐系统中“找相似用户/物品”的核心逻辑,向量检索的性能(速度、精度)直接决定了上层应用的体验——它负责将高维向量(文本、图像、音频的特征表示)快速匹配,从海量数据中找到最相关的结果,是连接原始数据与 AI 模型的“桥梁”。

本文面向后端、AI 及 RAG 开发者,拆解向量检索全链路的三大核心模块:距离度量(怎么判断“相似”)、ANN 搜索算法(怎么快速找相似)、结果重排(怎么让结果更有用),兼顾理论严谨性与工业界实用性,可直接用于技术分享或开发参考。


一、距离度量:相似性的“打分标准”

向量检索的核心是“判断两个向量的相似性”,而距离度量就是这个判断的“打分公式”——不同的公式适用于不同的向量特征(如归一化向量、稠密向量),选对度量方式是检索准确的前提。以下是工业界最常用的 3 种距离度量方式,重点区分适用场景与核心差异。


1. 余弦相似度(Cosine Similarity)

定义: 衡量两个向量的夹角大小,取值范围 [-1, 1],夹角越小,相似度越高(1 表示完全同向,-1 表示完全反向)。

公式:

cos(θ)=aba×b\cos(\theta) = \frac{\vec{a} \cdot \vec{b}}{||\vec{a}|| \times ||\vec{b}||}

其中:

  • ab\vec{a} \cdot \vec{b}是向量内积
  • a||\vec{a}||b||\vec{b}||是向量的 L2 范数(模长)

适用场景:

文本向量(如 BERT embedding)、图像特征向量等,核心关注“方向相似”而非“长度相似”。例如 RAG 中,用户 query 向量与文档向量的余弦相似度,可直接反映内容相关性;归一化后的向量(模长为 1),余弦相似度等价于内积,计算效率更高。


2. L2 距离(欧氏距离,Euclidean Distance)

定义: 衡量两个向量在高维空间中的直线距离,取值范围 [0, +∞),距离越小,相似度越高。

公式:

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

n 为向量维度。

适用场景:

未归一化的向量、关注“绝对差异”的场景,如用户行为向量(点击、停留时长)、图像像素特征。注意:L2 距离对向量模长敏感,若向量模长差异较大(如有的文档向量模长是 1,有的是 100),会优先被模长影响,需先归一化再使用。


3. 内积(Inner Product)

定义: 两个向量对应元素乘积的和,取值范围 (-∞, +∞),内积越大,相似度越高(归一化后等价于余弦相似度)。

公式:

ab=i=1nai×bi\vec{a} \cdot \vec{b} = \sum_{i=1}^{n} a_i \times b_i

适用场景:

已归一化的向量场景(如 Transformer 输出的 embedding 默认归一化),计算效率比余弦相似度高(少了模长计算步骤),是工业界 RAG、推荐系统的常用选择。


三者核心区别

度量方式核心特点适用场景注意事项
余弦相似度关注方向,与模长无关文本向量、归一化特征未归一化时需计算模长,效率略低
L2 距离关注绝对距离,受模长影响大未归一化向量、行为特征需先归一化,否则结果偏差大
内积计算高效,归一化后等价余弦归一化向量、高并发场景未归一化时,模长会主导结果

二、主流 ANN 搜索算法:快速找到相似向量

当向量库规模达到百万、千万级时,暴力搜索(遍历所有向量计算距离)的效率极低(时间复杂度 O(n)),无法满足工业界低延迟需求。ANN(Approximate Nearest Neighbor,近似最近邻)算法通过“牺牲少量精度”换取“毫秒级检索速度”,是向量检索的核心实现方式。以下重点讲解工业界最常用的两种算法及选型逻辑。


1. HNSW:分层可导航小世界,分层图检索,兼顾速度与精度

核心原理:

基于“分层图”结构,将向量构建成多层导航网络——底层是所有向量的完整图(每个向量连接相似向量),上层是底层的“缩略图”(仅保留部分核心向量)。检索时,从最上层开始,快速导航到最接近目标向量的节点,再逐层下沉,最终找到近似最近邻。

核心优势:

  • 检索速度极快(毫秒级)
  • 精度接近暴力搜索
  • 支持动态插入/删除向量
  • 适配实时更新场景(如 RAG 文档增量更新)

缺点:

  • 内存占用较高(需存储图结构和向量)
  • 构建索引时间较长(尤其是向量规模极大时)

适用规模:

百万到亿级向量,适合对检索延迟敏感、精度要求高的场景(如 RAG 对话系统、实时推荐)。


2. IVF / IVF-PQ:分桶 + 量化,平衡内存与速度

IVF(Inverted File,倒排文件)

核心原理:

  • 将所有向量通过聚类算法(如 K-Means)分成 K 个“桶”(聚类中心)
  • 检索时先找到目标向量最接近的几个桶,再在桶内暴力搜索
  • 时间复杂度降至 O(K + n/K)

IVF-PQ(Product Quantization,乘积量化)

在 IVF 基础上:

  • 将每个向量量化成短码(如将 128 维向量量化成 16 字节)
  • 存储的是量化后的短码而非原始向量
  • 内存占用可降低 8–16 倍

具体实现步骤(工业界标准流程,适配后端/AI开发者落地)如下:

  1. 向量分块:将高维向量拆分为多个相互独立的子向量(如128维向量拆分为16个8维子向量),子向量的数量与最终短码的字节数一致(16个子向量对应16字节短码);
  2. 聚类生成码本:对所有向量的同位置子向量,分别用K-Means聚类(如每个8维子向量聚成256类),每个聚类中心对应一个“码元”(8位,即1字节),所有子向量的码元集合构成“码本”;
  3. 子向量量化编码:将每个向量的每个子向量,替换为其最接近的聚类中心对应的码元(1字节),16个子向量对应16个码元,拼接后形成16字节的短码;
  4. 检索时解码匹配:查询向量同样按上述步骤生成短码,先通过IVF找到目标桶,再计算查询短码与桶内所有短码的“码元距离”(如汉明距离、L2距离),快速筛选出近似相似的向量。 核心逻辑:用“聚类中心的码元”替代原始子向量,通过牺牲少量量化精度,换取内存占用的大幅降低(128维float32向量占512字节,16字节短码可降低32倍内存)。

核心优势:

  • 内存占用极低(适合大规模向量存储)
  • 索引构建速度快
  • 支持亿级以上向量检索

缺点:

  • 精度比 HNSW 略低(量化会损失信息)
  • 动态插入/删除向量时需重新聚类,实时性较差

适用规模:

亿级到十亿级向量,适合对内存敏感、精度要求可容忍轻微损失的场景(如大规模图像检索、离线推荐)。


HNSW vs IVF-PQ:工业界选型指南

对比维度HNSWIVF-PQ
检索速度极快(毫秒级,适合实时)较快(亚毫秒到毫秒级)
检索精度高(接近暴力搜索)中(量化有精度损失)
内存占用高(存储原始向量+图结构)低(存储量化短码)
动态更新支持(插入/删除高效)支持差(需重新聚类)
适用场景RAG 实时检索、实时推荐(百万-亿级)大规模离线检索、图像检索(亿级+)

选型建议:

优先看“实时性”和“内存”—— RAG 对话、实时推荐等低延迟场景选 HNSW; 大规模离线检索、内存有限场景选 IVF-PQ; 若需平衡,可选用 IVF-HNSW(IVF 分桶 + HNSW 桶内检索)。


三、MMR:结果重排,平衡相关性与多样性

很多开发者会混淆“搜索算法”与“结果重排”—— MMR(Maximum Marginal Relevance,最大边际相关性)不是距离度量,也不是检索算法,而是检索后的结果重排策略。


1. 核心痛点:为什么需要重排?

ANN 检索的结果是“与 query 最相似”的向量,但这些结果往往存在高度重复(如多个文档讨论同一细分话题),导致信息覆盖不全。

例如 RAG 中,用户 query 是“向量检索的应用场景”,检索结果可能全是 RAG 相关,忽略推荐、图像检索等场景,此时需要重排来平衡“相关性”和“多样性”。


2. MMR 核心原理与公式

MMR(di)=λsim(di,q)(1λ)maxdjSsim(di,dj)MMR(d_i) = \lambda \cdot \text{sim}(d_i, q) (1 - \lambda) \cdot \max_{d_j \in S} \text{sim}(d_i, d_j)

参数说明:

  • did_i:待选文档向量
  • qq:用户 query 向量
  • SS:已选中的文档集合
  • λ\lambda:权重系数(0 ≤ λ ≤ 1)
  • sim\text{sim}:相似度(常用余弦相似度)

3. MMR 在 RAG 中的应用

典型流程:

  1. 用 ANN 算法(如 HNSW)检索出 Top N(如 Top 50);
  2. 用 MMR 重排,设置 λ = 0.7;
  3. 将重排后的 Top K(如 Top 5)输入大模型生成回复。

优势:

  • 避免回复重复、片面
  • 提升信息覆盖
  • 提升生成质量

四、全链路总结与选型建议

1. 向量检索完整流程

  1. 向量生成:原始数据 → 模型(BERT、CLIP) → 向量
  2. 距离度量:定义“相似”标准
  3. ANN 检索:HNSW / IVF-PQ
  4. 结果重排:MMR 等策略

2. 工业界选型总结

  • 距离度量:文本向量(归一化)→ 内积/余弦;未归一化 → L2
  • ANN 算法:实时场景 → HNSW;大规模离线 → IVF-PQ
  • 结果重排:RAG/推荐 → MMR(λ 0.6–0.8);精准搜索 → 可不启用