终于,BERT的替代品来了

发布于2024年12月19日
在 GitHub 上更新

TL;DR

这篇博文介绍了ModernBERT,这是一系列最先进的仅编码器模型,它们在各个方面都比老一代编码器有所改进,具有8192的序列长度,更好的下游性能和更快的处理速度。

ModernBERT可作为任何BERT类模型的即插即用替代品,提供基础版(1.49亿参数)和大型版(3.95亿参数)两种模型尺寸。

点击查看如何使用transformers库使用这些模型

ModernBERT将包含在transformers的v4.48.0版本中。在此之前,需要从主分支安装transformers。

pip install git+https://github.com/huggingface/transformers.git

由于ModernBERT是一个掩码语言模型(MLM),您可以使用fill-mask管道或通过AutoModelForMaskedLM加载它。要将ModernBERT用于分类、检索或问答等下游任务,请遵循标准的BERT微调方案进行微调。

⚠️ 如果您的GPU支持,我们建议使用Flash Attention 2来达到最高的ModernBERT效率。为此,请按以下方式安装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

使用管道

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)

注意:ModernBERT不像一些早期的BERT模型那样使用令牌类型ID。大多数下游用法与Hugging Face Hub上的标准BERT模型相同,只是您可以省略token_type_ids参数。

引言

BERT于2018年发布(在AI年代已是千年以前!),但至今仍被广泛使用:事实上,它目前是HuggingFace Hub上下载量第二的模型,每月下载量超过6800万次,仅次于另一个为检索任务微调的编码器模型。这是因为其仅编码器架构使其非常适合日常出现的各种实际问题,例如检索(如用于RAG)、分类(如内容审核)和实体提取(如用于隐私和法规遵从)。

终于,6年之后,我们有了替代品!今天,我们Answer.AILightOn(以及朋友们!)正在发布ModernBERT。ModernBERT是一个新的模型系列,在速度准确性方面均优于BERT及其较年轻的兄弟模型。该模型汲取了近年来大型语言模型(LLM)的数十项进展,并将其应用于BERT风格的模型,包括架构和训练过程的更新。

我们期望ModernBERT能够成为仅编码器模型现在部署的众多应用中的新标准,例如RAG管道(检索增强生成)和推荐系统。

除了更快更准确之外,ModernBERT还将上下文长度增加到8k令牌(大多数编码器只有512),并且是第一个在训练数据中包含大量代码的仅编码器模型。这些功能开辟了以前通过开放模型无法访问的新应用领域,例如大规模代码搜索、新的IDE功能以及基于完整文档检索而非小块检索的新型检索管道。

但是,为了解释我们到底做了什么,我们首先回顾一下我们是从哪里来的。

仅解码器模型

最近LLM领域引人注目的进展体现在GPTLlamaClaude等模型上。这些是仅解码器模型,或者说生成模型。它们生成类人内容的能力使得像生成艺术和交互式聊天这样的令人惊叹的GenAI应用领域成为可能。这些引人注目的应用吸引了大量投资,资助了蓬勃发展中的研究,并带来了快速的技术进步。我们所做的,实质上,是将这些进步移植回仅编码器模型。

为什么?因为许多实际应用需要一个精简高效的模型!而且它不需要是生成模型。

更直白地说,对于许多任务来说,仅解码器模型太庞大太慢太私有太昂贵。想想看,最初的GPT-1是一个拥有1.17亿参数的模型。相比之下,Llama 3.1模型拥有4050亿参数,其技术报告描述的数据合成和整理方法对于大多数公司来说过于复杂和昂贵,无法复制。因此,要使用像ChatGPT这样的模型,您需要支付几美分,并等待几秒钟才能从您无法控制的重量级服务器获得API回复。

当然,这些巨型生成模型的开放式能力意味着您在紧急情况下可以将其用于非生成或判别性任务,例如分类。这是因为您可以用简单的英语描述分类任务,然后……直接让模型进行分类。但是,虽然这种工作流程非常适合原型设计,但一旦进入大规模生产,您就不希望支付原型阶段的价格。

GenAI周围的流行热潮掩盖了仅编码器模型的作用。它们是实际语言处理的主力,是目前许多科学和商业应用中实际用于此类工作负载的模型。

