← 返回首页
引入 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 条上下文生成最终答案