NeoBERT:新一代编码器,具有 4K 标记上下文长度,在 MTEB 上优于 RoBERTa 等更大的模型!
论文链接:https://arxiv.org/pdf/2502.19587
摘要
NeoBERT 是下一代双向编码器;它融合了最先进的架构、现代数据和优化的预训练,在编码器和强大的自回归语言模型之间架起了一座桥梁。NeoBERT 支持 4096 个词块的上下文长度,并保持 250M 的紧凑参数大小。尽管体积很小,但它在 MTEB 基准测试中取得了最先进的结果,在相同的微调条件下超过了更大的模型。
架构
NeoBERT 在架构上进行了多项改进,以提高效率和性能:
- 研究表明,大多数早期语言模型都存在 "深度低效 "问题,而 BERT 和 RoBERTa 等较小的模型则面临 "宽度低效 "问题。NeoBERT 保留了 BERTbase 的 768 宽度,但增加了深度。
- 传统的绝对位置嵌入法难以处理长序列。NeoBERT 使用旋转位置嵌入法来实现更好的外推,并支持RoPE Extension,以有效处理扩展上下文。
- NeoBERT 使用 RMSNorm 对残差连接进行层前归一化。
- NeoBERT 用 SwiGLU 取代了 GELU,这是一种更高效的激活函数,可用于 LLaMA 等模型。
数据
- NeoBERT 在 RefinedWeb 上进行了预训练,这是一个拥有 600B 标记的海量数据集,比 RoBERTa 的语料库大 18 倍。
- NeoBERT 有两个阶段的预训练:首先,对序列长度为 1024 个标记的 100 万步(2T 个标记)进行训练,然后再对 50K 步(100B 个标记)进行训练,将最大序列长度增加到 4096 个标记。
- 额外的子数据集用于让 NeoBERT 接触更长的序列,确保在训练过程中序列长度的混合。
Pre-training
以 RoBERTa 为例,NeoBERT 只对掩码语言建模进行预训练,掩码率为 20%。它在 2.1T 标记上进行了预训练。为了提高效率,它使用了 DeepSpeed ZeRO、FlashAttention 和融合运算符(xFormers),确保维度与 GPU 架构一致(64 的倍数),并消除偏差以简化计算。
消融
最大的改进包括替换数据集(+3.6% GLUE)和扩大模型规模(+2.0% GLUE)。
实验
尽管与同类大型模型相比,NeoBERT 的参数少了 1 亿到 1.5 亿个,但得分率却达到了 89.0%,与之前最先进模型的性能不相上下。GLUE 基准虽然已经过时,但为了便于与之前的编码器进行比较,还是进行了报告。
MTEB 基准是一个更现代、更具挑战性的基准,涵盖 7 个任务和 56 个英语数据集。传统的掩码语言模型在直接嵌入评估时会遇到困难,而 NeoBERT 则不同,它采用了与模型无关的对比微调策略,以确保比较的公平性。NeoBERT 在包含 900 万个查询-文档对的数据集上进行对比学习训练,其中包括硬否定和批内否定。训练步数超过 2,000 步后,效果微乎其微。
NeoBERT 在 MTEB-English 上的表现优于所有大型基线模型,尽管参数较少,但比第二好的模型相对提高了 4.5%。
Q&A
Q: 这篇论文试图解决什么问题?
A: 这篇论文试图解决的问题是:尽管自回归语言模型(如LLaMA和DeepSeek)在架构、预训练和微调方面取得了显著进展,展现出强大的上下文学习和推理能力,但编码器模型(如BERT和RoBERTa)作为许多下游自然语言处理(NLP)应用的基础,却没有取得同等水平的进步。BERT和RoBERTa尽管已有五年历史,但由于其知识逐渐过时,且在架构和预训练方法上存在局限性,因此需要一种新型的编码器模型来弥补这一差距,以更好地支持下游任务。
具体来说,论文指出以下几点问题:
-
编码器的局限性:BERT和RoBERTa等编码器在架构和预训练方法上存在局限性,导致它们在处理长文本和复杂任务时表现不佳。
-
预训练数据的过时:现有的编码器预训练数据集相对较小且过时,无法充分利用最新的大规模数据集来提升模型性能。
-
微调阶段的复杂性:尽管在微调阶段取得了一些进展,但这些方法通常依赖于复杂的对比学习策略,难以复现且计算成本高昂。
-
模型规模与效率的平衡:现有的大型编码器模型虽然性能较好,但参数过多,导致计算效率低下,难以在实际应用中广泛采用。
为了解决这些问题,论文提出了NeoBERT,这是一个新一代的编码器模型,它集成了最新的架构改进、现代数据集和优化的预训练方法,旨在提升编码器的性能和效率,同时保持与现有模型的兼容性。
Q: 有哪些相关研究?
A: 论文中提到了以下相关研究:
架构改进
-
Transformer架构的优化:Levine等人(2020)提出了Transformer的最优深度与宽度比,指出大多数语言模型处于“深度效率低下”的状态,而小型语言模型如BERT、RoBERTa和NomicBERT则处于“宽度效率低下”的状态。因此,NeoBERT通过增加深度来实现最优的深度与宽度比。
-
位置编码的改进:Su等人(2023)提出了旋转位置编码(RoPE),将相对位置信息直接集成到自注意力机制中,改善了模型对长序列的泛化能力。NeoBERT采用了RoPE来替代传统的绝对位置编码。
-
层归一化的改进:Xiong等人(2020)发现预归一化(Pre-LN)可以提高模型的稳定性,允许使用更大的学习率,并加速模型收敛。NeoBERT采用了预归一化,并用RMSNorm替代了传统的LayerNorm,以进一步提高计算效率。
-
激活函数的改进:Shazeer(2020)展示了在Transformer架构中使用门控线性单元(GLU)的好处。NeoBERT采用了SwiGLU激活函数,并相应地调整了隐藏单元的数量以保持参数数量不变。
数据集的改进
-
数据集规模和多样性的提升:Baevski等人(2019)表明,增加数据量可以提高下游任务的性能。RoBERTa(Liu等人,2019)通过在更大的数据集上进行预训练,显著提升了性能。NeoBERT进一步扩展了数据集规模,使用了包含6000亿个标记的RefinedWeb数据集。
-
数据集的时效性:NomicBERT(Nussbaum等人,2024)使用了2023年的数据集,而NeoBERT也采用了2023年的数据集,以确保模型能够学习到最新的知识。
预训练方法的改进
-
预训练目标的简化:RoBERTa(Liu等人,2019)发现去掉下一句预测(NSP)任务并不会损害性能。因此,NeoBERT仅使用掩码语言建模(MLM)作为预训练目标。
-
掩码率的优化:Wettig等人(2023)挑战了BERT和RoBERTa中15%掩码率的普遍假设,发现对于基础模型,20%的掩码率更为合适。NeoBERT采用了20%的掩码率。
-
优化器和学习率调度器的选择:NeoBERT采用了AdamW优化器(Loshchilov和Hutter,2019)和余弦衰减学习率调度器,这些方法在现代语言模型中已被广泛采用。
-
预训练规模的扩大:LLaMA家族(Touvron等人,2023;Dubey等人,2024)表明,语言模型可以从在更多标记上进行训练中受益。NeoBERT在2万亿个标记上进行了预训练,显著超过了RoBERTa和NomicBERT。
微调方法的改进
-
对比学习的发展:SimCSE(Gao等人,2022)提出了一种简单的对比学习方法,通过引入噪声来生成正样本对。GTE(Li等人,2023b)进一步引入了更复杂的对比学习技术,包括弱监督阶段和半监督阶段。CDE(Morris和Rush,2024)通过将具有相关上下文的样本分组到同一批次中,并为整个语料库提供上下文嵌入,进一步提升了性能。
-
任务特定的适配器:Jina-embeddings(Sturua等人,2024)引入了任务特定的低秩适配器(LoRA),以更好地适应特定任务。
这些相关研究为NeoBERT的设计和改进提供了理论基础和实践指导,使其能够在架构、数据和预训练方法上进行全面的优化。
Q: 论文如何解决这个问题?
A: 论文通过提出 **NeoBERT**,一个新一代的编码器模型,来解决现有编码器在架构、数据和预训练方法上的局限性。NeoBERT 的设计和实现主要从以下几个方面解决问题:
1. 架构改进
-
深度与宽度的优化:NeoBERT 采用了最优的深度与宽度比,通过增加模型的深度而不是宽度来提升性能,同时保持与现有基础模型的兼容性。具体来说,NeoBERT 将层数从 12 层增加到 28 层,而隐藏层大小保持为 768,从而在不改变模型宽度的情况下提升性能。
-
位置编码的改进:NeoBERT 采用了旋转位置编码(RoPE),这种编码方式能够更好地处理长序列,并且在扩展到更长的上下文时表现出色。此外,NeoBERT 还兼容 Yet Another RoPE Extension (YaRN),进一步提升了对长序列的支持。
-
层归一化的改进:NeoBERT 采用了预归一化(Pre-LN)和 Root Mean Square Layer Normalization (RMSNorm),这些改进提高了模型的稳定性和训练效率。
-
激活函数的改进:NeoBERT 使用了 SwiGLU 激活函数,并相应地调整了隐藏单元的数量,以保持参数数量不变,同时提升模型的表达能力。
2. 数据集的改进
-
大规模数据集的使用:NeoBERT 使用了 RefinedWeb 数据集,这是一个包含 6000 亿个标记的大型数据集,远大于 RoBERTa 使用的数据集。这使得 NeoBERT 能够学习到更广泛的知识和语言模式。
-
数据集的时效性:NeoBERT 使用了 2023 年的数据集,确保模型能够学习到最新的知识,从而更好地适应现代语言和任务的需求。
3. 预训练方法的改进
-
预训练目标的简化:NeoBERT 仅使用掩码语言建模(MLM)作为预训练目标,去掉了下一句预测(NSP)任务,这与 RoBERTa 的改进一致。
-
掩码率的优化:NeoBERT 将掩码率从 15% 提高到 20%,这一调整基于最新的研究发现,更高的掩码率可以更好地训练模型。
-
优化器和学习率调度器的选择:NeoBERT 使用了 AdamW 优化器和余弦衰减学习率调度器,这些方法在现代语言模型中已被广泛采用,能够提高训练的稳定性和效率。
-
预训练规模的扩大:NeoBERT 在 2 万亿个标记上进行了预训练,显著超过了 RoBERTa 和 NomicBERT。这使得 NeoBERT 能够学习到更丰富的语言模式和知识。
4. 微调方法的改进
-
标准化的微调策略:为了公平地评估预训练的效果,NeoBERT 采用了标准化的对比学习微调策略。所有模型都使用相同的微调方法和超参数进行训练,从而确保了在 MTEB 基准测试中的公平比较。
-
两阶段训练策略:NeoBERT 采用了两阶段训练策略,首先在 1024 个标记的序列长度上进行训练,然后扩展到 4096 个标记的序列长度。这种策略不仅提高了模型对长序列的处理能力,还保持了训练的高效性。
5. 实验验证
-
GLUE 基准测试:NeoBERT 在 GLUE 基准测试中取得了与大型模型相当的性能,同时模型参数更少,支持的序列长度更长。
-
MTEB 基准测试:NeoBERT 在 MTEB 基准测试中表现优异,超过了所有现有的预训练模型,证明了其在多种任务上的强大性能。
-
效率评估:NeoBERT 在处理长序列时的效率显著高于其他模型,如 ModernBERT,这使得其在实际应用中更具优势。
通过这些改进,NeoBERT 不仅在性能上达到了新的高度,还在效率和兼容性方面表现出色,为自然语言处理领域提供了一个强大的新一代编码器模型。
Q: 论文做了哪些实验?
A: 论文中进行了以下实验:
1. GLUE基准测试
-
目的:评估NeoBERT在自然语言理解任务上的性能,并与现有的编码器模型(如BERT、RoBERTa等)进行比较。
-
方法:在GLUE基准测试的开发集上对NeoBERT进行微调,并使用标准的超参数搜索方法来优化性能。
-
结果:NeoBERT在GLUE基准测试中取得了89.0%的平均分数,与大型模型(如RoBERTa-large和DeBERTa-v3)相当,但参数更少(250M参数),且支持的序列长度更长(4096个标记)。
2. MTEB基准测试
-
目的:评估NeoBERT在文本嵌入任务上的性能,并与现有的最佳开放源代码嵌入模型进行比较。
-
方法:采用统一的对比学习微调策略,对所有模型进行相同的微调处理,然后在MTEB基准测试的英语子集上进行评估。
-
结果:NeoBERT在MTEB基准测试中表现最佳,平均分数为51.3%,比第二好的模型(ModernBERT)高出4.5%。尽管NeoBERT的参数比大型基线模型少100M,但它在所有任务类型中都表现优异。
3. 长序列建模能力评估
-
目的:验证NeoBERT在处理长序列时的性能,特别是经过额外的预训练步骤后。
-
方法:从英语维基百科的子集中随机抽取2,467个长序列,并计算每个序列的伪困惑度(pseudo-perplexity)。
-
结果:NeoBERT1024(仅在长度为1024的序列上训练)能够有效地泛化到接近3000个标记的上下文长度。经过额外的50k训练步骤后,NeoBERT4096能够成功地建模更长的序列,证明了两阶段训练策略的有效性。
4. 模型效率评估
-
目的:评估NeoBERT在不同序列长度下的推理效率,并与现有模型(如BERT、RoBERTa和ModernBERT)进行比较。
-
方法:构建一个包含最大长度序列(512、1024、2048、4096和8192)的合成数据集,并在单个A100 GPU上进行推理,报告每个模型在不同序列长度下的最高吞吐量。
-
结果:对于长度超过1024的序列,NeoBERT显著优于ModernBERT-base,尽管NeoBERT的参数更多(250M参数),但其在4096个标记的序列上实现了46.7%的速度提升。
5. 架构改进的消融研究
-
目的:验证NeoBERT中各项改进对性能的影响,并选择最优的模型配置。
-
方法:从一个类似BERT-base的基础模型(M0)开始,逐步引入改进(如RoPE、SwiGLU、RMSNorm等),并训练10个不同的模型。每个模型都在GLUE基准测试上进行评估,以确定每项改进的效果。
-
结果:在GLUE基准测试中,数据集规模的增加(M2)和模型参数的增加(M7)对性能提升最为显著,分别带来了3.6%和2.9%的相对改进。其他改进(如RoPE、SwiGLU和RMSNorm)也对性能有积极影响,尽管某些改进(如使用LLaMA BPE分词器)导致了性能下降。
这些实验全面评估了NeoBERT在不同任务和条件下的性能,证明了其在自然语言处理任务中的优越性和效率。
Q: 有什么可以进一步探索的点?
A: 尽管NeoBERT在多个方面取得了显著的进展,但仍有一些可以进一步探索的点,以进一步提升其性能和适用性:
1. 预训练数据集的进一步优化
-
数据质量和多样性:尽管NeoBERT使用了大规模的RefinedWeb数据集,但数据质量的进一步提升可能有助于提高模型性能。例如,可以探索更精细的数据清洗和去重策略,以减少噪声和重复数据。
-
多语言数据集:目前NeoBERT主要使用英语数据集进行预训练。扩展到多语言数据集可以提高模型在跨语言任务中的表现,尤其是在低资源语言上的应用。
-
领域特定数据集:针对特定领域的数据集(如医学、法律、金融等)进行预训练,可以提高模型在这些领域的专业性和准确性。
2. 架构的进一步改进
-
注意力机制的优化:尽管NeoBERT已经采用了RoPE和FlashAttention等技术,但可以进一步探索更高效的注意力机制,如稀疏注意力(Sparse Attention)或分层注意力(Hierarchical Attention)。
-
混合专家模型(Mixture of Experts, MoE):引入MoE架构可以提高模型的表达能力和效率,尤其是在处理大规模数据集时。
-
模型压缩和量化:探索模型压缩和量化技术,以进一步提高模型的推理效率,同时保持或提高性能。
3. 预训练任务的多样化
-
多任务预训练:除了掩码语言建模(MLM),可以探索更多预训练任务的组合,如下一句预测(NSP)、对比学习任务等,以提高模型的泛化能力。
-
自监督学习任务的创新:开发新的自监督学习任务,如基于图的预训练任务或基于语义角色标注的预训练任务,可以进一步提升模型对语言结构的理解。
4. 微调策略的优化
-
自动化超参数调整:目前的微调策略依赖于手动调整超参数。可以探索自动化超参数调整方法,如贝叶斯优化或基于强化学习的超参数调整,以进一步提高微调效果。
-
任务特定的微调策略:针对不同任务开发更精细的微调策略,如使用任务特定的适配器(Adapters)或低秩适配器(LoRA),可以提高模型在特定任务上的表现。
-
零样本和少样本学习:探索零样本和少样本学习策略,以提高模型在数据稀缺任务中的表现。
5. 模型评估和基准测试
-
更全面的基准测试:除了GLUE和MTEB,可以探索更多基准测试,如SuperGLUE、XGLUE等,以更全面地评估模型的性能。
-
跨领域和跨语言评估:评估模型在跨领域和跨语言任务中的表现,以验证其泛化能力和适应性。
-
长期上下文任务的评估:开发更多需要处理长序列的任务,以进一步验证NeoBERT在长序列建模方面的优势。
6. 模型的可解释性和公平性
-
可解释性研究:探索模型的可解释性,如通过注意力可视化、特征重要性分析等方法,以更好地理解模型的决策过程。
-
公平性和偏见研究:评估模型在不同群体和背景下的表现,以确保其公平性和减少偏见。可以开发新的数据集和评估方法,以系统地研究和改进模型的公平性。
7. 模型的部署和应用
-
实时推理优化:探索实时推理优化技术,如模型蒸馏、模型剪枝等,以提高模型在实际应用中的效率。
-
多模态任务的探索:将NeoBERT与其他模态(如图像、语音)结合,开发多模态模型,以处理更复杂的任务,如视觉问答(VQA)和语音识别。
-
行业应用的开发:探索NeoBERT在特定行业(如医疗、金融、教育)中的应用,开发定制化的解决方案,以满足行业需求。
这些进一步探索的方向不仅可以帮助NeoBERT在现有任务上取得更好的性能,还可以拓展其在新任务和新领域的应用,推动自然语言处理技术的发展。
Q: 总结一下论文的主要内容
A: 论文介绍了一种新型的编码器模型 **NeoBERT**,旨在通过集成最新的架构改进、预训练方法和数据集,提升编码器在自然语言处理任务中的性能和效率。以下是论文的主要内容总结:
研究背景
-
自回归语言模型的进步:近年来,自回归语言模型(如LLaMA和DeepSeek)在架构、预训练和微调方面取得了显著进展,展现出强大的上下文学习和推理能力。
-
编码器模型的局限性:尽管编码器模型(如BERT和RoBERTa)是许多下游自然语言处理(NLP)应用的基础,但它们在架构和预训练方法上存在局限性,导致性能提升缓慢。
-
需求:需要一种新型的编码器模型,集成最新的架构和预训练方法,以提升性能和效率。
NeoBERT的提出
-
目标:NeoBERT旨在通过集成最新的架构改进、现代数据集和优化的预训练方法,提升编码器的性能和效率。
-
设计:NeoBERT保持与现有基础模型的兼容性,支持扩展的上下文长度(4096个标记),并且具有紧凑的参数规模(250M参数)。
架构改进
-
深度与宽度的优化:NeoBERT采用最优的深度与宽度比,增加模型深度以提升性能。
-
位置编码的改进:采用旋转位置编码(RoPE)和Yet Another RoPE Extension (YaRN),提升对长序列的支持。
-
层归一化的改进:采用预归一化(Pre-LN)和Root Mean Square Layer Normalization (RMSNorm),提高训练稳定性和效率。
-
激活函数的改进:采用SwiGLU激活函数,提升模型的表达能力。
数据集的改进
-
大规模数据集:使用包含6000亿个标记的RefinedWeb数据集,显著扩大了预训练数据的规模。
-
数据集的时效性:使用2023年的数据集,确保模型能够学习到最新的知识。
预训练方法的改进
-
预训练目标的简化:仅使用掩码语言建模(MLM)作为预训练目标,去掉了下一句预测(NSP)任务。
-
掩码率的优化:将掩码率从15%提高到20%,以更好地训练模型。
-
优化器和学习率调度器的选择:采用AdamW优化器和余弦衰减学习率调度器,提高训练的稳定性和效率。
-
预训练规模的扩大:在2万亿个标记上进行预训练,显著超过了现有的预训练模型。
微调方法的改进
-
标准化的微调策略:采用统一的对比学习微调策略,确保在MTEB基准测试中的公平比较。
-
两阶段训练策略:采用两阶段训练策略,首先在1024个标记的序列长度上进行训练,然后扩展到4096个标记的序列长度,提高模型对长序列的处理能力。
实验验证
-
GLUE基准测试:NeoBERT在GLUE基准测试中取得了89.0%的平均分数,与大型模型相当,但参数更少,支持的序列长度更长。
-
MTEB基准测试:NeoBERT在MTEB基准测试中表现最佳,平均分数为51.3%,超过了所有现有的预训练模型。
-
长序列建模能力评估:NeoBERT能够有效地泛化到接近3000个标记的上下文长度,并在经过额外训练后成功建模更长的序列。
-
模型效率评估:NeoBERT在处理长序列时的效率显著高于其他模型,如ModernBERT,具有更高的吞吐量。
结论
NeoBERT通过集成最新的架构改进、现代数据集和优化的预训练方法,显著提升了编码器的性能和效率。它在GLUE和MTEB基准测试中表现出色,同时保持了紧凑的参数规模和高效的推理能力。NeoBERT的开源代码和模型检查点为研究者和实践者提供了强大的工具,推动自然语言处理技术的发展。
未来工作
-
数据集的进一步优化:探索更高质量和多样化的数据集,以进一步提升模型性能。
-
架构的进一步改进:探索更高效的注意力机制和模型压缩技术。
-
预训练任务的多样化:开发更多预训练任务的组合,以提高模型的泛化能力。
-
微调策略的优化:探索自动化超参数调整和任务特定的微调策略。
-
模型评估和基准测试:开发更全面的基准测试,以更全面地评估模型的性能。
-
模型的可解释性和公平性:研究模型的可解释性和公平性,以确保其在不同群体中的表现。
-
模型的部署和应用:探索模型在特定行业和多模态任务中的应用,开发定制化的解决方案。