仅编码器模型

仅编码器模型的输出是一个数值列表(一个嵌入向量)。可以说,编码器模型不是用文本回答,而是将其“答案”编码成这种压缩的数值形式。该向量是模型输入的压缩表示,这就是为什么仅编码器模型有时被称为表示模型

虽然仅解码器模型(如GPT)可以完成仅编码器模型(如BERT)的工作,但它们受到一个关键限制的束缚:由于它们是生成模型,它们在数学上“不允许”“偷看”后面的令牌。它们只能向后看。这与仅编码器模型不同,后者被训练成每个令牌都可以向前和向后看(双向)。它们为此而生,这使得它们在工作中非常高效。

基本上,像OpenAI的O1这样的前沿模型就像一辆法拉利SF-23。它显然是工程学的胜利,旨在赢得比赛,这就是我们谈论它的原因。但仅仅换轮胎就需要一支专业的维修团队,而且你无法自己购买一辆。相比之下,BERT模型就像一辆本田思域。它是工程学的胜利,但更微妙,因为它旨在经济实惠、燃油效率高、可靠且极其有用。这就是为什么它们无处不在。

你可以从以下几个方面看出这一点。

支持生成模型:理解表示模型(仅编码器)普遍存在的一种方式是注意它们在与仅解码器模型协同工作时,如何频繁地被用于构建安全高效的系统。

最明显的例子是RAG。系统不依赖于LLM参数中训练的知识,而是使用文档存储为LLM提供与查询相关的信息。但这当然只是推迟了问题。如果LLM不知道哪些文档与查询相关,那么系统将需要其他流程来选择这些文档?它将需要一个足够快速和便宜的模型,以便能够用于编码使LLM有用所需的大量信息。这个模型通常是BERT类仅编码器模型。

另一个例子是监督架构,其中可以使用廉价的分类器来确保生成的文本不违反内容安全要求。

简而言之,只要你在部署中看到仅解码器模型,很可能仅编码器模型也是系统的一部分。但反之则不成立。

基于编码器的系统:在GPT出现之前,社交媒体和Netflix等平台就有内容推荐。在这些地方、搜索和其他地方都有广告定位。还有用于垃圾邮件检测、滥用检测等的内容分类。这些系统不是建立在生成模型上的,而是建立在像仅编码器模型这样的表示模型上的。所有这些系统仍然存在,并且仍在以巨大的规模运行。想象一下全球每秒有多少广告被定位!

下载量:在HuggingFace上,RoBERTa是领先的BERT类模型之一,其下载量超过HuggingFace上最受欢迎的10个LLM的总和。事实上,目前,仅编码器模型的每月下载量总计超过10亿次,几乎是仅解码器模型的每月3.97亿次下载量的三倍。事实上,由ModernBERT等编码器“基础模型”组成的“填充掩码”模型类别,随时可以针对其他下游应用进行微调,是总体下载量最大的模型类别。

推理成本:上述内容表明,在单次推理的基础上,仅编码器模型每年的推理次数是仅解码器或生成模型的多倍。一个有趣的例子是FineWeb-Edu,其中基于模型的质量过滤必须对超过15万亿个tokens进行。FineWeb-Edu团队选择使用仅解码器模型Llama-3-70b-Instruct生成标注,并使用一个微调的基于BERT的模型执行大部分过滤。此过滤耗时6,000 H100小时,按照HuggingFace Inference Endpoints每小时10美元的定价,总计60,000美元。另一方面,将15万亿个tokens输入到流行的仅解码器模型中,即使使用最低成本的选项,即使用Google的Gemini Flash及其每百万tokens0.075美元的低推理成本,也将花费超过一百万美元!

性能

概述

以下是ModernBERT和其他模型在各种任务上的准确性快照,通过标准学术基准衡量——如您所见,ModernBERT是唯一一个在每个类别中都名列前茅的模型,这使其成为您可以用于所有基于编码器任务的模型。

