mxbai-rerank

开源权重 · mixedbread-ai ·

开源权重托管 APIApache 2.0浏览器可跑 xsmall

mixedbread-ai 的重排序器系列基于 DeBERTa-v3 —— 一种采用解耦注意力机制的架构,能带来出色的 cross-encoder 精度。三个变体均采用 Apache 2.0 协议,可自由自建部署。xsmall 模型足够轻量,可以在浏览器中运行,这也是它成为本站在线 Demo 选项之一的原因。

模型变体

模型体积上下文长度最适合
mxbai-rerank-xsmall-v1~70 MB512 tokens浏览器 / 边缘端;延迟最低
mxbai-rerank-base-v1~278 MB512 tokens速度与质量的良好平衡
mxbai-rerank-large-v1~560 MB512 tokens精度最高;建议使用 GPU

三个变体均为在 MS MARCO 段落排序任务上训练的 DeBERTa-v3 cross-encoder。生产环境建议从 mxbai-rerank-base-v1 开始;若有 GPU 余量且需要更高精度,则切换到 large。在浏览器或边缘端部署且模型体积受限时,使用 xsmall

基准测试

模型BEIR NDCG@10(均值)MS MARCO MRR@10
mxbai-rerank-xsmall-v1~55.5~38.0
mxbai-rerank-base-v1~59.8~40.6
mxbai-rerank-large-v1~62.1~42.3

分数为 18 个 BEIR 数据集上的近似平均值。请查阅 mixedbread-ai 在 HuggingFace 上的模型卡片以获取各数据集结果。

快速上手

自建部署(sentence-transformers)

pip install sentence-transformers
from sentence_transformers import CrossEncoder

model = CrossEncoder("mixedbread-ai/mxbai-rerank-base-v1")

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("mixedbread-ai/mxbai-rerank-large-v1")

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

mixedbread-ai 提供基于相同模型权重的托管重排序端点。如果你不想在自有基础设施上运行推理,这是个不错的选择。

pip install mixedbread-ai
from mixedbread_ai import MixedbreadAI

mxbai = MixedbreadAI(api_key="YOUR_API_KEY")

result = mxbai.reranking(
    model="mixedbread-ai/mxbai-rerank-large-v1",
    query="How do I add reranking to my RAG pipeline?",
    input=[
        "Rerankers score each query-passage pair jointly.",
        "BM25 is a keyword-based retrieval method.",
        "London is the capital of the United Kingdom.",
        "Two-stage retrieval: retrieve wide, rerank tight.",
    ],
    top_k=3,
    return_input=False,
)

for item in result.data:
    print(f"{item.score:.4f}  rank {item.index + 1}")

浏览器使用

xsmall 变体足够轻量,可以通过 transformers.js 在浏览器中运行 —— 这正是我们 Demo 所使用的方式:

// transformers.js (ES module)
import { AutoTokenizer, AutoModelForSequenceClassification }
  from "https://cdn.jsdelivr.net/npm/@huggingface/transformers@3";

const tokenizer = await AutoTokenizer.from_pretrained(
  "mixedbread-ai/mxbai-rerank-xsmall-v1", { dtype: "q8" }
);
const model = await AutoModelForSequenceClassification.from_pretrained(
  "mixedbread-ai/mxbai-rerank-xsmall-v1", { dtype: "q8" }
);

const inputs = tokenizer(
  [query, query],
  { text_pair: [doc1, doc2], padding: true, truncation: true }
);
const { logits } = await model(inputs);
const scores = logits.sigmoid().tolist();

使用 dtype: "q8" 后,量化权重约为 35 MB —— 下载迅速,首次运行后即缓存到 IndexedDB 中。

优缺点

优点

  • Apache 2.0 —— 完全开放,允许商业使用
  • xsmall 变体可通过 transformers.js 在浏览器中运行
  • DeBERTa-v3 架构:cross-encoder 精度出色
  • large 变体可与顶级商业 API 一较高下
  • 可轻松集成到 sentence-transformers
  • 提供托管 API 选项,无需自行管理推理

缺点

  • 主要面向英文 —— 多语言支持有限
  • 512 token 上下文对长文档而言较短
  • 社区规模小于 bge 或 Cohere
  • large 变体需要 GPU 才能达到实用速度

mxbai-rerank-xsmall 驱动本站 Demo

在模型选择器中选中它,实时看到它对你的段落打分 —— 首次使用后无需重新下载。

打开 Demo →

其他模型