bge-reranker

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

开源权重自建部署多语言

来自智源研究院(BAAI)的 bge-reranker 系列,是专门为段落重排序训练的开源权重 cross-encoder。它们是自建部署的标准选择:免费下载、可直接接入 sentence-transformers,也是其他大多数重排序模型拿来对比的开源基线。

模型变体

模型参数量语言最适合
BAAI/bge-reranker-base278M中文、英文CPU 推理快,良好基线
BAAI/bge-reranker-large560M中文、英文质量更强,同样支持中英两种语言
BAAI/bge-reranker-v2-m3568M100+ 种语言综合最佳;多语言主力
BAAI/bge-reranker-v2-gemma2.5B100+ 种语言质量最高;需要 GPU

建议:从 bge-reranker-v2-m3 开始。它支持多语言、体量小到可以跑在 CPU 上,中等流量下完全够用。只有当你有 GPU 且需要极致质量时,才升级到 Gemma 变体。

基准测试

BAAI 给两代模型用的是不同的基准,所以两列都不完整:v2 测的是 BEIR(英文检索),v1 测的是 C-MTEB 重排序(以中文为主)。

模型BEIR NDCG@10(均值)C-MTEB 重排序(MAP 均值)
bge-reranker-base未公布65.42*
bge-reranker-large未公布66.10*
bge-reranker-v2-m355.36*未公布
bge-reranker-v2-gemma60.71*未公布

* 所有数字均为 BAAI 自己公布的。BEIR:15 个数据集,对 bge-large-en-v1.5 召回的前 100 条结果重排(FlagEmbedding llm_reranker 评测)。C-MTEB:六个重排序数据集上的 MAP 均值 —— T2Reranking 及其两个跨语言变体、MMarcoReranking、CMedQAv1 和 CMedQAv2(FlagEmbedding reranker README)。其他评测方用各自的设置会得到不同的 BEIR 分数 —— Jina 的论文里 v2-m3 是 56.51* —— 所以请只在同一来源内比较模型。2026 年 10 月之前,本表给四个模型都列了 BEIR 和 MS MARCO 分数,但我们查不到任何出处,现已删除。

快速上手

安装

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 密钥、无按次成本
  • BAAI 公布了 BEIR 成绩,也是其他厂商评测里最常用的对比基线
  • 通过 sentence-transformers / HuggingFace 轻松集成
  • 多语言(v2-m3 覆盖 100+ 种语言)
  • 完全可控:量化、微调、蒸馏
  • 智源 BAAI 持续活跃开发

缺点

  • 自己托管、自己运维 —— 有基础设施开销
  • 候选超过约 50 个时,CPU 推理偏慢
  • 没有 SLA,没有托管式弹性伸缩
  • 最大的变体需要 GPU 才实用

实时看 cross-encoder 打分

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

打开 Demo →

其他模型