如果你参加过Kaggle上的NLP竞赛,那么你会知道DeBERTaV3多年来一直是冠军们的选择。但现在不再是了:ModernBERT不仅是第一个在GLUE上击败DeBERTaV3的基础大小模型,而且其内存使用量还不到DeBERTa的五分之一

当然,ModernBERT速度很快。它比DeBERTa快两倍——事实上,在输入长度混合的更常见情况下,它甚至快达四倍。其长上下文推理速度比其他高质量模型(如NomicBERTGTE-en-MLM)快近三倍

ModernBERT的上下文长度为8,192个标记,比大多数现有编码器长16倍以上。这对于RAG管道至关重要,因为在这些管道中,较小的上下文通常会导致语义理解的块太小。ModernBERT还是与ColBERT配合使用的最先进的长上下文检索器,并且比其他长上下文模型高9个百分点。更令人印象深刻的是:这个训练速度非常快的模型,简单地为了与其他骨干模型进行比较而进行调整,在长上下文任务上的性能甚至超过了广泛使用的检索模型!

对于代码检索,ModernBERT是独一无二的。实际上没有什么可以与之比较的,因为以前从未有过这样的大量代码数据训练的编码器模型。例如,在混合了代码和自然语言的StackOverflow-QA数据集(SQA)上,ModernBERT的专业代码理解和长上下文能力使其成为唯一一个在该任务上得分超过80的骨干模型。

这意味着全新的应用很可能将建立在这种能力之上。例如,想象一个与AI连接的IDE,它用ModernBERT嵌入索引了整个企业代码库,能够快速检索所有仓库中的相关代码,并提供长上下文。或者一个代码聊天服务,它描述了如何将数十个独立项目集成在一起的应用程序功能。

与主流模型相比,ModernBERT在检索、自然语言理解和代码检索这三大任务类别中表现更佳。虽然在自然语言理解方面略低于DeBERTaV3,但其速度快了许多倍。请注意,ModernBERT与任何其他基础模型一样,开箱即用只能进行掩码词预测。要执行其他任务,基础模型应按照这些样板中的方法进行微调。

与专业模型相比,ModernBERT在大多数任务上具有可比性或更优。此外,ModernBERT在大多数任务上都比大多数模型更快,并且可以处理长达8,192个标记的输入,比主流模型长16倍。

效率

以下是ModernBERT和其他解码器模型在NVIDIA RTX 4090上的内存(最大批处理大小,BS)和推理(每秒千个令牌)效率结果。

您可能会注意到的第一件事是我们正在分析消费级GPU的效率,而不是最新的难以获得的炒作硬件。首先也是最重要的是,ModernBERT注重实用性,而不是炒作。

作为这项重点的一部分,这还意味着我们确保ModernBERT在实际应用中表现良好,而不仅仅是在基准测试中。这类模型通常只在它们最擅长的单一精确尺寸——它们的最大上下文长度——上进行测试。这就是表格中“固定”列所显示的内容。但在现实世界中,输入大小是变化的,因此我们努力优化的是这种性能——“可变”列。如您所见,对于可变长度输入,ModernBERT比所有其他模型都快得多。

对于长上下文输入,我们相信这将是未来最有价值和最重要的应用的基础,ModernBERT比下一个最快的模型快2-3倍。而且,在“实用性”方面,ModernBERT不需要额外的繁重“xformers”依赖,而只需现在常见的Flash Attention作为依赖项。

此外,得益于ModernBERT的高效性,它可以使用比几乎任何其他模型都大的批处理大小,并且可以在更小、更便宜的GPU上有效使用。特别是基础版本的高效性,可能催生直接在浏览器、手机等设备上运行的新应用。

为什么ModernBERT如此“现代”?

现在,我们已经阐述了为什么我们应该给予编码器模型更多关注的理由。作为值得信赖、被低估的主力,自2018年BERT发布以来,它们几乎没有得到任何更新!

更令人惊讶的是:自RoBERTa之后,没有一个编码器在没有权衡的情况下提供整体改进(花哨地称为“帕累托改进”):DeBERTaV3在GLUE和分类性能方面表现更好,但牺牲了效率和检索。其他模型,如AlBERT,或更新的模型,如GTE-en-MLM,都在某些方面优于原始BERT和RoBERTa,但在其他方面则有所退步。

