回到 2018 年,Google 發布了 BERT,這在當時 LLM 浪潮之前就已經是 NLP 的一大突破。即使到現在,許多小型語言模型仍然是基於 BERT 構建的。在 2024 年 12 月,ModernBERT 將我們從近期 LLM 發展中學到的經驗應用到這些較小的模型上。關鍵改進在哪?更好的參數效率、代碼理解能力和長文本處理能力。
在這篇文章中,我們將分析 ModernBERT 與兩個我們非常熟悉的模型的比較:jina-XLM-RoBERTa
(jina-embeddings-v3 背後的多語言骨幹)和 RoBERTa-large
。讓我們看看每個模型:
- ModernBERT(2024 年 12 月)是最近發布的 SLM,由 Answer.AI、LightOn 和 HuggingFace 共同開發。它利用了現代優化技術,如 RoPE 實現 8,192 token 的上下文窗口和 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 在參數效率方面的做法 - 它引入了最近 LLM 發展中的幾個關鍵見解。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
參數僅用於 token 轉換。雖然更大的 LLM(超過 100B 參數)可以處理這種開銷,但對較小的模型來說是一個嚴重的限制。這就是為什麼我們使用 BPE 這樣的分詞器,它可以有效地將常見的 UTF-8 編碼點合併成單個 tokens。但是這裡有一個重點:詞彙權重不會參與注意力機制——它們只是查詢表。對於在固定參數預算下工作的 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 訓練了兩萬億個 tokens,包括大量的程式碼。這種對程式語法和模式的接觸使它在程式碼相關任務中具有明顯優勢。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 文本分解為可映射到向量的詞符 - 這些是模型實際處理的內容。在訓練期間,它會學習將經常出現的字符序列組合成單個詞符。差異在哪裡?標準分詞器可能會將 init
分解為 in
+ it
,忽略了程式設計的上下文。但 ModernBERT 的程式碼感知分詞器可以完整保留它。
關於空格處理,事情變得更有趣:ModernBERT 將 Python 的前導空格保留為單個詞符,並區分 4 個和 8 個空格的差異 - 這對程式碼結構至關重要。而 jina-XLM-RoBERTa
將所有連續空格合併為單個 _
,RoBERTa-large 則將每個空格都視為獨立的詞符。這意味著在處理程式碼時,ModernBERT 的編碼器可以獲得更乾淨、更有意義的輸入,而其他模型則在處理零碎、連貫性較差的詞符。
tagModernBERT 的長文本處理能力
ModernBERT 在處理長文本方面取得了重大進展,這要歸功於其龐大的訓練語料庫(3000 億個詞符,每個樣本包含 8,192 個詞符)以及結合全局和局部注意力等先進技術。
為了評估長文檔處理能力,我們使用了 MLDR 數據集 - 這是一個涵蓋 13 種語言的綜合長文本基準。由於 ModernBERT 目前僅支持英語,我們專注於 MLDR 的英語子集來對比 ModernBERT 和 jina-XLM-RoBERTa
。雖然這兩個模型都能處理 8K 詞符的輸入,但由於 RoBERTa-large
的 512 詞符限制不足以進行長文本分析,因此在這個基準測試中被排除。
ModernBERT-large | jina-XLM-RoBERTa |
|
---|---|---|
MLDR-en | 0.351 | 0.290 |
ModernBERT 的卓越表現不僅歸功於其大量的長文本訓練,更重要的是得益於其創新的全局和局部注意力機制組合。與在每一層都應用計算成本高昂的全局注意力的 jina-XLM-RoBERTa
不同,ModernBERT 採用了更高效的方法。它在全局注意力(每三層使用一次,theta
值為 160,000)和局部注意力(使用 128 詞符的滑動窗口,theta
值為 100,000)之間交替。這種混合策略在保持高性能的同時大大減少了訓練時間。
在 ModernBERT 中,每三層採用全局注意力,RoPE theta 值為 160,000,其餘層使用 128 詞符的局部滑動窗口注意力,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 具有越來越多的機會。