目录

一、向量检索的整体流程

离线阶段(索引构建)

在线阶段(检索与重排)

二、Embedding 的作用

核心特点

具体作用

局限性

三、Rerank 的作用

核心特点

具体作用

四、两者对比与配合

配合逻辑

五、一个具体例子

流程

面试回答


一、向量检索的整体流程

向量检索通常用于语义搜索、RAG(检索增强生成)、推荐系统等场景。其标准流程可以分为 离线阶段在线阶段

离线阶段(索引构建)

  1. 文档切分(Chunking)
    将长文档切分成较小的文本块(如 200–500 字),便于后续精准检索。
  2. Embedding 向量化
    使用 Embedding 模型将每个文本块转换成固定长度的浮点数向量(例如 768 维、1536 维)。
    → 向量代表该文本的语义特征
  3. 构建向量索引
    将所有向量存入向量数据库(如 Milvus、Faiss、Qdrant),并建立近似最近邻(ANN)索引(如 HNSW、IVF),以支持快速检索。

在线阶段(检索与重排)

  1. 用户输入 Query
    例如用户问:“如何提高跑步速度?”
  2. Query 向量化
    使用同一个 Embedding 模型将 Query 转换成向量。
  3. 向量相似度搜索
    在向量数据库中检索与 Query 向量最相似的 Top-K 个向量(例如 K=100)。
    • 常用相似度:余弦相似度、内积、欧氏距离。
    • 这一步是粗排,追求快,不追求极准。
  1. Rerank(重排序)
    使用一个更强大的交叉编码器(Cross-Encoder) 模型,对候选的 K 个文本块与 Query 进行精细的相关性打分,重新排序,输出 Top-N(例如 N=5)。
  2. 返回最终结果
    将重排后的最相关文本块返回给下游任务(如 LLM 生成答案)。

二、Embedding 的作用

Embedding 模型(又称双编码器,Bi-Encoder)将文本映射到向量空间。

核心特点

  • 独立编码:Query 和 Document 分别独立通过模型生成向量。
  • 计算速度快:文档向量可以离线预计算并建索引,在线只需计算 Query 向量。
  • 语义表示:相似语义的文本在向量空间中距离更近。

具体作用

  1. 将非结构化文本转换成可计算的数学对象(向量),使得语义相似度可以通过向量距离度量。
  2. 支持大规模快速检索:通过 ANN 索引,可以在百万/十亿级向量中毫秒级召回。
  3. 泛化能力强:可以匹配同义词、上下位词、不同表达方式的相同语义(相比关键词检索)。

局限性

  • 精度有限:Embedding 是压缩的语义表示,会丢失细粒度信息(如否定、特定关系)。
  • 对复杂查询(如多条件、逻辑组合)不够精准。

例:
Query:“不是苹果公司的产品”
可能依然会匹配到“iPhone”相关文本,因为“苹果”语义太强。

三、Rerank 的作用

Rerank 模型(通常是交叉编码器,Cross-Encoder)对(Query, Document)对进行联合打分。

核心特点

  • 联合编码:将 Query 和 Document 拼接在一起输入模型,通过 Transformer 的 Self-Attention 进行深层交互。
  • 计算速度慢:无法预计算,每个候选对都要单独通过模型,因此只能对小规模候选集(如 100 个)进行重排。
  • 精度高:能捕捉 Query 与 Document 之间的细粒度语义匹配、逻辑关系、否定、条件等。

具体作用

  1. 修正 Embedding 粗排的误差
    Embedding 可能召回语义相似但实际不相关的文档(例如“跑步速度” vs “汽车速度”)Rerank 能区分。
  2. 提升排序的相关性
    尤其适合 Query 复杂、需要精确理解用户意图的场景。
  3. 引入更多信号
    可以结合业务规则、时间新鲜度、权威性等,但标准的 Rerank 模型本身只做语义匹配打分。
  4. 最终决定输出顺序
    给 LLM 的上下文通常是 Rerank 后排名靠前的少量文档。

例:
Query:“如何提高跑步速度?”

  • Embedding 召回的第 1 名可能是“跑步机速度调节方法”(语义较近但不完全对)。
  • Rerank 会将“步频训练、间歇跑技巧”提到前面。

四、两者对比与配合

维度

Embedding (Bi-Encoder)

Rerank (Cross-Encoder)

输入方式

Query 和 Doc 独立编码

Query + Doc 拼接联合编码

计算速度

快(可预计算)

慢(无法预计算)

精度

中等

适用阶段

粗排(召回)

精排(重排序)

候选集大小

百万/十亿级

百/千级

模型复杂度

较低(如 BERT 的池化输出)

较高(需全连接分类层)

配合逻辑

Embedding 负责“广”,Rerank 负责“准”。

  • 没有 Embedding:每次检索都要对全库文档做 Cross-Encoder,无法实用。
  • 没有 Rerank:可能召回很多“貌似相关但实际无用”的内容,影响下游 LLM 生成质量。

五、一个具体例子

文档库(已切块):

  • D1:“步频训练是提高跑步速度的关键,每分钟 180 步为佳。”
  • D2:“提高汽车速度需要加大油门和优化空气动力学。”
  • D3:“跑步前热身可以预防受伤,但对速度提升帮助有限。”

Query:“怎么通过步频提升跑步速度?”

流程

  1. Embedding 召回 Top-2
    • D1(相似度 0.92)
    • D2(相似度 0.78,因为“速度”一词)
      (D3 相似度 0.65,未进 Top-2)
  1. Rerank 对 (Q,D1) 和 (Q,D2) 打分
    • (Q,D1) → 0.99
    • (Q,D2) → 0.10(因为发现“汽车”与“跑步”无关)
  1. 最终输出:只返回 D1。

面试回答

我觉得可以把向量检索理解成一个‘从粗到细的查找过程’,主要分三步:

  1. 提前建库:先把所有文档(或商品、图片等)通过 Embedding 模型转成向量,存到向量数据库里。
  2. 查询转换:用户输入一个问题,用同一个 Embedding 模型把问题也转成向量。
  3. 近似检索:用 FAISS 这类工具,在库里快速找到最相似的 Top-K 个向量(比如 100 个)。这一步是近似最近邻搜索,牺牲一点精度换速度。

Embedding 的作用是把非结构化数据变成语义向量,核心是召回

  • 它要保证:意思相近的内容,在向量空间里距离也近。比如‘怎么退火车票’和‘取消高铁订单’的向量会很接近。但它有个局限:为了效率,只能用一个向量代表整个句子或段落,所以细节上会丢。比如两个词义相近但实际不相关的句子,也可能被误认为相似。

Rerank 是用来给召回结果重新精细打分的。

  • 它的模型通常更大,会把用户 Query 和每个召回文档拼在一起输入模型,直接输出一个相关性分数(比如 0.1 到 0.9)。这个过程精度很高,能理解对比、否定、多跳推理等复杂关系,但计算量也大,没法对几百万条数据做。所以典型做法是:先用 Embedding 快速召回 100 条,再用 Rerank 挑出最相关的 10 条给用户。

总结一句话:Embedding负责‘快而粗’地召回候选集,Rerank负责‘慢而精’地重排Top结果。两者结合,兼顾速度和效果,这是工业界标准做法。

如果小假的内容对你有帮助,请点赞评论收藏。创作不易,大家的支持就是我坚持下去的动力!

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