然而,自从这两个模型首次发布以来,我们已经学到了大量关于如何构建更好的语言模型。如果您使用过LLM,您会非常清楚这一点:尽管在编码器世界中它们很少见,但帕累托改进在解码器世界中是持续不断的,模型不断在各个方面变得更好。而且我们现在都明白了:模型的改进部分是魔法,大部分是工程。

因此,ModernBERT项目(希望这个名字能恰如其分)的目标相当简单:将这种现代工程带到编码器模型中。我们主要通过三种方式实现:

  1. 现代化Transformer架构
  2. 特别关注效率
  3. 现代数据规模和来源

新Transformer,旧Transformer

Transformer架构已成为主导,并且如今绝大多数模型都使用它。然而,重要的是要记住,Transformer不止一种,而是许多种。它们的主要共同点是坚信注意力机制确实是你所需要的一切,因此,围绕注意力机制构建了各种改进。

ModernBERT从Transformer++(由Mamba创造)中汲取了巨大灵感,该模型首次由Llama2系列模型使用。具体来说,我们用改进后的等效模块替换了旧的BERT类构建模块,即我们:

  • “旋转位置嵌入” (RoPE) 替换旧的位置编码:这使得模型更好地理解词语之间的相对位置,并允许我们扩展到更长的序列长度。
    • 将旧的MLP层替换为GeGLU层,改进了原始BERT的GeLU激活函数。
    • 通过移除不必要的偏置项来精简架构,使我们能够更有效地利用参数预算。
    • 在嵌入后添加额外的归一化层,有助于稳定训练。

为赛道升级一辆本田思域

我们已经讨论过了:编码器不是法拉利,ModernBERT也不例外。然而,这并不意味着它不能快。当你上高速公路时,你通常不会把你的车换成赛车,而是希望你日常可靠的座驾能轻松达到限速。

事实上,对于我们上面提到的所有应用场景,速度都是必不可少的。编码器在以下场景中非常受欢迎:它们要么需要处理大量数据,即使微小的速度提升也能迅速累积;要么延迟非常重要,例如在RAG中。在许多情况下,编码器甚至在CPU上运行,在这种情况下,如果我们希望在合理的时间内获得结果,效率就显得更为重要。

和大多数研究一样,我们站在巨人的肩膀上,并大量利用Flash Attention 2的速度改进。我们的效率改进依赖于三个关键组成部分:交替注意力,以提高处理效率;去填充和序列打包,以减少计算浪费;以及硬件感知模型设计,以最大化硬件利用率。

全局与局部注意力

ModernBERT 最具影响力的特点之一是交替注意力,而不是完全的全局注意力。从技术上讲,这意味着我们的注意力机制每3层才关注完整输入(全局注意力),而所有其他层都使用滑动窗口,其中每个令牌只关注离它最近的128个令牌(局部注意力)。
由于注意力机制的计算复杂度随着每个额外令牌的增加而迅速膨胀,这意味着ModernBERT可以比任何其他模型更快地处理长输入序列。

实践中,它看起来像这样

从概念上讲,这种方法奏效的原因很简单:想象你正在读一本书。对于你读的每一句话,你需要完全了解整个情节才能理解大部分内容吗(完全全局注意力)?还是只要了解当前章节就足够了(局部注意力),只要你偶尔回顾其对主线情节的意义即可(全局注意力)?绝大多数情况下,是后者。

去填充和序列打包

ModernBERT 效率的另一个核心机制是其对去填充和序列打包的使用。

为了能够在一个批次中处理多个序列,编码器模型要求它们的长度相同,以便进行并行计算。传统上,我们一直依赖填充来实现这一点:找出最长的句子,然后添加无意义的令牌(填充令牌)来填充其他所有序列。

虽然填充解决了问题,但它解决得并不优雅:大量的计算最终浪费在填充令牌上,而这些填充令牌不提供任何语义信息。

Padding vs sequence packing
比较填充和序列打包。序列打包(“去填充”)避免了在填充令牌上浪费计算,并且每批的非填充令牌计数更加一致。样本仍然通过仔细的掩码单独处理。

