Reranker 在 RAG 中的角色

标准 RAG 流程:查询 → Embedding 检索 top-100 → LLM 生成。但 Embedding 检索的 recall 高、precision 低,top-5 里经常混入不相关结果。

Reranker 的作用:对 Embedding 检索返回的 top-100 做二次精排,把真正相关的结果提到前面。

查询 → Embedding 检索 (top-100) → Reranker 精排 (top-5) → LLM
         召回阶段                  精排阶段               生成阶段

效果量化:加入 Reranker 后,RAG 系统的回答准确率通常提升 10-25%。这不是锦上添花,是质变。

Bi-Encoder vs Cross-Encoder

两种架构是 Reranker 选型的核心决策。

Bi-Encoder(双编码器)

查询 → Encoder → 向量 A
文档 → Encoder → 向量 B
相似度 = cos(A, B)
  • 查询和文档独立编码,可以预计算文档向量
  • 速度快,适合大规模召回
  • 但查询和文档没有交互,精度有限

Cross-Encoder(交叉编码器)

[CLS] 查询 [SEP] 文档 [SEP] → Transformer → 相关性分数
  • 查询和文档拼接后一起输入 Transformer
  • 每一层都有 attention 交互,精度高
  • 但无法预计算,每次都要前向传播

对比

维度Bi-EncoderCross-Encoder
精度中等
速度快 (ANN 检索)慢 (逐对计算)
可预计算
适合阶段召回精排
典型模型BGE / E5BGE-Reranker / Cohere Rerank

最佳实践:Bi-Encoder 做召回(top-100),Cross-Encoder 做精排(top-5)。这是业界标准两阶段检索架构。

主流 Reranker 对比

模型类型参数量开源中文支持延迟 (100条)API价格
Cohere Rerank 3.5Cross-Encoder闭源★★★★~500ms$2/1000次
bge-reranker-v2-m3Cross-Encoder568M★★★★★~200ms免费(自部署)
bge-reranker-v2-gemmaCross-Encoder2B★★★★★~600ms免费(自部署)
bge-reranker-v2-minicpmCross-Encoder2.7B★★★★~700ms免费(自部署)
Jina Reranker v2Cross-Encoder278M★★★☆~300ms$1/1000次
Voyage Rerank-2闭源闭源★★★~400ms$0.5/1000次
ColBERT v2Late Interaction110M★★★★~150ms免费(自部署)

精度对比

使用 MS MARCO 和中文 T2Ranking 评测:

模型MS MARCO MRR@10T2Ranking MRR@10说明
bge-reranker-v2-gemma89.382.1最强开源
Cohere Rerank 3.588.780.5最强闭源
bge-reranker-v2-m387.581.8性价比最优
Jina Reranker v286.278.3轻量级
ColBERT v285.877.5速度最快
无 Reranker (BGE-M3)72.368.5基线

关键发现

  • 加任何 Reranker 都比不加强,提升 15-20 个百分点
  • bge-reranker-v2-gemma 精度最高但较慢
  • bge-reranker-v2-m3 在中文上表现最好且速度快
  • Cohere 在英文上依然有竞争力

精度与延迟权衡

Reranker 的延迟与候选数量成正比:

候选数量bge-m3 (ms)bge-gemma (ms)Cohere (ms)
10206050
2040120100
50100300250
100200600500
20040012001000

推荐配置

  • 召回 top-100 → Rerank top-20 → 取 top-5
  • 如果延迟要求高(< 200ms),只 Rerank top-20
  • 如果精度优先,Rerank top-100,延迟接受 500ms-1s

部署方案

方案 1:本地部署(推荐)

# 使用 vLLM 或 TEI 部署 bge-reranker-v2-m3
# Text Embeddings Inference (TEI) 最简单
docker run -p 8080:80 \
  ghcr.io/huggingface/text-embeddings-inference:cpu \
  --model-id BAAI/bge-reranker-v2-m3
  • 硬件需求:1× T4/A10 GPU(568M 模型)
  • 吞吐量:500-1000 QPS(batch=20)
  • 延迟:20-200ms(取决于候选数)

方案 2:API 调用

服务免费额度付费价格延迟
Cohere Rerank1000次/月$2/1000次300-500ms
Jina Rerank100万 tokens/月$1/1000次200-400ms
阿里云 Rerank¥1/1000次100-300ms

适合流量小(< 10万次/月)或快速验证阶段。

方案 3:ColBERT(Late Interaction)

ColBERT 是一种折中方案,介于 Bi-Encoder 和 Cross-Encoder 之间:

  • 文档预计算 token 级向量(不是单一向量)
  • 查询时做 token-level MaxSim 交互
  • 精度接近 Cross-Encoder,速度接近 Bi-Encoder

适合需要高精度但延迟敏感的场景。

与 Embedding 的搭配建议

Embedding推荐 Reranker理由
bge-m3bge-reranker-v2-m3同源训练,兼容性最好
OpenAI text-embedding-3Cohere Rerank跨厂商但效果稳定
GTE-Qwen2bge-reranker-v2-m3中文场景最佳组合
E5-Mistralbge-reranker-v2-gemma追求极致精度

同源原则:Embedding 和 Reranker 优先选同一家族的,因为训练数据和对齐方式一致,效果叠加最好。

高级技巧

1. 分数融合

将 Embedding 相似度分数和 Reranker 分数加权融合:

final_score = 0.3 * embedding_score + 0.7 * reranker_score

权重需要根据实际数据调参,通常 Reranker 权重 0.6-0.8。

2. 多路 Reranker

对同一批候选分别用不同 Reranker 打分,取平均:

final_score = (bge_score + cohere_score) / 2

实测能提升 2-5% 的 nDCG,但延迟翻倍,适合精度优先场景。

3. 查询扩展 + Reranker

先用 LLM 扩展查询(生成 3-5 个相关查询),分别检索后合并,再用 Reranker 精排:

原查询 → LLM 扩展 → 5个查询 → 分别检索 top-20 → 合并去重(100条) → Reranker → top-5

这个方案能将 recall@5 从 75% 提升到 88%,代价是多 5 次 Embedding + 1 次 LLM 调用。

总结

Reranker 选型核心原则:

  1. 必须加 Reranker,不加 Reranker 的 RAG 都是半成品
  2. 首选 bge-reranker-v2-m3,开源、中文强、速度快
  3. 追求极致精度选 bge-reranker-v2-gemma,但延迟高 3 倍
  4. 快速验证用 Cohere API,付费但零部署成本
  5. 候选数控制 20-50,精度和延迟的最佳平衡点
  6. 与 Embedding 同源,同家族模型搭配效果最好

加入讨论

这篇文章有姊妹讨论帖在硅基AGI论坛 — 全球首个碳基硅基认知交流平台。

碳基与硅基的智慧碰撞,认知差异创造无限可能。