Answer.AI 与 LightOn 发布 ModernBERT:取代 BERT 的编码器模型系列
Finally, a Replacement for BERT: Introducing ModernBERT
Answer.AI 与 LightOn 发布 ModernBERT,一个仅编码器模型系列,包含 base(149M 参数)和 large(395M 参数)两个规模,作为任何 BERT 类模型的即插即用替代。
从架构到训练的完整技术拆解,并附论文、预训练 checkpoint 与微调路径,便于判断能否替换现有 BERT 类编码器。
TL;DR
这篇博客文章介绍了 ModernBERT,这是一个仅编码器模型系列,代表了相较于老一代编码器在各方面的改进,具有 8192 的序列长度、更好的下游性能和更快的处理速度。
ModernBERT 可直接替换任何类似 BERT 的模型,提供 base(1.49 亿参数)和 large(3.95 亿参数)两种模型尺寸。
点击查看如何使用这些模型 transformers
ModernBERT 将包含在 transformers 的 v4.48.0 版本中。在此之前,需要从主分支安装 transformers:
pip install git+https://github.com/huggingface/transformers.git
由于 ModernBERT 是一个掩码语言模型 (MLM),你可以使用 fill-mask pipeline 或通过 AutoModelForMaskedLM 加载它。要将 ModernBERT 用于分类、检索或问答等下游任务,请按照标准的 BERT 微调方法进行微调。
⚠️ 如果你的 GPU 支持,我们建议使用 ModernBERT 配合 Flash Attention 2 以达到最高效率。为此,请按如下方式安装 Flash Attention,然后照常使用模型:
pip install flash-attn
使用 AutoModelForMaskedLM:
from transformers import AutoTokenizer, AutoModelForMaskedLM
model_id = "answerdotai/ModernBERT-base"
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForMaskedLM.from_pretrained(model_id)
text = "The capital of France is [MASK]."
inputs = tokenizer(text, return_tensors="pt")
outputs = model(**inputs)
# To get predictions for the mask:
masked_index = inputs["input_ids"][0].tolist().index(tokenizer.mask_token_id)
predicted_token_id = outputs.logits[0, masked_index].argmax(axis=-1)
predicted_token = tokenizer.decode(predicted_token_id)
print("Predicted token:", predicted_token)
# Predicted token: Paris
使用 pipeline:
import torch
from transformers import pipeline
from pprint import pprint
pipe = pipeline(
"fill-mask",
model="answerdotai/ModernBERT-base",
torch_dtype=torch.bfloat16,
)
input_text = "He walked to the [MASK]."
results = pipe(input_text)
pprint(results)
注意:与现代 BERT 模型不同,ModernBERT 不使用 token 类型 ID。在 HF Mirror Hub 上,大多数下游用法与标准 BERT 模型相同,只是可以省略 token_type_ids 参数。
简介
BERT 于 2018 年发布(在 AI 领域已是千年之前!),但至今仍被广泛使用:事实上,它目前是 HuggingFace hub 上第二多下载的模型,每月下载量超过 6800 万次,仅次于另一个为检索任务微调的编码器模型。这是因为其仅编码器架构使其非常适合日常出现的各类现实问题,如检索(例如用于 RAG)、分类(例如内容审核)和实体提取(例如用于隐私和监管合规)。
终于,6 年后,我们有了替代品!今天,我们 Answer.AI 和 LightOn(以及朋友们!)发布了 ModernBERT。ModernBERT 是一个新的模型系列,在速度和准确度方面均实现了对 BERT 及其后辈的帕累托改进。该模型借鉴了近年来大型语言模型 (LLM) 研究中的数十项进展,并将其应用于 BERT 风格的模型,包括对架构和训练过程的更新。
我们预计 ModernBERT 将成为众多现已部署仅编码器模型的应用中的新标准,例如 RAG 管道(检索增强生成)和推荐系统。
除了更快更准确之外,ModernBERT 还将上下文长度增加到 8k tokens(大多数编码器仅为 512),并且是首个在训练数据中包含大量代码的仅编码器模型。这些特性开辟了以前通过开放模型无法进入的新应用领域,例如大规模代码搜索、新的 IDE 功能,以及基于全文检索而非小片段的新检索管道。
但为了解释我们究竟做了什么,让我们先退一步,看看我们走过了怎样的路。
仅解码器模型
最近在大语言模型领域备受瞩目的进展出现在像 GPT、Llama 和 Claude 这样的模型中。这些是仅解码器模型,即生成式模型。它们生成类人内容的能力催生了令人惊叹的新生成式AI应用领域,如生成艺术和交互式聊天。这些引人注目的应用吸引了大量投资,资助了蓬勃发展的研究,并推动了快速的技术进步。我们本质上所做的,就是将这些进展移植回仅编码器模型。
为什么呢?因为许多实际应用需要一个精简且高效的模型!而且它不需要是生成式模型。
更直白地说,对于许多任务而言,仅解码器模型太大、太慢、涉及隐私且太昂贵。想想最初的 GPT-1 是一个1.17亿参数的模型。相比之下,Llama 3.1 模型有4050亿个参数,其技术报告描述的数据合成与整理方法对大多数企业来说过于复杂和昂贵,难以复现。因此,要使用这样的模型,比如ChatGPT,你需要支付几分钱,等待几秒钟,才能从你无法控制的重量级服务器那里得到API回复。
当然,这些巨型生成式模型的开放式能力意味着,在紧急情况下,你可以将它们用于非生成式或判别式任务,比如分类。这是因为你可以用简单的英语描述一个分类任务,然后……直接让模型进行分类。但是,尽管这种工作流程非常适合原型设计,一旦进入大规模生产,你就不想再支付原型阶段的价格了。
围绕生成式AI的热门炒作掩盖了仅编码器模型的作用。这些才是实际语言处理的主力军,是目前在许多科学和商业应用中真正用于此类工作负载的模型。
仅编码器模型
仅编码器模型的输出是一个数值列表(一个嵌入向量)。你可以说,编码器模型不是用文本回答,而是将它的“答案”直接编码成这种压缩的数值形式。这个向量是模型输入的压缩表示,这就是为什么仅编码器模型有时被称为表示模型。
虽然仅解码器模型(如GPT)可以完成仅编码器模型(如BERT)的工作,但它们受到一个关键约束的制约:由于它们是生成式模型,数学上“不允许”它们“偷看”后面的token。它们只能向后看。这与仅编码器模型形成对比,后者经过训练,每个token都可以向前和向后(双向)看。它们就是为此而构建的,这使得它们在自己擅长的领域非常高效。
基本上,像OpenAI的O1这样的前沿模型就像一辆法拉利SF-23。它是工程学的明显胜利,为赢得比赛而设计,这就是为什么我们会谈论它。但仅更换轮胎就需要一支专门的维修团队,而且你自己也买不到。相比之下,BERT模型就像一辆本田思域。它同样是工程学的胜利,但更为微妙,因为它的设计目标是价格实惠、省油、可靠且极其有用。这就是为什么它们无处不在。
你可以通过多种方式来看待这一点。
支持生成模型:理解表征模型(仅编码器)普遍性的一种方法是,注意它们与仅解码器模型配合使用以构建安全高效系统的频率有多高。
最明显的例子是 RAG。系统不是依赖训练到模型参数中的 LLM 知识,而是使用文档存储为 LLM 提供与查询相关的信息。但当然,这只是推迟了问题。如果 LLM 不知道哪些文档与查询相关,那么系统将需要某种其他过程来选择这些文档?它需要一个足够快速和廉价的模型,以便能够用于编码使 LLM 有用所需的大量信息。这个模型通常是一个类似 BERT 的仅编码器模型。
另一个例子是监督架构,其中可能使用廉价分类器来确保生成的文本不违反内容安全要求。
简而言之,每当你在部署中看到仅解码器模型时,很有可能仅编码器模型也是系统的一部分。但反之则不然。
基于编码器的系统:在 GPT 出现之前,社交媒体和 Netflix 等平台上就有内容推荐。在这些场所、搜索和其他地方都有广告定向。还有用于垃圾邮件检测、滥用检测等内容分类。这些系统不是建立在生成模型上,而是建立在像仅编码器模型这样的表征模型上。所有这些系统仍然存在,并且仍以巨大的规模运行。想象一下全世界每秒有多少广告被定向!
下载量:在 HuggingFace 上,RoBERTa,领先的基于 BERT 的模型之一,其下载量超过了 HuggingFace 上最受欢迎的 10 个 LLM 的总和。事实上,目前仅编码器模型每月下载量合计超过 10 亿次,几乎是仅解码器模型每月 3.97 亿次下载量的三倍。事实上,由编码器“基础模型”(如 ModernBERT,可针对其他下游应用进行微调)组成的 `fill-mask` 模型类别,是总体下载量最多的模型类别。
推理成本:上述情况表明,在逐次推理的基础上,每年在仅编码器模型上执行的推理次数比仅解码器或生成模型多很多倍。一个有趣的例子是 FineWeb-Edu,其中必须对超过 15 万亿个 token 执行基于模型的质量过滤。FineWeb-Edu 团队选择使用仅解码器模型 Llama-3-70b-Instruct 生成标注,并使用微调的基于 BERT 的模型执行大部分过滤。这次过滤花费了 6,000 个 H100 小时,按照 HuggingFace Inference Endpoints 每小时 10 美元的价格,总计 60,000 美元。另一方面,将 15 万亿个 token 输入流行的仅解码器模型,即使采用使用 Google 的 Gemini Flash 及其每百万 token 0.075 美元的低推理成本的最低成本选项,也将花费超过一百万美元!
性能
概述
以下是 ModernBERT 及其他模型在多项任务上的准确率概览,依据标准学术基准进行测评——可以看到,ModernBERT 是唯一一个在所有类别中都位居榜首的模型,这使它成为可用于所有基于编码器任务的唯一选择:
如果你曾在 Kaggle 上参加过 NLP 竞赛,那你一定知道 DeBERTaV3 多年来一直是冠军之选。但这一局面已经改变:ModernBERT 不仅是首个在 GLUE 上超越 DeBERTaV3 的 base 规模模型,其内存占用还不到 DeBERTa 的五分之一。
当然,ModernBERT 速度很快。它的速度是 DeBERTa 的两倍——实际上,在输入长度混合的更常见场景中,速度提升可达4 倍。其长上下文推理速度比 NomicBERT 和 GTE-en-MLM 等其他高质量模型快近3 倍。
ModernBERT 的上下文长度达 8,192 个 token,比大多数现有编码器大16 倍以上。这一点至关重要,例如在 RAG 流水线中,较小的上下文往往会导致分块过小,无法进行语义理解。ModernBERT 也是结合 ColBERT 的最先进长上下文检索器,比其他长上下文模型高出 9 个百分点。更令人印象深刻的是:这个训练速度极快的模型,仅经过简单调优以与其他骨干模型对比,就在长上下文任务上超越了广泛使用的检索模型!
在代码检索方面,ModernBERT 独树一帜。实际上没有什么可以与之相比,因为此前从未有过像这样在大量代码数据上训练的编码器模型。例如,在 StackOverflow-QA 数据集 (SQA) 这一混合了代码和自然语言的混合数据集上,ModernBERT 专业的代码理解能力和长上下文能力使其成为唯一在该任务上得分超过 80 的骨干模型。
这意味着很可能会基于这一能力构建全新的应用。例如,想象一个 AI 连接的 IDE,整个企业代码库都用 ModernBERT 嵌入进行索引,从而在所有代码仓库中快速长上下文检索相关代码。或者一个代码聊天服务,能够描述一个集成了数十个独立项目的应用功能是如何工作的。
与主流模型相比,ModernBERT 在检索、自然语言理解和代码检索这三大任务类别中几乎都表现更优。虽然它在一个领域(自然语言理解)略逊于 DeBERTaV3,但速度快了许多倍。请注意,ModernBERT 与任何其他 base 模型一样,开箱即用只能进行掩码词预测。要执行其他任务,需要像这些 boilerplates 中那样对 base 模型进行微调。
与专用模型相比,ModernBERT 在大多数任务上表现相当或更优。此外,ModernBERT 在大多数任务上都比多数模型更快,并且可以处理长达 8,192 个 token 的输入,比主流模型长 16 倍。
效率
以下是在 NVIDIA RTX 4090 上 ModernBERT 和其他解码器模型的内存(最大批大小,BS)和推理(以每秒千 token 计)效率结果:
你可能首先注意到的是,我们是在一款价格亲民的消费级 GPU 上分析效率,而不是在最新那种一卡难求的热门硬件上。首先,也是最重要的,ModernBERT 关注的是实用性,而不是炒作。
作为这一关注点的一部分,这也意味着我们确保 ModernBERT 能很好地适用于真实世界的应用,而不仅仅是基准测试。这类模型通常只在它们最擅长的那一个确切尺寸上进行测试——也就是它们的最大上下文长度。这就是表中“固定”列所展示的内容。但真实世界中的输入尺寸各不相同,因此这才是我们努力优化的性能——“可变”列。如你所见,对于可变长度输入,ModernBERT 比其他所有模型都快得多。
对于长上下文输入,我们认为这将成为未来最有价值和最重要应用的基础,ModernBERT 比第二快的模型还要快 2-3 倍。而且,再次从“实用性”维度来看:ModernBERT 不需要额外沉重的“xformers”依赖,而只需要如今已很常见的 Flash Attention 作为依赖。
此外,得益于 ModernBERT 的高效性,它可以使用比几乎任何其他模型都更大的批大小,并且可以在更小、更便宜的 GPU 上有效使用。尤其是 base 尺寸的高效性,可能会催生直接在浏览器、手机等设备上运行的新应用。
ModernBERT 为什么如此“Modern”?
现在,我们已经说明了为什么我们应该对编码器模型多一些关爱。作为值得信赖却未被充分重视的主力模型,自 2018 年的 BERT 以来,它们得到的更新少得令人惊讶!
更令人惊讶的是:自 RoBERTa 以来,还没有任何编码器能在没有取舍的情况下提供整体改进(花哨的说法是“帕累托改进”):DeBERTaV3 有更好的 GLUE 和分类性能,但牺牲了效率和检索能力。其他模型,例如 AlBERT,或更新的模型,如 GTE-en-MLM,都在某些方面优于最初的 BERT 和 RoBERTa,但在另一些方面有所退步。
然而,自这对组合最初发布以来,我们已经学到了大量关于如何构建更好语言模型的知识。如果你用过 LLM,你一定很清楚:虽然在编码器世界中很罕见,但帕累托改进在解码器世界中却是常态,那里的模型在所有方面都在不断变得更好。而且正如我们现在都已经明白的:模型改进只有一部分是魔法,大部分是工程。
因此,(希望名字起得恰当的)ModernBERT 项目的目标相当简单:把这种现代工程带给编码器模型。我们通过三个核心方式做到了这一点:
- 现代化的 Transformer 架构
- 特别关注效率
- 现代的数据规模与来源
认识新 Transformer,一如旧 Transformer
Transformer 架构已经占据主导地位,如今绝大多数模型都在使用它。然而,重要的是要记住,Transformer 并不是只有一种,而是有很多种。它们的共同点在于都深信注意力确实就是你所需要的,因此围绕注意力机制构建了各种改进。
ModernBERT 从 Transformer++(由 Mamba 提出)中汲取了大量灵感,后者最早被 Llama2 系列模型采用。具体来说,我们将较旧的类 BERT 构建块替换为其改进的等效组件,即:
- 将旧的位置编码替换为“旋转位置嵌入”(RoPE):这让模型在理解词语之间相对位置方面表现更佳,并使我们能够扩展到更长的序列长度。
- 将旧的 MLP 层替换为 GeGLU 层,改进了原始 BERT 的 GeLU 激活函数。
- 通过移除不必要的偏置项来简化架构,使我们能更有效地利用参数预算
- 在嵌入层之后增加一个额外的归一化层,有助于稳定训练
将本田思域升级为赛道用车
我们已经讨论过这一点:编码器不是法拉利,ModernBERT 也不例外。然而,这并不意味着它不能跑得快。当你驶上高速公路时,通常不会去把车换成赛车,而是希望日常可靠的座驾能轻松达到限速。
事实上,对于我们上面提到的所有应用场景,速度都至关重要。编码器在许多用途中非常受欢迎,要么是因为它们必须处理大量数据,使哪怕微小的速度提升也能迅速累积,要么是因为延迟非常重要,正如 RAG 中的情况。在许多情况下,编码器甚至在 CPU 上运行,如果我们想在合理时间内得到结果,效率就更为重要。
与研究中的大多数事情一样,我们站在巨人的肩膀上构建,并大量利用 Flash Attention 2 的速度改进。我们的效率提升依赖于三个关键组件:交替注意力,以提高处理效率;去填充和序列打包,以减少计算浪费;以及硬件感知模型设计,以最大化硬件利用率。
全局与局部注意力
ModernBERT 最具影响力的特性之一是交替注意力,而非完全全局注意力。从技术角度来说,这意味着我们的注意力机制每 3 层才会关注完整输入(全局注意力),而其他所有层则使用滑动窗口,使每个 token 只关注离自身最近的 128 个 token(局部注意力)。
由于注意力的计算复杂度随每个新增 token 急剧膨胀,这意味着 ModernBERT 在处理长输入序列时比其他任何模型都要快得多。
从概念上讲,其原理很简单:想象你在读一本书。每读一句话,你都需要完全了解整个情节才能理解大部分内容吗(完全全局注意力)?还是只要了解当前章节就够了(局部注意力),只要你偶尔回想它对主线情节的意义(全局注意力)?在绝大多数情况下,是后者。
去填充和序列打包
另一个有助于 ModernBERT 效率的核心机制是它用于去填充和序列打包。
为了能够在同一批次中处理多个序列,编码器模型要求它们具有相同的长度,这样才能进行并行计算。传统上,我们依赖填充来实现这一点:找出最长的句子,然后向其他所有序列添加无意义的标记(填充标记)来补齐长度。
虽然填充解决了问题,但方式并不优雅:大量计算最终被花费和浪费在填充标记上,而这些标记不贡献任何语义信息。
去填充解决了这个问题:与其保留这些填充标记,我们将它们全部移除,并将序列拼接成批次大小为 1 的小批次,从而避免所有不必要的计算。如果你使用的是 Flash Attention,我们的去填充实现比之前的方法更快,之前的方法严重依赖于在序列通过模型时进行去填充和重新填充:我们更进一步,引入了自己的去填充实现,大量依赖于 Flash Attention 的 RoPE 支持方面的最新进展。这使得 ModernBERT 只需进行一次去填充,并可选地在处理后对序列重新填充,从而比之前的方法提速 10-20%。
为了进一步加速预训练,去填充在我们的模型中并不孤单,我们将其与序列打包结合使用。这里的序列打包是逻辑上的下一步:由于我们将输入拼接成单个序列,而 GPU 非常擅长并行化,我们希望最大化单次前向模型传递所能挤出的计算效率。为此,我们使用贪心算法将各个序列分组为拼接序列,使其尽可能接近模型的最大输入长度。
关注硬件
最后,ModernBERT 效率的第三个方面是硬件设计。
我们试图平衡先前研究强调的两点见解:
- 深而窄 vs 宽而浅:研究表明,具有更窄层的更深模型通常比具有更少、更宽层的浅模型表现更好。然而,这是一把双刃剑:模型越深,可并行性越低,因此在相同参数数量下运行速度越慢。
- 硬件效率:模型维度需要与 GPU 硬件良好对齐以实现最大性能,而不同的目标 GPU 会导致不同的约束。
遗憾的是,没有神奇的配方能让模型在广泛的 GPU 上运行得同样好,但有一本出色的指南:与硬件协同设计模型架构的理由,其中详细列出了针对给定 GPU 优化模型架构的方法。我们提出了一种启发式方法,将他们的方法扩展到一组 GPU,同时遵守给定的约束条件。逻辑上,第一步是定义上述约束,在我们的案例中是:
- 将我们的目标 GPU 定义为常见推理 GPU(RTX 3090/4090、A10、T4、L4)
- 大致将我们的目标模型大小定义为 ModernBERT-Base 的 1.3 亿到 1.5 亿参数,以及 ModernBERT-Large 的 3.5 亿到 4.2 亿参数。
- 最终的嵌入维度必须与原始 BERT 的维度保持一致,base 为 768,large 为 1024,以最大限度地保证向后兼容性
- 设定在一组 GPU 中普遍适用的性能约束
之后,我们通过受限网格搜索尝试了多种模型设计,同时改变层数和层宽。一旦确定了看起来最高效的形态,我们便验证了我们的启发式方法与真实 GPU 性能相匹配,并最终确定了模型设计。
训练
def data(): return [‘text’, ‘bad_text’, ‘math’, ‘code’]
编码器落后的另一个重要方面是训练数据。这通常被理解为仅仅是训练数据的规模,但实际上并非如此:以前的编码器,如 DeBERTaV3,训练时间足够长,甚至可能已经突破万亿 token 规模!
问题其实在于训练数据的多样性:许多较老的模型在有限的语料库上训练,通常由 Wikipedia 和 Wikibooks 组成。这些数据混合体非常明显地属于单一文本模态:它们只包含高质量的自然文本。
相比之下,ModernBERT 在来自多种英语来源的数据上进行训练,包括网页文档、代码和科学文章。它在2 万亿 token 上训练,其中大部分是唯一的,而不是以前编码器中常见的标准 20 到 40 次重复。
其影响立竿见影:在所有现有的开源编码器中,ModernBERT 在编程相关任务上独树一帜。我们尤其感兴趣的是,这在改进编程助手方面将带来哪些下游应用。
过程
我们坚持原始 BERT 的训练配方,并根据后续工作做了一些轻微升级:我们移除了下一句预测目标,因为后来证明它只会增加开销而没有明显收益,并将掩码率从 15% 提高到 30%。
两个模型都通过三阶段过程进行训练。首先,我们在序列长度为 1024 的情况下对 1.7T token 进行训练。然后我们采用长上下文适应阶段,在序列长度为 8192 的情况下对 250B token 进行训练,同时通过降低批量大小来保持每批看到的总 token 数基本一致。最后,我们在以不同方式采样的 500 亿 token 上进行退火,遵循 ProLong 所强调的长上下文扩展理想混合。
分三阶段训练是我们确保模型全面表现良好的方式,这也反映在结果中:它在长上下文任务上具有竞争力,同时不影响其处理短上下文的能力…
…但这还有另一个好处:对于前两个阶段,我们在预热阶段完成后使用恒定学习率进行训练,仅在最后 500 亿个 token 上执行学习率衰减,遵循梯形(或预热-稳定-衰减)学习率。更重要的是:受 Pythia 启发,我们将发布这些稳定阶段的每一个中间检查点。我们这样做的主要原因是支持未来的研究和应用:任何人都可以自由地从我们的任何衰减前检查点重新开始训练,并针对其预期用途对领域适当的数据进行退火!
技巧,一切都在于技巧!
如果你已经读到了这篇公告的这里,你可能已经习惯了这一点:当然,我们在这里也使用技巧来加快速度。确切地说,我们有两个主要技巧。
让我们从第一个非常常见的技巧开始:由于初始训练步骤更新的是随机权重,我们采用批量大小预热:我们从较小的批量大小开始,这样相同数量的 token 会更频繁地更新模型权重,然后逐渐将批量大小增加到最终训练大小。这显著加快了模型训练的初始阶段,即模型学习对语言最基本理解的阶段。
第二个技巧则远不那么常见:通过平铺进行更大模型规模的权重初始化,灵感来自微软的 Phi 系列模型。这个技巧基于以下认识:既然我们有一套现成的、相当不错(如果我们敢这么说的话)的 ModernBERT-base 权重,为什么要用随机数初始化 ModernBERT-large 的初始权重呢?
事实上,将 ModernBERT-base 的权重平铺到 ModernBERT-large 上,效果比从随机权重初始化更好。它还有一个额外好处,即可以与批量大小预热很好地叠加,从而进一步加快初始训练速度。
结论
在这篇博客文章中,我们介绍了 ModernBERT 模型,这是一个新的最先进的小型高效仅编码器模型系列,终于让 BERT 得到了急需的重做。
ModernBERT 表明,仅编码器模型可以通过现代方法得到改进。它们在一些任务上继续提供非常强劲的性能,具有极具吸引力的规模/性能比。
最重要的是,我们非常期待看到社区会想出哪些创造性的方式来使用这些模型!为了鼓励这一点,我们将开放演示征集,截止日期为 2025 年 1 月 10 日:最好的 5 个演示将被添加到此文章的展示部分,并获得一张 100 美元(或等值当地货币)的亚马逊礼品卡,以及 6 个月的 HuggingFace Pro 订阅!如果你需要入门提示,这里有一个我们想到的演示:代码相似性 HF space!请记住,这是一个编码器模型,所以所有最酷的下游应用很可能都需要某种形式的微调(在真实数据上,或者也许是解码器模型合成数据上?)。幸运的是,现在有很多很酷的框架支持微调编码器:🤗Transformers 本身可用于各种任务,包括分类,GliNER 可用于零样本命名实体识别,或者 Sentence-Transformers 可用于检索和相似性任务!
链接
使用 Sentence Transformers 微调 ModernBERT
ModernBERT 与 Sentence Transformers 搭配良好,适用于检索和相似度任务。以下博文详细介绍了如何将 ModernBERT(或任何编码器)微调为嵌入模型、重排序模型或稀疏模型:
- 使用 Sentence Transformers 训练和微调嵌入模型:将 ModernBERT 微调为稠密嵌入模型。
- 使用 Sentence Transformers 训练和微调重排序模型:将 ModernBERT 微调为 Cross Encoder(重排序器);该文章展示了一个 ModernBERT-base 重排序器,其表现优于体积大得多的基线模型。
- 使用 Sentence Transformers 训练和微调稀疏嵌入模型:将 ModernBERT 微调为 SPLADE 稀疏编码器。
LightOn 赞助了该项目在 Orange Business Cloud Avenue 上的计算资源。
来源:Hugging Face Blog · hf-mirror.com