去填充解决了这个问题:我们不保留这些填充令牌,而是将它们全部删除,并将它们连接成批大小为一的迷你批次,从而避免所有不必要的计算。如果您正在使用Flash Attention,我们实现的去填充甚至比以前的方法更快,以前的方法严重依赖于序列在模型中进行时进行去填充和重新填充:我们更进一步,引入了我们自己的去填充实现,这严重依赖于Flash Attention的RoPE支持的最新发展。这使得ModernBERT只需要去填充一次,并且可以选择在处理后重新填充序列,从而比以前的方法提高了10-20%的速度。

为了进一步加快预训练速度,去填充在我们的模型中得到了很好的配合,因为它与序列打包结合使用。这里的序列打包是一个合乎逻辑的下一步:由于我们将输入连接成一个单一序列,并且GPU非常擅长并行化,我们希望最大限度地提高单个前向模型传递所能挤出的计算效率。为此,我们使用贪婪算法将单个序列分组为连接后的序列,使其尽可能接近模型的最大输入长度。

关注硬件

最后,ModernBERT 效率的第三个方面是硬件设计。

我们试图平衡先前研究中强调的两点见解:

  1. 深而窄 vs 宽而浅研究表明,更深、更窄的模型通常比层数更少、更宽的模型表现更好。然而,这是一把双刃剑:模型越深,并行性越差,因此在相同参数数量下运行速度越慢。
  2. 硬件效率:模型维度需要与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的维度匹配,基础版为768,大型版为1024,以最大化向后兼容性。
  • 设置在所有GPU上都通用的性能约束

此后,我们通过约束网格搜索,改变层数和层宽度,对多种模型设计进行了实验。一旦我们确定了看起来最有效的形状,我们就确认了我们的启发式方法与实际GPU性能相符,并确定了最终的模型设计。

训练

def data(): return ['text', 'bad_text', 'math', 'code']

https://media1.tenor.com/m/xJSM2Ky3WpgAAAAd/steve-ballmer-microsoft.gif
想象一下这个场景,但把“开发者”换成“数据”

编码器在训练数据方面一直落后。这通常被理解为仅仅是训练数据规模,但事实并非如此:以前的编码器,例如DeBERTaV3,训练时间足够长,甚至可能已经达到了万亿令牌的规模!

问题在于训练数据多样性:许多旧模型在有限的语料库上进行训练,通常包括维基百科和维基书籍。这些数据混合物非常明显是单一文本模态:它们只包含高质量的自然文本。

相比之下,ModernBERT的训练数据来自多种英语来源,包括网络文档、代码和科学文章。它在2万亿个标记上进行训练,其中大部分是独一无二的,而不是像以前的编码器那样通常重复20到40次。

其影响立竿见影:在所有现有的开源编码器中,ModernBERT在编程相关任务方面独树一帜。我们特别感兴趣的是这将带来哪些下游应用,以改进编程助手。

流程

我们沿用了原始BERT的训练方案,并对其进行了一些轻微升级,这些灵感来源于后续的工作:我们移除了下一句预测目标,因为它已被证明会增加开销而没有明显收益,并将掩码率从15%提高到30%。

这两个模型都采用三阶段训练过程。首先,我们以1024的序列长度训练1.7T个token。然后,我们进行长上下文适应阶段,以8192的序列长度训练250B个token,同时通过降低批次大小来保持每个批次中看到的总token数基本一致。最后,我们按照ProLong强调的长上下文扩展理想混合,对50亿个不同采样的token进行退火。

分三个阶段训练是我们的方法,旨在确保模型全面表现出色,这在其结果中得到了体现:它在长上下文任务上具有竞争力,同时不影响其处理短上下文的能力……

……但这还有一个额外的好处:对于前两个阶段,我们在预热阶段完成后使用恒定的学习率进行训练,并且只在最后50亿个令牌上执行学习率衰减,遵循梯形(或预热-稳定-衰减)学习率。更重要的是:我们将发布这些稳定阶段的每一个中间检查点,灵感来自Pythia。我们这样做的主要原因是为了支持未来的研究和应用:任何人都可以从我们的任何预衰减检查点重新开始训练,并根据其预期用途,对领域相关数据进行退火

