ModernBERT 發布說明
ModernBERT 是一個新的僅編碼器模型家族,設計為 BERT 類模型的直接替換。它在速度和準確度方面相較於先前的編碼器提供了帕累托改進,具有 8,192 個標記的序列長度,並在其訓練資料中納入了大量程式碼。
模型變體與可用性
ModernBERT 提供兩種規模:
- Base:1.49 億個參數
- Large:3.95 億個參數
這些模型已整合到 transformers v4.48.0。為了達到最大效率,開發者建議將 ModernBERT 與 Flash Attention 2 一起使用。與早期的 BERT 模型不同,ModernBERT 不使用 token type IDs。
效能與效率
ModernBERT 在檢索、自然語言理解和程式碼檢索任務上優於先前的編碼器模型。
基準測試
- Accuracy:ModernBERT 是第一個在 GLUE 上擊敗 DeBERTaV3 的 base-size 模型,同時僅使用 DeBERTa 記憶體的五分之一以下。
- Speed:對於混合長度輸入,其速度最高可達 DeBERTa 的 4 倍;對於長上下文推理,其速度幾乎是 NomicBERT 和 GTE-en-MLM 等高品質模型的 3 倍。
- Context Length:擁有 8,192 個標記的上下文窗口,ModernBERT 的容量大於多數現有編碼器的 16 倍,顯著提升了 RAG 管線和長上下文檢索的效能。
- Code Retrieval:ModernBERT 是首個在大規模程式碼資料上訓練的編碼器模型,在 StackOverflow-QA (SQA) 資料集上的得分超過 80。
硬體效率
在 NVIDIA RTX 4090 GPU 上進行測試顯示,ModernBERT 對於可變長度輸入展現出卓越的效率。它避免了沉重的 xformers 依賴,僅需 Flash Attention。其設計允許更大的批次大小,使其適合在較小、較便宜的 GPU 上部署,或直接在瀏覽器和手機上運行。
技術架構
ModernBERT 透過納入最近大型語言模型 (LLM) 研究的進展,更新了經典的 Transformer 架構,特別是參考了 Transformer++。
架構改進
- Rotary Positional Embeddings (RoPE):取代舊的位置編碼,以提升相對詞彙理解並實現更長序列的擴展。
- GeGLU 層:取代標準 MLP 層,以改進原始 GeLU 激活函數。
- 對稱與穩定性:架構移除不必要的偏置項,並在嵌入後額外添加一層歸一化以穩定訓練。
效率機制
- 交替注意力:為降低計算複雜度,ModernBERT 每三層僅使用一次全域注意力(關注完整輸入);其他層使用滑動窗口為 128 個標記的局部注意力。
- 去填充與序列打包:ModernBERT 移除填充標記並將序列連結成小批次,以消除浪費的計算。此實現利用 Flash Attention 的 RoPE 支持,相較於先前的去填充方法可提升 10-20% 的速度。
- 硬體感知設計:透過網格搜索優化模型維度,以適應常見的推理 GPU(RTX 3090/4090、A10、T4、L4),同時保持與 BERT 相容的嵌入大小(base 為 768,large 為 1024)。
訓練過程
ModernBERT 在來自多樣化英文來源的 2 兆個標記上進行訓練,包括網頁文件、科學文章和程式碼,減少了對舊編碼器中常見重複資料的依賴。
訓練階段
- 初始階段:在序列長度為 1,024 的情況下,訓練了 1.7 兆個標記。
- 長上下文適應:在序列長度為 8,192 的情況下,訓練了 250 億個標記。
- 退火:最終階段使用基於 ProLong 的抽樣混合,訓練了 50 億個標記。
訓練優化
- 遮罩率:從 15% 提高至 30%。
- 目標:移除 Next-Sentence Prediction (NSP) 目標以降低開銷。
- 批次大小預熱:逐步增加批次大小以加速初始學習。
- 權重平鋪:ModernBERT-Large 透過將 ModernBERT-Base 的權重進行平鋪來初始化,而非使用隨機初始化,這提升了訓練速度和效能。