当谷歌在 2018 年推出 BERT 模型时,恐怕没有料到这个 3.4 亿参数的模型会成为自然语言处理领域的奠基之作。
六年后的今天,面对动辄千亿参数的大语言模型浪潮,Answer.AI、LightOn与 HuggingFace 联手打造的 ModernBERT 却选择了一条返璞归真的道路:通过架构创新,将大语言模型的先进经验移植到小型模型中,让 4 亿参数的小模型迸发出超越预期的性能。
为了深入了解 ModernBERT 的独特之处,本文将对其与两个经典模型:jina-XLM-RoBERTa
(jina-embeddings-v3 背后的多语言基础模型) 和 RoBERTa-large
进行全面的对比分析。
三大模型概览
ModernBERT(2024 年 12 月)
由 Answer.AI、LightOn 与 HuggingFace 联合研发,这个新生代小模型融合了多项前沿技术:采用 RoPE 旋转位置编码,支持 8,192 token 的长上下文窗口;集成 GeGLU 激活层,在保持计算效率的同时提升模型表现。
jina-XLM-RoBERTa(2024 年 9 月)
基于 Meta 的 XLM-RoBERTa
改进的多语言文本向量模型。原始 XLM-RoBERTa
使用 XLM 大型多语言数据集增强了 RoBERTa
,而 jina-XLM-RoBERTa
引入了长上下文训练,整合 RoPE 编码和支持 FlashAttention-2 加速。这个模型是 jina-embeddings-v3
的基础。
RoBERTa-large(2019 年 7 月)
由 Meta 开发的 BERT 增强版本,3.55 亿参数。采用了动态掩码技术,训练数据量级显著提升,在 GLUE、SQuAD、RACE 等权威榜单保持优势,胜任文本分类、问答系统等 NLP 核心任务。
本文将从架构设计、效率优化和应用场景这三个维度,深入对比分析这三个模型,希望能帮助开发者们更好地理解 ModernBERT 的成功之道,并为 BERT 系列模型的未来发展提供一些启发。
我们还将分享 jina-embeddings-v3
的开发经验,并展望下一代 jina-embeddings-v4
和 jina-reranker-v3
的优化方向。
ModernBERT 的参数效率
作为首个成功借鉴大模型技术经验的小型架构,ModernBERT 在参数利用效率上展现了 3 大创新策略:
策略一:深而窄的架构
虽然 ModernBERT 的模型层数有所增加,达到 28 层,但其参数量(约 4 亿)与 RoBERTa-large(约 3.55 亿)基本持平,而 jina-XLM-RoBERTa 由于需要支持 89 种语言,其参数量达到了 5.5 亿。
这里暗藏着一个反直觉的设计策略:对于中小规模模型,深度(层数)比宽度(隐藏层维度)更能有效提升性能。深而窄的模型架构能在保持总参数量稳定的情况下,获得更强的抽象特征提取能力。
通过下表对比可以看到设计巧思,transformer 的大部分参数来自注意力层和全连接层。而 ModernBERT 将单层宽度从 4,096 压缩至 2,624,再通过增加 4 层深度补偿性能。
这种设计思路与 Meta 的 MobileLLM 研究结论高度一致:当模型尺寸较小时,深度带来的信息处理增益显著优于宽度扩展。 本质上,通过更多 transformer 层处理信息的能力比拥有更宽的层进行并行处理更有价值。
让我们看看这种深而窄架构的性能数据。
实测数据显示,在保持参数量级相近的前提下,深而窄架构的 ModernBERT 在检索任务(MRR@10)和语义相似度计算(STS)等核心场景中,性能优于传统浅而宽架构的竞品模型。
以 jina-XLM-RoBERTa
为例,它在 RoBERTa-large
浅而宽的架构基础上,将词汇表从 5 万扩大到了 25 万个 token,并使用了更多的数据进行训练。尽管如此,ModernBERT 在性能上仍然略胜一筹,这有力地表明了架构上的改变确实能在效率方面带来显著的提升。
策略二:精准控制词汇表规模
在 Transformer 架构中,词表参数量由公式决定:词汇表参数量 = 词元数量 × 隐藏层维度
,以 jina-XLM-RoBERTa
为例:25 万词元 × 1,024 维度 = 2.56 亿参数。光是词汇表编码就得用掉 2.56 亿个参数,这还没开始处理任何实际的语言任务呢!
如上图所示,Transformer 模型的第一层,通过一个权重矩阵(即词汇权重)把词元映射为隐藏状态。如果直接使用全部 UTF-8 码点, 共 1112064 个,再乘上 1024 维的隐藏层,光是词元转换就得耗费 11.4 亿个参数。
虽说对于那种参数量上千亿的大型语言模型(LLM)来说,这点开销还能接受,但对于参数规模小于 100 亿的模型来说,相当于直接浪费了 90% 的算力资源。这也是 BPE(字节对编码)等分词算法成为行业标配的根本原因,它们能把常见的 UTF-8 码点合并成一个词元,节省不少参数。
但关键是:词汇表权重不参与注意力计算,本质上只是一个静态的查找表。对于参数量受限的小模型(SLM),过大的词表会严重挤占核心模块的资源。
测评结果也印证了这一点,只支持英语的 ModernBERT-large 模型规模虽小,却在性能上超越了支持多语言的 jina-XLM-RoBERTa
。因为 jina-XLM-RoBERTa
为了支持 89 种语言,把 47% 的参数都分配到词汇表编码上了。而 ModernBERT 通过精简词汇表,在保证性能优势的同时,实现了更快的推理速度,特别适合那些资源敏感的场景。
因此,如果我们只考虑核心模型参数,不包括词汇权重,你会发现 ModernBERT 的实际计算能力远超它的竞争对手!在真正的语言建模上,ModernBERT 比 jina-XLM-RoBERTa
多了 19% 的参数,比 RoBERTa-large
也多了 15%。
策略三:渐进式参数空间扩展
在构建 jina-BERT-v2
过程时,我们发现从头训练小语言模型(SLM)代价实在太高了,随着模型参数增多,训练需要的计算资源快速增加。在计算资源有限的情况下,导致训练周期延长和试错迭代速度变慢。
ModernBERT 的解决方案很巧妙,提出了一种基于参数空间扩展(Weight Tiling)的渐进式初始化方案,利用已经训练好的模型权重来初始化更大规模的模型,目的是让未训练的模型参数保留部分理解能力。
这个思路借鉴了 DeepMind 的 Gopher 和微软的 Phi-2,但这是首次将其系统应用于 SLM 训练优化,并取得了显著效果。
深度维度扩展(层数扩展):
以 22 层的 ModernBERT-base 作为基座模型。
借鉴 Gopher 的深度初始化策略,将模型扩展到 28 层。
新增的 6 层 (23-28 层) 直接继承了基座模型对应层的权重,实现深度的快速扩展。
宽度维度扩展(参数量扩展)
每层的权重矩阵采用 Phi-2 的中心平铺方法。
将基座模型的权重矩阵放置在 ModernBERT-large 权重矩阵的中心位置。
边缘区域则通过循环填充基座模型的参数进行初始化。
这种初始化策略策略的核心优势在于:ModernBERT-large 无需从零训练,而是通过利用小版本模型已学习到的知识,从而实现模型的热启动(Warm Start)。实践证明,这种方法在扩展较大规模的语言模型时非常有效。
我们观察到,热启动模型能快速从参数激增导致的高初始损失中恢复,迅速逼近基座模型的损失水平。通过该方法,能够将 4.17 亿参数的模型扩展超 3 倍,且性能始终优于同规模的从头训练的模型。并且,这种优势不仅体现在训练初期,而是贯穿整个训练周期。
——《Scaling Language Models: Methods, Analysis & Insights from Training Gopher》
循环权重封装不仅是为了方便,更因为它完美契合了注意力矩阵天然具备的周期性特征。Gopher 团队的研究发现,对于参数在 90 亿以下的小型语言模型(SLMs),这种方案能真正发挥威力。但随着模型规模增大,其优势会逐渐减弱。
ModernBERT 的代码建模
ModernBERT 基于其代码优化的分词器和训练数据,在代码理解方面取得了显著进展。这种针对代码处理的微调,在理解和检索任务中均取得了显著性能提升。
我们基于 CodeSearchNet 数据集进行了对比实验,评估模型根据自然语言描述检索对应代码片段的能力。实验中,我们依然是选取了 3 个模型:ModernBERT
、jina-XLM-RoBERTa
和 RoBERTa-large
。结果表明,ModernBERT 在绝大多数子任务中均处于领先地位。
从技术角度分析,jina-XLM-RoBERTa
和 RoBERTa-large
在预训练阶段均未接触编程语言数据,而 ModernBERT-large 则训练了 2 万亿个 token,其中包含了大量代码。这种对编程语法和模式的接触,使其在代码相关任务中拥有明显优势。
而 jina-XLM-RoBERTa
相对 RoBERTa-large
的微弱优势,可能源于其多语言数据带来的隐式模式泛化能力。
分词器的优势
ModernBERT 在代码处理方面表现优秀,原因在于它采用了专门针对代码训练的 OLMo Tokenizer,而不是传统 BERT/RoBERTa Tokenizer。
作为模型处理文本的核心组件,分词器承担着将原始文本转化为向量表示的关键任务。其工作原理是通过学习常见字符组合模式,将文本切分为具有语义价值的词元(token),再映射成向量表示,这些词元向量才是模型实际处理的基本单元。
相较于传统分词器可能将代码标识符(如 init
)错误切分为 in+it,导致语义完整性受损,ModernBERT 的分词器能完整保留编程语义单元,形成符合代码逻辑的词元切分边界。
在处理代码结构特征方面,ModernBERT 也表现出色,以空格处理为例:
对于 Python 等依赖缩进的语言,它可以把前导空格编码为独立 token,能区分 4 空格与 8 空格的缩进层级。相比之下,jina-XLM-RoBERTa
会将连续空格压缩为 _ 符号,而 RoBERTa-large
每个空格都视为独立的 token。
这种差异直接影响了模型输入质量:ModernBERT 获得的是精准连贯的代码表征,而其他模型处理的则是碎片化、语义模糊的词元序列,最终导致代码理解效果存在显著差异。
ModernBERT 的长文本处理能力
ModernBERT 在长文本建模领域实现技术突破,其核心优势源于:① 基于 3000 亿 token 超大规模语料构建的长文档训练体系(8192 token 长样本占比超四成)② 融合全局-局部感知的混合注意力架构。
为验证模型性能,我们在 MLDR 多语言长文本建模基准测试集(涵盖 13 种语言)开展对比实验。受限于当前版本的语言支持,我们只选取英语子集,此外实验对象限定为同属 8K 长上下文处理能力的 ModernBERT 与 jina-XLM-RoBERTa
(RoBERTa-large 因 512 token 长度限制未纳入对比)。
ModernBERT 的性能优势不仅源于大量的长文本训练数据,杀手锏在于其独创的注意力双轨机制。和 jina-XLM-RoBERTa
在每层都铺满计算成本高昂的全局注意力不同,ModernBERT 采用了更高效的交替策略:每 3 层部署全局注意力,RoPE 旋转基数 θ = 16 万,其余层则采用 128 token 滑动窗口的局部注意力,θ = 10 万。
这种混合交替的注意力架构在维持模型性能的同时,显著降低了计算复杂度。实验数据显示,其训练时间较全局注意力方案减少约 40%,为长文本模型的实用化提供了新范式。
完整实现参见论文:https://arxiv.org/pdf/2412.13663
苦涩的教训?
传统认知里,AI 的发展范式始终被「Scaling Law」和「Bitter Lesson」所主导 —— 人们坚信,模型性能的突破必须依赖参数规模与训练数据的同步扩张。
这一理念也深刻影响了我们的技术路径选择,从语料库的持续拓展到采用 LoRA 进行任务适配的策略,处处彰显着"大力出奇迹"的研发惯性。
但 ModernBERT 的横空出世打破了这一迷思,它证明了 SLM 可以凭借创新的架构设计实现卓越的结果,而不一定要扩大参数规模。
最新发布的 Stella Embeddings 技术报告进一步印证:通过提升数据利用效率,现有规模的嵌入模型仍有巨大优化空间,根本无需盲目扩张语料库或堆砌参数。
🔗: https://arxiv.org/pdf/2408.11868
图中展示了英语任务中 MTEB 评测指标与向量模型参数量的关系。每个点代表一个向量模型,其中多语言模型以青色标注。值得注意的是,jina-embeddings-v3
在同等规模模型中表现突出,相较于前代v2版本实现了超线性提升。
展望未来,随着数据使用效率的提升和 ModernBERT 技术的成熟,模型的计算成本和体积都有望继续降低。短期来看,我们可以直接引入论文中提到的轻量级改进方案:比如增加代码训练数据的比例,使用更适合编程语言的分词器。中期,考虑重构转向深而窄的架构,探索较小模型引导大模型的蒸馏技术。
当多模态嵌入模型逐渐成为基础设施之际,如何构建更智能、更快速、且具备多模态处理能力的搜索基座模型,已成为我们面临的长期挑战。这类应用不仅要求模型具备跨模态理解能力,还需要突破超长上下文窗口的效率瓶颈,这仍是亟待解决的技术难点。
结论
在本文中,我们探讨了 ModernBERT 推动 BERT 模型发展的 3 个关键创新:深而窄的架构设计、分词器的优化以及权重平铺的扩展策略。
该模型在仅 1.4 亿参数规模下,性能全面超越参数量达 3.55 亿的 RoBERTa-large
和跨语言标杆 jina-XLM-RoBERTa
,揭示了模型架构优化可能比单纯扩大参数规模更具价值。
特别值得一提的是权重平铺技术的成功实践,这种渐进式扩展策略在降低 40% 训练成本的同时,竟还能提升模型性能。加之其紧凑型词汇表和精准优化的组合拳,为资源受限场景下的专用小型语言模型(SLMs)打开了新天地,当硬件红利期逐渐消退时,算法层面的创新正在成为新的破局点。