早在 2018 年,Google 发布了 BERT,这在 NLP 领域是一个重大突破,远在当前大语言模型浪潮之前。即使现在,许多小型语言模型仍然基于 BERT 构建。2024 年 12 月,ModernBERT 将我们从近期大语言模型发展中获得的经验应用到这些较小的模型中。主要改进?更好的参数效率、代码理解能力和长文本处理能力。
在这篇文章中,我们将比较 ModernBERT 与我们非常熟悉的两个模型:jina-XLM-RoBERTa(jina-embeddings-v3 背后的多语言基础模型)和 RoBERTa-large。让我们来看看每个模型:
- ModernBERT(2024 年 12 月)是最近发布的小型语言模型,由 Answer.AI、LightOn 和 HuggingFace 共同开发。它利用了现代优化技术,如用于 8,192 token 上下文窗口的 RoPE 和 GeGLU layers,在保持效率的同时提升性能。
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 的计划改进。
tagModernBERT 的参数效率
让我们首先研究 ModernBERT 在参数效率方面的方法——它借鉴了最近大语言模型开发的几个关键见解。ModernBERT 利用了三个核心策略:更深但更窄的架构、可控的词汇表大小,以及从较小模型开始的渐进式模型扩展。
tag深而窄的架构
ModernBERT-large 采用了 28 层的更深架构,而 jina-XLM-RoBERTa 和 RoBERTa-large 是 24 层。但有趣的是,尽管增加了层数,它的参数数量与 RoBERTa-large 持平。jina-XLM-RoBERTa 需要更多参数是因为它要处理 89 种语言,而另外两个只专注于英语。
transformer 的大部分参数来自注意力层和全连接层。ModernBERT 通过采用"更窄"的方式保持竞争力——在 28 层中使用 2,624 个隐藏单元,相比之下 RoBERTa-large 在 24 层中使用 4,096 个单元。这种"更深"但更窄的设置使他们能够在不增加模型体积的情况下达到性能目标。
| ModernBERT-large | jina-XLM-RoBERTa |
RoBERTa-large |
|
|---|---|---|---|
| 参数量 | 400M | 550M | 355M |
| 隐藏状态 | 1,024 | 1,024 | 1,024 |
| 中间维度 | 2,624 | 4,096 | 4,096 |
| 注意力头 | 16 | 16 | 16 |
| 层数 | 28 | 24 | 24 |
| 词汇表大小 | 50,368 | 250,002 | 50,265 |
这种方法与 Meta 的 MobileLLM 研究结果相符,该研究发现对于较小的模型来说,在捕捉复杂模式和提升性能方面,深度比宽度更重要。本质上,通过更多 transformer 层处理信息的能力比拥有更宽的层进行并行处理更有价值。
让我们看看这种深而窄架构的性能数据。
| ModernBERT-large | jina-XLM-RoBERTa |
RoBERTa-large |
|
|---|---|---|---|
| STS12 | 72.6 | 72.7 | 68.9 |
| STS13 | 84.9 | 83.9 | 81.0 |
| STS14 | 77.5 | 77.7 | 74.8 |
| STS15 | 84.8 | 85.8 | 84.1 |
| STS16 | 79.4 | 79.6 | 78.6 |
| STS17 | 87.5 | 87.2 | 87.2 |
| TRECCOVID | 61.1 | 59.6 | 49.3 |
| FiQA | 44.4 | 40.0 | 40.7 |
| NFCorpus | 32.6 | 30.6 | 27.9 |
| SciFact | 68.6 | 65.5 | 63.1 |
| 平均值 | 69.3 | 68.2 | 65.6 |
以 jina-XLM-RoBERTa 为例——它在 RoBERTa-large 的浅而宽架构基础上将词汇表从 5 万扩大到 25 万个 token,并训练了更多数据。但 ModernBERT 仍然略胜一筹,这表明架构的改变确实在效率方面产生了实质性的差异。
tag词汇表大小很重要
首先,让我们看看 transformer 中词汇表参数是如何计算的。对于任何 transformer,词汇表参数 = 不同 token 数量 × 隐藏维度。以 jina-XLM-RoBERTa 为例:有 25 万个 token 和 1,024 维度,仅词汇表编码就需要 2.56 亿参数——这还是在处理任何实际语言任务之前!
1,112,064 × 1,024 = 1 B 参数。虽然更大的 LLM(超过 100B 参数)可以处理这种开销,但对于较小的模型来说这是一个严重的限制。这正是我们使用 BPE 等分词器的原因,它可以高效地将常见的 UTF-8 码点合并为单个词元。但关键是:词汇权重不参与注意力机制 - 它们只是查找表。对于在固定参数预算下工作的 SLM,更大的词汇表意味着用于实际语言处理的注意力层可用参数更少。这解释了为什么仅支持英语的 ModernBERT-large 尽管规模较小却优于多语言 jina-XLM-RoBERTa - jina-XLM-RoBERTa 分配了更多参数(47%!)来支持多种语言。ModernBERT 的专注词汇表不仅提高了性能,还加快了推理速度,使其特别适合资源受限的应用。
所以现在如果我们只看核心模型参数(不包括词汇权重),ModernBERT 实际上比其同行具有更强的计算能力:ModernBERT 在实际语言建模上比 jina-XLM-RoBERTa 多 19% 的参数,比 RoBERTa-large 多 15%!
| 模型规格 | ModernBERT-large | jina-XLM-RoBERTa |
RoBERTa-large |
|---|---|---|---|
| 语言支持 | 仅英语 | 89 种语言 | 仅英语 |
| 词汇量大小 | 50.4K | 250K | 50.3K |
| 总参数 | 400M | 550M | 355M |
| 词汇参数 | 51M | 256M | 51M |
| 词汇参数比例 | 13% | 47% | 14% |
| 核心模型参数 | 349M | 294M | 304M |
tag通过"权重平铺"进行模型扩展
在构建 jina-BERT-v2 骨干网络时,我们发现从头开始训练 SLM 需要大量资源且复杂。ModernBERT 通过一种称为权重平铺的智能初始化方法解决了这个问题 - 本质上是从其较小的基础版本的权重引导 ModernBERT-large。
这种技术并不完全是新的 - 它建立在 DeepMind 的 Gopher 工作基础上,在微软的 Phi-2 模型中也有体现。但它在这里的应用对解决 SLM 训练瓶颈特别有效。
这种初始化策略给 ModernBERT-large 带来了显著优势 - 它不是从零开始,而是利用了其较小版本预先学习的模式。它在扩展这个规模范围内的语言模型方面特别有效。
我们发现热启动模型能够从初始的高损失(由于增加的参数)中快速恢复,达到接近基础模型的损失水平。我们能够将 417M 参数扩展超过 3 倍,并保持优于从头开始训练到收敛的等效新模型的性能,这意味着收益不仅限于训练初期。然而,在更大的规模下,收敛时获得的相对收益会减少,特别是在宽度扩展方面。
循环权重包装不仅仅是为了方便 - 它与注意力矩阵自然呈现周期性模式的方式很好地吻合。Gopher 的研究表明,这种方法在 SLM(小于 9B 参数)中特别有效,但随着模型规模增大,这些优势开始减弱。
tagModernBERT 的代码建模
ModernBERT 通过其代码优化的分词器和训练数据,为代码理解带来了专门的方法。这种针对代码处理的微调在理解和检索任务中都取得了成效。
我们使用 jina-embeddings-v2-code 语料库进行了基准测试,比较了三个模型作为骨干:ModernBERT、jina-XLM-RoBERTa 和 RoBERTa-large。测试是什么?CodeSearchNet - 将文本描述与代码片段匹配。ModernBERT 在各个方面都优于其他两个替代方案。
jina-XLM-RoBERTa 和 RoBERTa-large 在训练期间都没有接触过编程语言。同时,ModernBERT-large 训练了两万亿个词元,其中包含大量代码。这种对编程语法和模式的接触使其在代码相关任务中具有明显优势。jina-XLM-RoBERTa 略胜 RoBERTa-large,可能是由于其更大的多语言训练数据 - 相同的架构,更多的接触。尽管如此,两者都明显落后于 ModernBERT-large。| 任务 | ModernBERT-large | jina-XLM-RoBERTa |
RoBERTa-large |
|---|---|---|---|
| AdvRetrieval | 0.342 | 0.363 | 0.331 |
| QueryRetrieval.python | 0.521 | 0.530 | 0.525 |
| QueryRetrieval java | 0.679 | 0.633 | 0.644 |
| QueryRetrieval.javascript | 0.755 | 0.768 | 0.732 |
| QueryRetrieval.php | 0.815 | 0.781 | 0.755 |
| QueryRetrieval.ruby | 0.729 | 0.744 | 0.722 |
| QueryRetrieval.go | 0.833 | 0.809 | 0.796 |
| Retrieval.go | 0.778 | 0.750 | 0.759 |
| Retrieval.java | 0.840 | 0.792 | 0.796 |
| Retrieval.javascript | 0.817 | 0.792 | 0.757 |
| Retrieval.php | 0.852 | 0.805 | 0.796 |
| Retrieval.python | 0.849 | 0.816 | 0.787 |
| Retrieval.ruby | 0.849 | 0.796 | 0.803 |
| Avg. | 0.743 | 0.721 | 0.708 |
tag分词器的优势
让我们深入了解为什么 ModernBERT 能很好地处理代码 - 它使用的是专门针对代码训练的 OLMo tokenizer,而不是标准的 BERT/RoBERTa 分词器。
分词器将 UTF-8 文本分解成映射到向量的 token - 这些才是模型实际处理的内容。在训练过程中,它学会将频繁出现的字符序列组合成单个 token。区别在哪里?标准分词器可能会把 init 分解为 in + it,忽略了编程上下文。但 ModernBERT 的代码感知分词器则可以完整保留它。
在空格处理方面就更有意思了:ModernBERT 将 Python 的前导空格保留为单个 token,并区分 4 个和 8 个空格的差异 - 这对代码结构至关重要。同时,jina-XLM-RoBERTa 将所有连续空格压缩为单个 _,而 RoBERTa-large 则将每个空格都视为独立的 token。 这意味着 ModernBERT 的编码器在处理代码时能获得更清晰、更有意义的输入,而其他模型则要处理破碎、连贯性较差的 token。
tagModernBERT 的长文本处理能力
ModernBERT 在处理长文本方面取得了重大进展,这要归功于其庞大的训练语料库(包含 8,192 token 样本的 300B tokens)和全局与局部注意力相结合的先进技术。
为了评估长文本处理能力,我们使用了 MLDR 数据集 - 这是一个涵盖 13 种语言的综合性长文本基准。由于 ModernBERT 目前仅支持英语,我们专注于 MLDR 的英语子集,对比了 ModernBERT 和 jina-XLM-RoBERTa。虽然这两个模型都能处理 8K token 的输入,但由于 RoBERTa-large 的 512 token 限制不足以进行长文本分析,因此被排除在这次基准测试之外。
| ModernBERT-large | jina-XLM-RoBERTa |
|
|---|---|---|
| MLDR-en | 0.351 | 0.290 |
ModernBERT 的卓越性能不仅仅归功于其广泛的长文本训练 - 很大程度上要归功于其创新的全局和局部注意力机制组合。与在每一层都使用计算成本高昂的全局注意力的 jina-XLM-RoBERTa 不同,ModernBERT 采用了更高效的方法。它在全局注意力(每三层使用一次,theta 为 160,000)和局部注意力(使用 128 token 的滑动窗口,theta 为 100,000)之间交替使用。这种混合策略在保持高性能的同时大大减少了训练时间。
在 ModernBERT 中,每三层会使用一次全局注意力,RoPE theta 为 160,000,其余层使用 128 token 的局部滑动窗口注意力,RoPE theta 为 10,000。—— ModernBERT
tag痛苦的教训?
扩展定律和痛苦的教训表明,性能的主要改进主要来自增加参数数量和训练数据。这一原则指导了我们扩展语料库和使用 LoRA 进行任务特定适应的方法。
然而,ModernBERT 的成功表明我们低估了架构优化的力量。它证明了 SLM 可以通过更好的数据模型效率实现卓越的结果,而不一定要扩大参数规模。最近的一份Stella Embeddings 技术报告强化了这一发现,表明当前的嵌入模型训练方法无需增加语料库或模型规模就可以得到改进。
jina-embeddings-v2也展现出超线性的改进。该图表是通过从 MTEB 排行榜中选取前 100 个嵌入模型创建的,排除了那些没有规模信息的模型(通常是闭源或专有模型)。明显的恶意提交也被过滤掉了。展望未来,随着我们对数据利用的深入理解和 ModernBERT 技术的实施,我们预计计算成本和模型规模都将降低。短期内,我们可以实施 ModernBERT 论文中概述的直接改进 - 特别是整合更多与代码相关的数据并采用代码友好的分词器。更复杂的改变,如转向深而窄的架构或从较小的模型引导大模型,将需要从头开始构建骨干模型 - 这是一个中期计划。
虽然 ModernBERT 的效率令人印象深刻,但其仅限文本的局限性也指向了未来的挑战。随着多模态嵌入模型的普及,我们的下一个挑战是开发更智能、更快速、能力更强的搜索基础模型,以处理多模态应用的输入。这些应用需要更长的上下文窗口 - 这是一个尚待解决的效率挑战。
tag结论
在本文中,我们探讨了 ModernBERT 如何通过三个关键创新推进 BERT 系列模型:深而窄的架构、优化的分词器以及使用权重平铺的高效扩展。这些改进使得 ModernBERT 能够在相对紧凑的规模下提供出色的性能,在各种任务中超越了 RoBERTa-large 和 jina-XLM-RoBERTa。ModernBERT 证明了架构改进可能比参数规模更重要,为更高效的模型开辟了道路。它成功使用权重平铺表明,渐进式扩展可以降低训练成本,同时保持或甚至提升性能。此外,其精简的词汇表和有针对性的优化表明,在资源受限的环境中,专门的 SLM 有着越来越多的机会。








