Reranker 工作原理:搜索结果精排的核心技术
在 RAG 系统中,向量检索返回的初步结果往往不够精确。Reranker 通过更深度的语义理解对候选文档重新排序,是提升检索质量的关键环节。
为什么需要 Reranker?
典型的 RAG 检索流程分为两个阶段:召回(Recall)和精排(Reranking)。向量数据库通过近似最近邻搜索快速从百万级文档中找到几十个候选,但这些候选的排序未必最优。
RAG 检索流程:
用户查询: "什么是梯度下降?"
阶段 1 - 召回(Bi-Encoder):
从 100 万文档中快速检索 top-50 候选
速度:毫秒级
精度:粗粒度语义匹配
阶段 2 - 精排(Reranker):
对 50 个候选逐一精细打分
速度:较慢(但候选数量少,可接受)
精度:细粒度语义理解
最终返回 top-5 给 LLM 作为上下文
为什么不能直接用召回结果?因为 Bi-Encoder 为了速度牺牲了精度——它独立编码查询和文档,无法捕捉两者之间的细粒度交互。
Bi-Encoder vs Cross-Encoder
理解 Reranker 的核心在于理解两种编码器的区别:
Bi-Encoder(双塔模型)
Bi-Encoder 架构:
查询: "什么是梯度下降?" → Encoder_Q → 向量 q (768维)
文档: "梯度下降是一种优化算法..." → Encoder_D → 向量 d (768维)
相似度 = cosine(q, d)
特点:
- 查询和文档独立编码,互不干扰
- 文档向量可以离线预计算并索引
- 检索时只需计算查询向量 + 向量相似度
- 速度快,适合大规模召回
Cross-Encoder(交叉编码器)
Cross-Encoder 架构:
输入: [CLS] 什么是梯度下降? [SEP] 梼度下降是一种优化算法... [SEP]
↓
Transformer 编码
↓
[CLS] 向量 → 线性层 → 相关性分数 (0~1)
特点:
- 查询和文档拼接后一起输入模型
- 模型可以学习查询-文档之间的细粒度交互
- 无法预计算(每次都要重新编码)
- 精度高但速度慢
| 特性 | Bi-Encoder | Cross-Encoder |
|---|---|---|
| 编码方式 | 独立编码 | 联合编码 |
| 速度 | 快(向量索引) | 慢(逐对计算) |
| 精度 | 中等 | 高 |
| 适用场景 | 大规模召回 | 精排重排序 |
| 可离线索引 | ✅ 是 | ❌ 否 |
Reranker 的评分过程
Cross-Encoder 作为 Reranker 的工作流程:
精排流程:
查询: "如何学习机器学习?"
候选文档(Bi-Encoder 召回的 top-50):
Doc_1: "机器学习入门指南..."
Doc_2: "深度学习框架对比..."
Doc_3: "机器学习学习路线..."
...
Doc_50: "自然语言处理基础..."
Cross-Encoder 逐一打分:
Score(Doc_1) = 0.92 ← 高度相关
Score(Doc_2) = 0.45 ← 部分相关
Score(Doc_3) = 0.89 ← 高度相关
...
Score(Doc_50) = 0.12 ← 不相关
重新排序后返回 top-5:
Doc_1 (0.92) > Doc_3 (0.89) > ... > 返回前 5 个
常用的 Reranker 模型
| 模型 | 开发者 | 特点 |
|---|---|---|
| Cross-Encoder/ms-marco-MiniLM-L-6-v2 | Sentence Transformers | 轻量级,适合通用场景 |
| BGE-Reranker-v2-m3 | BAAI | 多语言支持,中文效果好 |
| Cohere Rerank | Cohere | API 服务,开箱即用 |
| Jina Reranker | Jina AI | 支持 100+ 语言 |
| FlashRank | 开源社区 | 超轻量,推理极快 |
Reranker 在 RAG 中的最佳实践
- 召回数量:Bi-Encoder 召回 30-100 个候选,Reranker 精排后返回 3-10 个
- 延迟预算:Reranker 通常增加 50-200ms 延迟,需在精度和速度间权衡
- 模型选择:中文场景优先选择 BGE-Reranker 或 Jina Reranker
- 批量推理:对多个候选并行打分,充分利用 GPU 并行能力
- 混合策略:结合关键词匹配(BM25)和语义匹配的分数,提升鲁棒性
总结
Reranker 通过 Cross-Encoder 对查询和文档进行联合编码,捕捉细粒度的语义交互,弥补了 Bi-Encoder 在精度上的不足。在 RAG 系统中,它是连接"粗召回"和"精准回答"之间的桥梁,合理使用 Reranker 能显著提升最终的生成质量。