![]()
北航、人大和九坤投資共同撰寫的論文 《Scaling Laws for Code: Every Programming Language Matters》 整理而成。
在代碼大模型(Code LLMs)的預(yù)訓(xùn)練中,行業(yè)內(nèi)長(zhǎng)期存在一種慣性思維,即把所有編程語言的代碼都視為同質(zhì)化的文本數(shù)據(jù),主要關(guān)注數(shù)據(jù)總量的堆疊。然而,現(xiàn)代軟件開發(fā)本質(zhì)上是多語言混合的,不同語言的語法特性、語料規(guī)模和應(yīng)用場(chǎng)景差異巨大。如果忽略這些差異,籠統(tǒng)地應(yīng)用通用的 Scaling Laws,往往會(huì)導(dǎo)致性能預(yù)測(cè)偏差和算力浪費(fèi)。
為了打破這一黑盒,研究團(tuán)隊(duì)耗費(fèi)了相當(dāng)于 33.6 萬個(gè) H800 GPU 時(shí),進(jìn)行了超過 1000 次實(shí)驗(yàn)。研究覆蓋了從 0.2B 到 14B 的模型參數(shù)規(guī)模,以及高達(dá) 1T 的訓(xùn)練數(shù)據(jù)量,系統(tǒng)性地對(duì) Python、Java、JavaScript、TypeScript、C#、Go、Rust 這七種主流語言進(jìn)行了解構(gòu)。這項(xiàng)工作的核心貢獻(xiàn)在于建立了區(qū)分語言特性的 Scaling Laws,并據(jù)此提出了一套數(shù)學(xué)可解的最優(yōu)數(shù)據(jù)配比方案。
![]()
- 論文:《Scaling Laws for Code: Every Programming Language Matters》
- 論文鏈接:https://arxiv.org/abs/2512.13472
![]()
圖 1:論文提出的多語言 Scaling Law 與傳統(tǒng)均勻分布基線的 Loss 對(duì)比。藍(lán)色曲線顯示,基于本文方法優(yōu)化的模型在相同算力下能持續(xù)獲得更低的 Loss)
語言特異性:Python 潛力巨大,Rust 快速收斂
![]()
![]()
![]()
![]()
圖 2:七種編程語言各自獨(dú)立的 Scaling Law 曲線。可以看到 Python(左上)的曲線斜率更陡峭,而 Rust(右下)則更早趨于平緩)
協(xié)同效應(yīng)矩陣:語言間的 “近親繁殖” 與 “非對(duì)稱互助”
在實(shí)際預(yù)訓(xùn)練中,我們很少只訓(xùn)練單語言模型。那么,混合多種語言訓(xùn)練是否存在 “協(xié)同效應(yīng)”(Synergy)?研究團(tuán)隊(duì)構(gòu)建了一個(gè)詳盡的協(xié)同增益矩陣,量化了引入輔助語言對(duì)目標(biāo)語言性能的影響。
實(shí)驗(yàn)發(fā)現(xiàn),絕大多數(shù)語言都能從多語言混合訓(xùn)練中獲益,且收益大小與語法相似度高度相關(guān)。例如,Java 與 C#、JavaScript 與 TypeScript 這類語法結(jié)構(gòu)高度相似的語言對(duì),在混合訓(xùn)練時(shí)表現(xiàn)出極強(qiáng)的正向遷移效果。
更有趣的是,這種遷移往往是非對(duì)稱的。Java是多語言訓(xùn)練的最大受益者,幾乎與任何語言混合都能大幅降低其 Loss,這可能是因?yàn)?Java 作為成熟的面向?qū)ο笳Z言,能從其他語言的范式中汲取通用邏輯。而Python雖然是代碼領(lǐng)域的通用 “供體”(幫助其他語言提升),但其自身從其他語言獲得的收益卻相對(duì)有限,甚至在某些混合比例下會(huì)出現(xiàn)輕微的負(fù)遷移。這一發(fā)現(xiàn)提示我們,在構(gòu)建語料庫時(shí)需要精細(xì)設(shè)計(jì)混合策略,而非盲目地 “大雜燴”。
![]()
表 1:協(xié)同增益矩陣。紅色越深代表輔助語言(列)對(duì)目標(biāo)語言(行)的提升越大。Java 所在的行顯示出它能從所有輔助語言中獲得顯著收益)
跨語言對(duì)齊策略:并行配對(duì)激發(fā) Zero-Shot 能力
除了單語言生成,跨語言翻譯(如 Java 轉(zhuǎn) Python)也是代碼模型的重要能力。論文對(duì)比了兩種數(shù)據(jù)組織策略:傳統(tǒng)的“隨機(jī)打亂”(Random Shuffling)和“并行配對(duì)”(Parallel Pairing)—— 即將一段代碼與其翻譯版本拼接在同一個(gè) Context 中輸入模型。
實(shí)驗(yàn)結(jié)果表明,并行配對(duì)策略在所有模型規(guī)模上均顯著優(yōu)于基線。這種策略實(shí)際上利用了模型的長(zhǎng)上下文窗口,構(gòu)建了隱式的文檔級(jí)對(duì)齊信號(hào)。更關(guān)鍵的是,這種策略激發(fā)了模型在Zero-Shot(零樣本)方向上的泛化能力。例如,模型僅訓(xùn)練了 Python?Java 和 Python?Go 的配對(duì)數(shù)據(jù),但在測(cè)試從未見過的 Java?Go 翻譯任務(wù)時(shí),基于并行配對(duì)訓(xùn)練的模型表現(xiàn)出了驚人的組合泛化能力。這證明了通過構(gòu)建以 Python 為樞紐的平行語料,可以有效拉齊不同編程語言的向量空間。
![]()
圖 4:三種策略在跨語言翻譯任務(wù)上的表現(xiàn)對(duì)比。綠色線條代表的并行配對(duì)策略(Prompt-based Concatenation)在各方向上均取得最低 Loss)
最優(yōu) Token 分配指南:基于邊際效用的經(jīng)濟(jì)學(xué)
基于上述發(fā)現(xiàn),論文提出了“科學(xué)配比的多語言 Scaling Law”(Proportion-dependent Multilingual Scaling Law)。這不僅是一個(gè)理論公式,更是一套指導(dǎo)算力投資的行動(dòng)指南。
在總算力固定的約束下,傳統(tǒng)的均勻分配并非最優(yōu)解。最優(yōu)策略應(yīng)遵循邊際效用最大化原則:
- 重倉高潛力語言:大幅增加Python的 Token 占比,因?yàn)樗?Scaling 指數(shù)高,投入更多數(shù)據(jù)能帶來持續(xù)的性能爬坡。
- 平衡高協(xié)同組合:利用JavaScriptTypeScript的互補(bǔ)性,保持兩者適度的比例以最大化協(xié)同增益。
- 削減早熟語言投入:適當(dāng)減少RustGo的數(shù)據(jù)占比。因?yàn)樗鼈兪諗靠欤^多的數(shù)據(jù)投入只會(huì)帶來邊際收益的快速衰減,不如將這部分算力轉(zhuǎn)移給更難學(xué)的語言。
實(shí)驗(yàn)驗(yàn)證顯示,采用這種 “引導(dǎo)式分配” 策略訓(xùn)練出的 1.5B 模型,在多語言代碼生成(MultiPL-E)和翻譯任務(wù)上,均穩(wěn)定優(yōu)于均勻分配的基線模型,且沒有任何一種語言因數(shù)據(jù)減少而出現(xiàn)顯著的性能退化。
![]()
圖 5:基線策略 vs 優(yōu)化后的 Token 分配方案。基于 Scaling Law 的建議大幅增加了 Python(藍(lán)色)的占比,同時(shí)削減了 Rust(橙色)和 Go(青色)的占比)
總結(jié)與啟示
這項(xiàng)工作是代碼大模型領(lǐng)域一次重要的 “去魅” 過程。它用詳實(shí)的數(shù)據(jù)證明,編程語言在模型訓(xùn)練的視角下絕非同質(zhì)。
對(duì)于致力于訓(xùn)練 Code LLM 的團(tuán)隊(duì)而言,這意味著數(shù)據(jù)工程的重點(diǎn)應(yīng)從單純的 “清洗與去重” 轉(zhuǎn)向更宏觀的 “成分配比”。理解不同語言的 Scaling 特性(是像 Python 一樣潛力巨大,還是像 Rust 一樣迅速飽和)以及它們之間的協(xié)同關(guān)系,能夠幫助我們?cè)谟邢薜乃懔︻A(yù)算下,訓(xùn)練出綜合代碼能力更強(qiáng)的基座模型。這不僅是算法的優(yōu)化,更是資源配置效率的提升。
特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺(tái)“網(wǎng)易號(hào)”用戶上傳并發(fā)布,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.