Reranker(重排序)
Reranker检索后再精排
亦作、亦称:重排序
Reranker(重排序器)是信息检索与 RAG 流水线中的第二阶段精排模块,对粗检索返回的 Top-K 候选文档重新计算相关性得分并重新排序,显著提升最终送入大语言模型的上下文质量。相比第一阶段的向量检索或关键词检索,Reranker 通过交叉编码器对查询与文档做联合建模,精度更高但计算代价也更大。
概述
Reranker(重排序器)是信息检索与 RAG 流水线中的第二阶段精排模块,对粗检索返回的 Top-K 候选文档重新计算相关性得分并重新排序,显著提升最终送入大语言模型的上下文质量。相比第一阶段的向量检索或关键词检索,Reranker 通过交叉编码器对查询与文档做联合建模,精度更高但计算代价也更大。
为什么需要重排序
单阶段向量检索速度快、覆盖广,但语义精度有限,重排序作为补偿机制承担「粗召回后精选」的职责。
- 双编码器的局限 : 双编码器(Bi-Encoder)将查询和文档分别独立嵌入为向量,无法捕捉词级别的细粒度交互,相关性评估较粗糙。
- 全库精排不可行 : 交叉编码器推理代价随候选数量线性增长,对百万级文档库直接精排在延迟和成本上均不可接受。
-两阶段分工:第一阶段负责高速粗召回(Recall),第二阶段负责精准精排(Precision),两者协同兼顾效率与准确性。
- RAG 质量瓶颈: 送入 LLM 的上下文片段质量直接决定生成答案的准确率,Reranker 是提升上下文相关性最直接的手段。
交叉编码器核心机制
交叉编码器将查询与候选文档拼接为单一序列,允许两者之间发生全注意力交互,从而产生精确的相关性评分。
- 输入格式:
[CLS] 查询 [SEP] 文档 [SEP],与 BERT 句对分类格式完全一致,联合编码后输出单一相关性分数。 - 全注意力交互:查询中每个 token 均可与文档中任意 token 相互关注,能捕捉精确的语义匹配与上下文依赖信号。
- 输出相关性分数:取
[CLS]位置隐层向量经线性层映射为 0-1 的相关性得分,用于重新排序候选列表。 - 无法离线预计算:查询与文档必须同时输入,不能像双编码器那样预先缓存文档向量,因此只适合对几十至数百条候选做在线推理。
- 计算复杂度:时间复杂度约 O(K × L²),其中 K 为候选数量,L 为序列长度,K 较大时需批处理或换用更高效的变体。
典型两阶段检索流水线
现代 RAG 系统普遍采用「粗检索 + 精排」的两阶段架构,Reranker 处于流水线的关键衔接节点。
- 第一阶段(粗检索):使用 BM25 或向量数据库(FAISS、Milvus、Pinecone 等)从大规模文档库中快速召回 Top-K(通常 K=20~100)候选。
- 第二阶段(精排):Reranker 对上述候选逐对打分,输出相关性降序列表,取 Top-N(通常 N=3~10)送入 LLM 生成答案。
- 混合检索增强:第一阶段可结合稠密检索与稀疏检索(混合搜索),扩大召回覆盖率,再由 Reranker 做跨来源统一精排。
- 延迟权衡:Reranker 通常增加约 100-500ms 延迟,生产部署中需根据 SLA 合理设置 K 值与模型规格。
发展脉络
重排序技术从经典信息检索延伸至神经网络时代,随 BERT 和大语言模型的崛起持续演进。
- 2000年代前:传统 IR 系统已有多阶段排序雏形,使用 BM25、TF-IDF、PageRank 等特征做粗精两轮排序。
- 2019:Nogueira & Cho 发表「Passage Re-ranking with BERT」(arXiv:1901.04085),在 MS MARCO 排行榜上 MRR@10 相对提升约 27%,确立 BERT 交叉编码器重排序为现代范式。
- 2020:ColBERT(斯坦福)提出延迟交互(Late Interaction)机制,实现速度与精度的新平衡;monoBERT、duoBERT 进一步扩展点式与对式排序。
- 2022:Cohere 推出商业化 Rerank API;BGE-Reranker(BAAI)等中文优化模型开源,推动中文 RAG 实践。
- 2023:LangChain、LlamaIndex 等框架将 Reranker 纳入原生组件,RankGPT 探索以 LLM 直接做列表级重排序。
- 2024 至今:Rank-DistiLLM 等工作通过知识蒸馏将 LLM 排序能力迁移至轻量交叉编码器,兼顾效果与部署成本。
代表性模型与工具
业界已有丰富的开源与商业 Reranker 可直接集成到 RAG 流水线。
- cross-encoder/ms-marco 系列(Hugging Face):基于 BERT/MiniLM 在 MS MARCO 上微调,推理轻量,是最常用的开源基线。
- BGE-Reranker(BAAI):中英双语重排序模型,对中文语料效果显著,是国内 RAG 实践的首选之一。
- ColBERT / ColBERTv2(斯坦福 DAWN 实验室):延迟交互范式,预计算文档向量,推理速度介于双编码器与交叉编码器之间。
- Cohere Rerank API:商业化多语言重排序接口,可零代码集成至 LangChain、LlamaIndex 等主流框架。
- RankGPT / RankLLM:以大语言模型输出文档排列顺序,精度更高但成本显著上升,适合离线或低频场景。
评估指标
重排序质量通常用信息检索领域的标准指标衡量,聚焦相关文档在排名列表中的位置质量。
- MRR@K(平均倒数排名):衡量第一个相关文档出现位置的倒数均值,是 MS MARCO 的核心指标,K 通常取 10。
- NDCG@K(归一化折损累积增益):综合考虑多文档分级相关性与排名位置,对排序顺序更敏感,常用于 TREC 系列评测。
- MAP(平均精度均值):综合衡量相关文档在整个排名列表中的分布,反映系统整体精排能力。
- Recall@K:第一阶段粗检索的召回率,决定 Reranker 能精排的文档上限,通常需 ≥ 80% 才值得精排。
局限与注意事项
Reranker 并非万能,工程落地时需关注其固有约束与常见误区。
- 无法补救粗检索遗漏:Reranker 只能在粗排候选集内重排,若粗检索未召回相关文档,精排无法凭空补救,「垃圾进,垃圾出」同样适用。
- 计算延迟瓶颈:对每对「查询-文档」单独推理,候选数量越多延迟越高,不适合实时性要求极高的场景,需批处理优化。
- 长文档截断问题:主流交叉编码器通常限制输入在 512 或 1024 tokens,超长文档需提前做分块(Chunking),可能丢失跨块关键信息。
- 语言与领域适配:通用英文模型在中文或专业领域效果可能显著下降,需针对目标语料做领域微调或选用适配模型。
常见误解
日常交流中容易听到的简化说法,未必准确,但能帮助理解误解从何而来。
- 「检索后再精排」
- 「大模型圈高频词」
- 「跟 Reranker 是一回事吗」
相关术语
和本术语关联紧密的其他词条,便于串联理解。
🎯 考点练习
含该术语的高频面试题,含标准答案与追问。
- 中级概念查看详解 →
长上下文的「迷失在中间」(Lost in the Middle)是什么?如何缓解?
长上下文中模型对中间位置信息利用率低、呈 U 型,关键信息应放首尾。
- 中级概念查看详解 →
什么是 Agentic RAG?它相比传统 RAG 强在哪里?
Agentic RAG 让 LLM 自主决定何时、检索什么、是否再查,支持多步与多源,胜在复杂查询与可纠错。
- 高级系统设计高频查看详解 →
如何设计一个企业级 LLM 问答 / 客服机器人?
以 RAG 为核心,叠加检索重排、引用溯源、会话记忆、护栏与降级,构建可评测、可监控的企业问答系统。
- 中级场景高频查看详解 →
RAG 检索结果不相关,如何逐步定位?
先用 retrieval 指标判断是召回还是排序问题,再排查 embedding 模型、分块、query 改写、索引更新与是否需要 rerank。
延伸阅读
从知识库精选 2 篇文章,帮助深入理解该术语。
