bge-reranker

开源权重 · 智源 BAAI · 可免费自建 ·

开源权重自建部署多语言

来自智源研究院(BAAI)的 bge-reranker 系列,是专门为段落重排序训练的开源权重 cross-encoder。它们是自建部署的标准选择:免费下载、可直接接入 sentence-transformers,且在英文基准上强到能击败大多数商业 API。

模型变体

模型体积语言最适合
BAAI/bge-reranker-base278 MB英文CPU 推理快,良好基线
BAAI/bge-reranker-large560 MB英文更强的英文质量
BAAI/bge-reranker-v2-m3568 MB100+ 种语言综合最佳;多语言主力
BAAI/bge-reranker-v2-gemma2.5 GB100+ 种语言质量最高;需要 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 才实用

实时看 cross-encoder 打分

我们的 Demo 使用一个量化的开源权重 cross-encoder —— 同一家族,完全在你的浏览器里运行。

打开 Demo →

其他模型