详细解释
Rerank(重排 / 精排) 和搜索推荐系统里的”召回 → 排序”两阶段架构完全对齐:
- 第一阶段:召回(Retrieve / Recall)——快但不准。用 向量数据库 或 Elasticsearch 关键词/BM25 从几十万条知识库中快速捞 Top-N(一般 20 至 50),目标是”尽量别漏掉正确答案”(高召回率),但这 50 条里可能有 40 条其实不相关。
- 第二阶段:重排(Rerank)——准但慢。把这 50 条和用户问题一对一喂给一个 Cross-Encoder(交叉编码器)模型,让它做”相关性二分类/打分”,然后按分数从高到低重排,只取 Top-K(一般 3 至 5)给 LLM。
两者模型结构的本质区别:
- 召回用的 Embedding 模型是 Bi-Encoder(双塔 / 双编码器):问题和文档分别过一次编码器得到两条向量,再算内积。好处是文档向量能提前离线算好存进 VDB,查询时只要算一次问题向量,快。缺点是”文档和问题之间没有注意力交互”,语义匹配粗。
- Rerank 模型是 Cross-Encoder(交叉编码器):把
<[BOS_never_used_51bce0c785ca2f68081bfa7d91973934]> 问题 [SEP] 文档片段 [SEP]拼接成一个序列送进 Transformer,让问题和文档在每一层注意力里互相对齐,最后输出一个 0 至 1 的相关性分数。打分准很多(RAG 最终准确率一般涨 15–30%),但”50 条就要跑 50 次前向”,比召回慢 20 至 50 倍。所以它只适合对召回结果做最后一小撮精排。
代表模型:BAAI/bge-reranker-v2-m3、Cohere Rerank 3、Jina Reranker v2、唯元智创 内置默认 bge-reranker-large(中文场景)。
标准 RAG 三段式管线 + 指标提升对照
| 方案 | Recall@10(召回 10 条里有正例的占比) | Final Answer Accuracy(最终回答准确率) |
|---|---|---|
| 只用向量召回 Top-5 | 65% | 55% |
| 混合检索(向量 + BM25 关键词)Top-20 | 82% | 68% |
| Top-20 → Rerank → Top-5 | 94% | 85% 至 92% |
| 再叠 HyDE(假设文档嵌入) → Rerank | 97% | 90% 至 95% |
一句话判断你需不需要 Rerank:如果你召回 Top-10 里经常”相关的答案排到第 8、9 位”,加上 Rerank 基本就是免费的 20 分提升。
怎么接入 Rerank(三种模式,复杂度从低到高)
| # | 接入方式 | 典型实现 | 适用场景 |
|---|---|---|---|
| 1 | SaaS 托管 Rerank API | Cohere / Jina / 唯元智创 的 rerank endpoint,入参 query + documents[],出分 | 绝大多数业务,零运维 |
| 2 | 开源模型 + 推理框架本地部署 | bge-reranker-v2-m3,ONNX/TensorRT-LLM 单机部署 | 数据不出域、合规要求严 |
| 3 | 同进程小模型 | 把 Rerank 模型直接放进你的 Python 应用进程(FastAPI 启动时加载 ONNX) | 延迟最敏感场景,省一次 RPC |
常见问题
Rerank 之后 RAG 准确率还不满意怎么办?
按优先级查 4 件事:(1)切片(Chunking)做对没有—— 80% 的 RAG 失败根因是切片切得稀碎(建议改 Semantic Chunking 语义切片);(2)召回量是不是不够大?从 Top-20 拉到 Top-50 再 Rerank 往往就有了;(3)Embedding 和 Rerank 模型是不是同语种同语料训练的(中英文别搞混);(4)还不行,叠 HyDE 前置增强检索。
我把 Embedding 模型升级成更大的,还用 Rerank 吗?
仍然强烈建议。Embedding 再大也属于 Bi-Encoder,它的结构天生没有”问题和文档互看注意力”的环节,匹配是粗粒度的。业界规律是:大 Embedding + Rerank 总是比”再大一级的 Embedding 单独用”效果好,而且成本更低、延迟可控。