← 返回信息流
技术博客Hugging Face Blog·16 天前

Ettin 重排序模型家族发布

原标题:Introducing the Ettin Reranker Family

速览

Ettin 正式推出 Ettin 重排序模型家族,为搜索和推荐场景提供更强大的排序能力。该系列模型通过优化算法架构,显著提升了相关性与用户体验。此举有助于开发者构建更精准的信息检索系统。

AI 深度解读

深度解读:Ettin Reranker 家族发布——基于 ModernBERT 的高效重排序模型

背景

在检索增强生成(RAG)和现代搜索引擎架构中,"检索-重排序"(Retrieve-then-Rerank)已成为标准范式。传统的检索流程通常分为两步:首先使用轻量级的向量嵌入模型(Embedder)从大规模语料库中快速召回 Top-K 候选文档;随后,使用更复杂、计算成本更高的交叉编码器(Cross-Encoder)对这批候选文档进行精细的相关性打分和重排序。

然而,现有的重排序模型往往面临两个挑战:一是模型体积庞大,推理延迟高,难以在大规模生产环境中实时运行;二是缺乏针对特定场景优化的轻量级替代方案。为了解决这一问题,Hugging Face 团队发布了 Ettin Reranker Family,这是一系列基于 Johns Hopkins University(约翰斯·霍普金斯大学)Ettin 套件中的 ModernBERT 编码器构建的新型重排序模型。该系列旨在提供从极轻量级到大规模的不同规格模型,在保持 SOTA(State-of-the-Art,最先进)性能的同时,显著降低推理成本。

核心内容

1. 模型系列与规格

本次发布的 Ettin Reranker 家族包含六个不同规模的模型,均基于 cross-encoder/ettin-reranker-v1-data 数据集训练而成。该数据集是 lightonai/embeddings-pre-training 的一个子集,混合了 lightonai/embeddings-fine-tuning 中经过重排序的子集。

六个模型的具体名称及参数量级如下:

  • cross-encoder/ettin-reranker-17m-v1 (17M 参数)
  • cross-encoder/ettin-reranker-32m-v1 (32M 参数)
  • cross-encoder/ettin-reranker-68m-v1 (68M 参数)
  • cross-encoder/ettin-reranker-150m-v1 (150M 参数)
  • cross-encoder/ettin-reranker-400m-v1 (400M 参数)
  • cross-encoder/ettin-reranker-1b-v1 (1B 参数)

这些模型在各自参数量级下均达到了 SOTA 性能。训练过程采用了蒸馏策略,以 mixedbread-ai/mxbai-rerank-large-v2 的得分作为目标,通过点均方误差(Pointwise MSE)进行训练。

2. 架构细节

所有六个重排序模型共享相同的架构设计,仅在骨干网络(Backbone)的大小上有所不同。

  • 骨干网络:采用 Johns Hopkins University 的 Ettin 编码器,属于 ModernBERT 风格。其特点包括:
    • 未填充注意力机制(Unpadded Attention)
    • RoPE 位置编码
    • GeGLU 激活函数
    • 支持高达 8192 个 Token 的上下文窗口
    • 基于 2T Token 的开源许可预训练数据
  • 分类头:在编码器之上,使用了一个由四个模块组成的分类头,旨在镜像 ModernBertForSequenceClassification,但基于 Sentence Transformers 的模块化组件构建。
    1. Transformer (FA2):使用 Flash Attention 2 处理变长输入,通过序列去填充(Sequence Unpadding)提升效率。
    2. Pooling (cls):采用 [CLS] 标记的池化方式。消融实验显示,CLS 池化优于平均池化(Mean Pooling),尽管 ModernBERT 仅在每三层中使用一次全局注意力,但实证表明这些全局层携带的信号足以使 CLS 成为更好的池化选择。
    3. Dense:全连接层,使用 GELU 激活函数,无偏置。
    4. LayerNorm:层归一化。
    5. Dense:输出单个相关性分数的全连接层。

这种架构设计使得模型在处理中等长度的文档序列时,相比 fp32 + SDPA 默认加载方式,速度提升了 1.7 倍至 8.3 倍。

3. 使用方式与性能优化

Ettin Reranker 模型兼容 Sentence Transformers 库,只需几行代码即可集成:

from sentence_transformers import CrossEncoder

# 加载模型
model = CrossEncoder("cross-encoder/ettin-reranker-32m-v1")

# 预测相关性分数
scores = model.predict([
    ("Where was Apple founded?", "Apple Inc. was founded in Cupertino, California in 1976..."),
    ("Where was Apple founded?", "The Fuji apple is an apple cultivar..."),
])
# 输出: [11.39, 2.96] <- 分数越高越相关

# 或者使用 rank 方法获取排序结果
ranked = model.rank(
    query="Which planet is known as the Red Planet?",
    documents=["Mars...", "Venus...", "Jupiter..."],
    top_k=4,
    return_documents=True
)

性能优化建议: 为了获得最高的吞吐量,建议安装 kernels 并设置以下参数: model_kwargs={"dtype": "bfloat16", "attn_implementation": "flash_attention_2"}。 根据模型大小和序列长度,这通常能带来 1.7 倍到 8.3 倍的速度提升。

4. 端到端检索-重排序流水线示例

文章提供了一个完整的检索-重排序流水线示例,展示了如何将快速嵌入模型与重排序模型结合:

  1. 检索阶段:使用 sentence-transformers/static-retrieval-mrl-en-v1 作为嵌入模型,快速编码查询和文档库,计算相似度并筛选出 Top-100 候选文档。
  2. 重排序阶段:将 Top-100 候选文档输入 cross-encoder/ettin-reranker-68m-v1,由重排序模型进行精细打分和排序,最终返回 Top-5 结果。

这种模式确保了总计算成本可控,同时最终排名接近穷举交叉编码器计算的结果。

关键要点

  • 多尺度选择:提供了从 17M 到 1B 参数的六种模型规格,用户可根据延迟要求和精度需求在速度与质量之间进行权衡。
  • 长上下文支持:得益于 ModernBERT 的预训练,所有模型均支持高达 8K Token 的上下文窗口,适用于长文档重排序场景。
  • 训练数据透明:发布了完整的数据集和训练配方(Training Recipe),基于 mixedbread-ai/mxbai-rerank-large-v2 进行蒸馏训练,确保了可复现性。
  • 架构优化:采用 ModernBERT 骨干网络,结合 Flash Attention 2 和序列去填充技术,显著提升了推理速度。
  • CLS 池化优势:实证研究表明,尽管 ModernBERT 主要使用局部窗口注意力,但 CLS 标记的池化效果优于平均池化。
  • 易于集成:完全兼容 Sentence Transformers 生态,支持 hf skills add train-sentence-transformers 工具,方便用户利用 AI 编程助手进行微调。
  • 生产级性能:在 MTEB(eng, v2) Retrieval 基准测试中,Ettin Reranker 与 google/embeddinggemma-300m 等嵌入模型配对表现优异。

意义与影响

Ettin Reranker 家族的发布标志着重排序模型在效率与精度平衡上的重要进展。

首先,降低了重排序的门槛。以往,交叉编码器因其高昂的计算成本,往往仅用于小规模数据或离线处理。Ettin 系列通过轻量化设计(特别是 17M-68M 参数模型),使得在实时生产环境中对成千上万的候选文档进行精细化重排序成为可能

查看原文 →huggingface.co