← 返回首页

引入 Rerank 的核心作用和底层逻辑是什么?

核心作用:从"粗筛"到"精排"

一句话概括:初步检索负责"广撒网",Rerank 负责"精挑细选"。

具体来说,Rerank 解决三个核心问题:

  • 提升相关性:过滤掉"伪相关"文档(语义相近但并未回答问题),让最终喂给 LLM 的上下文更精准。
  • 降低幻觉风险:无关信息越少,LLM 被"误导"去编造答案的概率越低。
  • 节省 Token 成本:用更少、更精炼的文档喂给 LLM,既省钱又提速。

底层逻辑:为什么初步检索"不够准"?

要理解 Rerank 的必要性,必须先理解初步检索(Bi-Encoder)的架构瓶颈。

Bi-Encoder(双塔模型)的工作方式

Bi-Encoder 是初步检索的主力,它的核心逻辑是**"先各自画像,再快速比对"**:

用户 Query → [Transformer 编码器] → 查询向量 [0.23, -0.45, ...]
                                          ↕ 余弦相似度
文档 Doc  → [Transformer 编码器] → 文档向量 [0.21, -0.42, ...]
  • Query 和 Document 各自独立编码,编码过程中两者"老死不相往来"。
  • 文档向量可以预计算并存入向量数据库,查询时只需编码一次 Query,然后做近似最近邻(ANN)搜索,毫秒级返回结果。

优势:极快,能处理百万甚至亿级文档。

瓶颈:正因为编码时 Query 和 Document 互不可见,模型只能学到各自独立的、通用的语义表示。这导致:

  • 语义相似 ≠ 真正相关:文档"苹果种植技术"和查询"苹果公司股价"在向量空间中距离很近,但业务上完全无关。
  • 细微语义丢失:将一段几千字的文档压缩成 384~768 维的固定向量,信息必然有损,细节会被"压扁"。
  • 无法做深层逻辑推理:指代消解、否定语义、条件判断等复杂关系,单靠向量相似度无法捕捉。

Cross-Encoder(交叉编码器)的工作方式

Rerank 模型通常采用 Cross-Encoder 架构,核心逻辑是**"拉到一起,深度盘问"**:

[CLS] 用户 Query [SEP] 候选文档 Doc [SEP]
            ↓
    [完整 Transformer 模型]
    (全注意力机制,Query 和 Doc 的每个 token 之间充分交互)
            ↓
    [分类头(线性层)]
            ↓
    相关性得分:0.92(标量值)
  • Query 和 Document 拼接为一个整体输入模型。
  • Transformer 的自注意力机制让 Query 中的每个词与 Document 中的每个词进行深度交互。
  • 模型直接输出一个相关性分数(0~1),而非向量。

优势:精度极高,在 nDCG 指标上通常比 Bi-Encoder 高出 5~15%。

代价:无法预计算。每一对 (Query, Document) 都需要一次完整的前向传播,比 Bi-Encoder 慢约 1000 倍,因此只能用于小候选集(通常 50~200 条)的精排。


架构对比总结

维度 Bi-Encoder(初步检索) Cross-Encoder(Rerank)
编码方式 Query 和 Doc 独立编码 Query + Doc 拼接联合编码
输出 固定长度向量 单个相关性分数(0~1)
速度 ⚡ 极快(毫秒级,支持亿级数据) 🐢 较慢(每对需完整前向传播)
精度 中等(粗粒度语义匹配) 极高(细粒度语义交互)
可预计算 ✅ 文档向量可离线预存 ❌ 每对都需实时计算
适用阶段 第一阶段:从海量数据中召回 Top-K 第二阶段:对候选集精排 Top-N
典型规模 召回 Top-50~200 精排至 Top-5~10

Rerank 在完整 RAG 链路中的位置

用户 Query
    ↓
初步检索(Bi-Encoder + BM25 混合召回)
    → 返回 Top-100 候选文档(粗筛,追求召回率)
    ↓
Rerank(Cross-Encoder 精排)
    → 对 100 条逐一打分,重排后取 Top-5~10(追求精确率)
    ↓
LLM 生成
    → 基于最相关的 5~10 条上下文生成最终答案