讓AI替碼農(nóng)卷復(fù)雜任務(wù),賈佳亞團(tuán)隊(duì)提出MoTCoder,準(zhǔn)確率刷新SOTA
論文一作李靖瑤,香港中文大學(xué)博士生(DV Lab),師從賈佳亞教授。主要研究方向是大語(yǔ)言模型,包括模型預(yù)訓(xùn)練、后訓(xùn)練、推理優(yōu)化。作者陳鵬光、夏彬等均為 DV Lab 成員。
大模型寫(xiě)代碼早就是基操了,但讓它寫(xiě)算法競(jìng)賽題或企業(yè)級(jí)系統(tǒng)代碼,就像讓只會(huì)煮泡面的人去做滿漢全席 —— 生成的代碼要么是 “鐵板一塊” 毫無(wú)章法,要么是 “一鍋亂燉” 難以維護(hù)。
如何讓大模型像工程師一樣思考,用模塊化思維拆解復(fù)雜問(wèn)題?
近日,賈佳亞團(tuán)隊(duì)提出 MoTCoder(Module-of-Thought Coder),通過(guò)創(chuàng)新的模塊化思維指令微調(diào)(MoT Instruction Tuning),顯著提升了模型在復(fù)雜編程任務(wù)中的準(zhǔn)確率與可維護(hù)性。實(shí)驗(yàn)顯示,在 APPS 和 CodeContests 等權(quán)威編程基準(zhǔn)上,MoTCoder 的 pass@1 準(zhǔn)確率直接刷新記錄,甚至超越 SOTA 6%,讓大模型在 “瘋狂打碼” 時(shí)更接近「人類(lèi)智慧」。
- 論文標(biāo)題:MoTCoder: Elevating Large Language Models with Modular of Thought for Challenging Programming Tasks
- 論文鏈接:https://arxiv.org/abs/2312.15960
目前,團(tuán)隊(duì)已發(fā)出程序員快樂(lè)包 —— 代碼、模型與數(shù)據(jù)集通通開(kāi)源,歡迎在線體驗(yàn):
- 代碼庫(kù):https://github.com/dvlab-research/MoTCoder
- 32B 模型:https://huggingface.co/JingyaoLi/MoTCoder-32B-V1.5
- 7B 模型:https://huggingface.co/JingyaoLi/MoTCoder-7B-v1.5
- 350K 訓(xùn)練數(shù)據(jù)集:https://huggingface.co/datasets/JingyaoLi/MoT-Code-350K
復(fù)雜編程的解耦神器
當(dāng)前主流代碼生成模型(如 Qwen2.5-Coder)生成的代碼往往就是這種單塊式的結(jié)構(gòu),雖然在簡(jiǎn)單任務(wù)上表現(xiàn)良好,但面對(duì)復(fù)雜場(chǎng)景時(shí)難掩缺陷:
- 拆解復(fù)雜任務(wù):不存在的!讓它寫(xiě)個(gè)分布式系統(tǒng),輸出代碼堪比災(zāi)難現(xiàn)場(chǎng);
- 維護(hù)成本爆炸:生成的代碼注釋比程序員(bu shi)頭發(fā)還少,debug 時(shí)被同事懷疑是祖?zhèn)髦湔Z(yǔ)。
試想象一下,你讓模型寫(xiě)個(gè)自動(dòng)駕駛算法,結(jié)果它吐出幾千行密密麻麻的代碼,像一團(tuán)亂麻根本無(wú)從下手。這就是傳統(tǒng)模型的單塊式代碼 —— 把所有邏輯塞進(jìn)一個(gè)函數(shù),不講章法地一鍋亂燉。
圖 1a: 傳統(tǒng)模型生成的單塊式代碼
而 MoTCoder 則能 “遇招拆招”,把復(fù)雜任務(wù)拆成 “輸入解析”、“核心算法”、“異常處理” 等標(biāo)準(zhǔn)化模塊,像樂(lè)高積木般嚴(yán)絲合縫組裝,每個(gè)模塊還自帶 “說(shuō)明書(shū)”,強(qiáng)迫癥患者看完都直呼舒適!
圖 1b: MoTCoder 生成的模塊化代碼
圖 2:MoTCoder 的兩階段模塊化設(shè)計(jì)流程
MoTCoder 的三大核心突破
(1)性能開(kāi)掛:復(fù)雜任務(wù)準(zhǔn)確率刷新 SOTA
得益于模塊化思維對(duì)復(fù)雜邏輯的拆解能力,在 APPS 數(shù)據(jù)集上,MoTCoder-32B 的 pass@1 超越同等規(guī)模模型 5.8%;在 CodeContests 數(shù)據(jù)集上,MoTCoder-32B 更是直接上演「屠榜」戲碼,超越 SOTA 5.9%!
圖 3:MoTCoder 的戰(zhàn)斗力曲線
(2)大模型代碼質(zhì)檢員
MoTCoder 通過(guò)多輪自我反思機(jī)制,能自動(dòng)檢測(cè)并修正代碼錯(cuò)誤。實(shí)驗(yàn)顯示:
- 未修正狀態(tài)下,MoTCoder 可達(dá)到 SOTA 模型 5 輪人工修正后的效果
- 開(kāi)啟自檢后,準(zhǔn)確率更進(jìn)一步提升 4%
(3)代碼質(zhì)量全面碾壓傳統(tǒng)模型
通過(guò)專(zhuān)業(yè)的代碼質(zhì)量分析工具 Radon 對(duì) APPS 和 CodeContests 數(shù)據(jù)集上的生成代碼進(jìn)行評(píng)估,MoTCoder 在所有難度級(jí)別中都保持了明顯更高的可維護(hù)性指數(shù)(Maintainability Index)。
實(shí)驗(yàn)數(shù)據(jù)顯示,相比普通微調(diào)模型和基線模型,MoTCoder 生成的代碼具有更低的復(fù)雜度、更精簡(jiǎn)的代碼量和更合理的注釋比例。
程序員狂喜:簡(jiǎn)直好用哭了!
圖 4:MoTCoder 生成的代碼具有更優(yōu)的可維護(hù)性特征
智能調(diào)度:簡(jiǎn)單題極簡(jiǎn)模式,難題樂(lè)高模式
這種優(yōu)勢(shì)源于 MoTCoder 的模塊化訓(xùn)練方法,使生成的代碼結(jié)構(gòu)更清晰、邏輯更簡(jiǎn)明。在時(shí)間和內(nèi)存消耗的對(duì)比中(圖 5),MoTCoder 生成的代碼展現(xiàn)出顯著優(yōu)勢(shì)。雖然其運(yùn)行時(shí)間與普通微調(diào)模型相當(dāng),但在內(nèi)存占用上始終低于基準(zhǔn)模型。這得益于 MoTCoder 對(duì)全局變量和函數(shù)局部變量的智能區(qū)分,能夠及時(shí)釋放未使用的內(nèi)存資源。
圖 5:MoTCoder 生成的代碼具有更低的內(nèi)存消耗
圖 6:不同難度的代碼函數(shù)數(shù)量與準(zhǔn)確率關(guān)系
賈佳亞團(tuán)隊(duì)在開(kāi)發(fā)過(guò)程中發(fā)現(xiàn)了一個(gè)有趣的現(xiàn)象(圖 6):
- 入門(mén)題:函數(shù)數(shù)量增加,準(zhǔn)確率反而下降(簡(jiǎn)單問(wèn)題無(wú)需拆解)
- 面試題:函數(shù)數(shù)量變化對(duì)準(zhǔn)確率影響較?。ū3址€(wěn)定)
- 競(jìng)賽題:函數(shù)數(shù)量與準(zhǔn)確率呈正相關(guān)(復(fù)雜問(wèn)題必須模塊化)
MoTCoder 自帶智能調(diào)度系統(tǒng),問(wèn)題復(fù)雜度決定了其模塊化策略:面對(duì)兩行代碼就能搞定的題目,啟動(dòng)極簡(jiǎn)模式;而遭遇代碼量堪比畢業(yè)論文的變態(tài)需求,則秒切樂(lè)高模式。而這種思維方式已達(dá)到人類(lèi)工程師的解題路徑。
這種特性也使得 MoTCoder 可覆蓋從算法競(jìng)賽到工業(yè)級(jí)開(kāi)發(fā)多個(gè)落地場(chǎng)景:
- 算法競(jìng)賽:秒解 Codeforces/LeetCode 難題,生成帶注釋的標(biāo)準(zhǔn)答案;
- 大型系統(tǒng)設(shè)計(jì):自動(dòng)生成微服務(wù)架構(gòu)代碼,接口清晰、模塊解耦;
- 企業(yè)級(jí)應(yīng)用開(kāi)發(fā):生成可長(zhǎng)期維護(hù)性的代碼庫(kù),降低技術(shù)債務(wù)累積速度。
MoTCoder 讓代碼生成從 “功能實(shí)現(xiàn)” 躍遷至 “工程實(shí)踐”,或許是時(shí)候重新定義智能編程了 —— 不僅要生成代碼,更要生成好代碼。賈佳亞團(tuán)隊(duì)表示,將繼續(xù)深化智能編程的研究,并探索其在更多工業(yè)界場(chǎng)景的深度應(yīng)用。