bge-reranker
开源权重自建部署多语言
来自智源研究院(BAAI)的 bge-reranker 系列,是专门为段落重排序训练的开源权重 cross-encoder。它们是自建部署的标准选择:免费下载、可直接接入 sentence-transformers,且在英文基准上强到能击败大多数商业 API。
模型变体
| 模型 | 体积 | 语言 | 最适合 |
|---|---|---|---|
BAAI/bge-reranker-base | 278 MB | 英文 | CPU 推理快,良好基线 |
BAAI/bge-reranker-large | 560 MB | 英文 | 更强的英文质量 |
BAAI/bge-reranker-v2-m3 | 568 MB | 100+ 种语言 | 综合最佳;多语言主力 |
BAAI/bge-reranker-v2-gemma | 2.5 GB | 100+ 种语言 | 质量最高;需要 GPU |
建议:从 bge-reranker-v2-m3 开始。它支持多语言、BEIR 成绩强,在中等流量下用 CPU 也没问题。只有当你有 GPU 且需要极致质量时,才升级到 Gemma 变体。
基准测试
| 模型 | BEIR NDCG@10(均值) | MS MARCO MRR@10 |
|---|---|---|
| bge-reranker-base | ~56.8 | ~39.0 |
| bge-reranker-large | ~58.4 | ~40.7 |
| bge-reranker-v2-m3 | ~60.1 | ~41.1 |
| bge-reranker-v2-gemma | ~61.8 | ~42.0 |
分数为 18 个 BEIR 数据集上的近似平均值。结果因数据集而异 —— 请务必在你自己的领域上评测。
快速上手
安装
pip install sentence-transformers
对一组段落重排序
from sentence_transformers import CrossEncoder
model = CrossEncoder("BAAI/bge-reranker-v2-m3", max_length=512)
query = "How do I add reranking to my RAG pipeline?"
passages = [
"Rerankers score each query-passage pair with a cross-encoder.",
"BM25 is a classical keyword-based retrieval method.",
"London is the capital of the United Kingdom.",
"Two-stage retrieval: retrieve 50 candidates, rerank to top 5.",
]
scores = model.predict([(query, p) for p in passages])
ranked = sorted(zip(scores, passages), reverse=True)
for score, text in ranked:
print(f"{score:.4f} {text[:80]}")
在 RAG 流水线中
from sentence_transformers import CrossEncoder
reranker = CrossEncoder("BAAI/bge-reranker-v2-m3")
def rag_answer(query: str, vector_db, llm) -> str:
# Stage 1: retrieve wide
candidates = vector_db.search(query, top_k=50)
# Stage 2: rerank tight
scores = reranker.predict([(query, c) for c in candidates])
top5 = [c for _, c in sorted(zip(scores, candidates), reverse=True)[:5]]
# Stage 3: generate
return llm.complete(f"Context:\n" + "\n\n".join(top5) + f"\n\nQ: {query}")
优缺点
优点
- 完全免费 —— 无 API 密钥、无按次成本
- BEIR 成绩强,可与商业 API 一较高下
- 通过 sentence-transformers / HuggingFace 轻松集成
- 多语言(v2-m3 覆盖 100+ 种语言)
- 完全可控:量化、微调、蒸馏
- 智源 BAAI 持续活跃开发
缺点
- 自己托管、自己运维 —— 有基础设施开销
- 候选超过约 50 个时,CPU 推理偏慢
- 没有 SLA,没有托管式弹性伸缩
- 最大的变体需要 GPU 才实用