技巧,一切都是技巧!

如果你已经读到这份公告的这里,你可能已经习惯了:当然,我们在这里也使用技巧来加快速度。确切地说,我们有两个主要技巧。

我们从第一个开始,这很常见:由于初始训练步骤正在更新随机权重,我们采用批处理大小热身:我们从较小的批处理大小开始,以便相同数量的令牌更频繁地更新模型权重,然后逐渐增加批处理大小到最终训练大小。这显著加快了模型训练的初始阶段,模型在该阶段学习其对语言的最基本理解。

第二个技巧远不常见:通过平铺进行较大模型尺寸的权重初始化,灵感来自微软的Phi系列模型。这个技巧基于以下认识:既然我们有一套完美(恕我们自夸)的ModernBERT-base权重就在那里,为什么还要用随机数初始化ModernBERT-large的初始权重呢?

事实上,事实证明,将ModernBERT-base的权重平铺到ModernBERT-large上比从随机权重初始化效果更好。它还具有与批次大小热身相结合的额外好处,可以进一步加快初始训练速度。

结论

在这篇博文中,我们介绍了ModernBERT模型,这是一个新的最先进的小型高效仅编码器模型系列,终于为BERT带来了急需的改进。

ModernBERT证明,仅编码器模型可以通过现代方法得到改进。它们在某些任务上继续提供非常强大的性能,提供极具吸引力的尺寸/性能比。

最重要的是,我们非常期待看到社区将如何创造性地使用这些模型!为了鼓励这一点,我们正在发起一个演示征集活动,截止日期为2025年1月10日:其中5个最佳演示将被添加到本帖的展示部分,并赢得100美元(或等值的当地货币)的亚马逊礼品卡,以及为期6个月的HuggingFace Pro订阅!如果您需要一些入门提示,这里有一个我们考虑过的演示:代码相似性HF空间!请记住,这是一个编码器模型,所以所有最酷的下游应用可能都需要某种形式的微调(在真实数据或可能是解码器模型合成数据上?)。幸运的是,有很多很棒的框架支持编码器微调:🤗Transformers本身支持各种任务,包括分类;GliNER用于零样本命名实体识别;或Sentence-Transformers用于检索和相似性任务!

链接

LightOn 赞助了本项目在 Orange Business Cloud Avenue 上的计算资源。

社区

太棒了,感谢你们所做的工作,解释了它并提供了新的BERT模型。
我很好奇通过将 ModernBERT-Large 蒸馏回 ModernBERT-Base 大小模型能获得多少提升。你有什么想法,这值得做吗?

那会是一次非常棒的提炼! @cbonnett

这看起来太棒了,这些优化对于任何使用微调编码器的人来说都非常受欢迎。

然而,令人失望的是,它只用英语文本进行过训练,并且没有提及多语言基准测试或多语言版本的计划。

·

@erickrf 那样可能会违背他们创建最高效BERT的初衷。一个多语言版本已从基础版训练而来 https://huggingface.co/answerdotai/ModernBERT-base/discussions/60,但可能无法满足你预期的语言需求。

做得好!分享一下PangolinGuard,这是一个从ModernBERT-large微调的模型,旨在实现AI护栏。尽管模型规模较小,但在混合基准测试(基于BIPIA、NotInject、Wildguard-Benign和PINT)中,该模型与Claude 3.7和Gemini Flash 2.0的性能非常接近。我相信这可以提供一种轻量级、低成本的方法,用于(i)添加自定义、自托管的安全检查,(ii)将对话引导至合规主题,以及(iii)在将AI管道连接到外部服务时减轻风险。

如果有人想探索将 ModernBERT 用于 AI 安全,请随时联系
📝 文章 | 🤗 hf-空间 | 仓库

我很高兴看到vLLM最近添加了对Modernbert的支持!我写了一篇关于如何使用它的短篇博客指南在这里

希望更多推理引擎增加对 ModernBERT 的支持能带来更多优秀的微调模型分享!

非常棒的博文。

有人尝试过将 ModernBERT 作为 LayoutLM 的基础吗?那会是一个很酷的举动 :-)

注册登录以发表评论