
(本文閱讀時間:5分鐘)
編者按:隨著程式碼大模型能力的不斷增強,高質量指令資料的構造成為釋放其潛力的關鍵。然而,現有方法普遍依賴單一的程式碼片段作為構造種子,限制了資料的複雜度與多樣性。近日,微軟亞洲研究院聯合廈門大學、清華大學提出全新特徵樹驅動的資料合成框架,透過建模程式碼語義層級關係,實現了對合成程式碼複雜度的精細控制,並支援從函式級到多檔案級的多樣任務生成。基於該框架訓練得到的 EpiCoder 模型在多個基準測試上表現突出,展示了其在真實程式設計場景中處理複雜任務的強大能力,為大模型程式碼能力的進一步釋放提供了全新正規化。
隨著大語言模型(LLMs)在程式碼生成任務中的不斷進步,如何進一步挖掘模型的能力,合成或生成複雜且多樣的高質量程式碼資料成為關鍵問題。然而,現有的資料合成方法普遍依賴簡單的程式碼片段作為種子。這些片段雖然能表達特定功能,但難以涵蓋複雜結構、模組間互動或跨檔案邏輯等真實世界場景中常見的程式設計需求。因此,所合成的訓練資料往往缺乏結構性和語義深度,限制了模型在更高層次任務中的泛化能力及表現。
為解決這一問題,微軟亞洲研究院提出了一種全新的特徵樹(Feature Tree)驅動的資料合成框架。該框架從程式碼的“語義特徵”出發,建模其層級關係,重構程式碼知識的組織方式。這一方法不再依賴孤立的程式碼片段,而是透過抽取變數型別、函式結構、控制流等語義特徵,構建出語義層級清晰的特徵樹,從中系統性地生成具備多樣性和複雜性的指令資料。基於該框架,研究員們進一步訓練得到了 EpiCoder 模型。
程式碼連結:
https://github.com/microsoft/EpiCoder
資料鏈接:
https://huggingface.co/datasets/microsoft/EpiCoder-func-380k
論文連結:
https://arxiv.org/abs/2501.04694

不同於傳統依賴語法樹(Abstract Syntax Tree, AST)建模程式碼結構的方法,特徵樹框架聚焦於程式碼元素之間的語義關係。它以一種“從特徵到結構”的方式指導資料的合成過程,提升生成程式碼的多樣性和覆蓋度,更符合真實程式碼庫的組織邏輯。

圖1:特徵樹框架
特徵樹框架由三個關鍵步驟組成:
1. 特徵樹抽取(Feature Tree Extraction):
透過對初始程式碼資料集進行特徵提取和語義聚類,構建出一棵分層的特徵樹。研究員們首先構造了一個結構示例(tree demo)作為引導,讓 LLMs 學會如何從原始程式碼中抽取語義特徵,逐步建立程式碼片段之間的關聯結構。
2. 特徵樹演化(Feature Tree Evolution):
為進一步提升特徵多樣性,研究員們設計了樹的“演化”機制,透過控制樹的深度和廣度,生成語義結構逐漸複雜的子樹。這種樹結構能夠反映現實開發中從函式到模組、從模組到檔案的程式設計構造方式,從而實現了從簡單到複雜任務的自然過渡。
3. 基於特徵樹的資料合成(Feature Tree-Based Code Generation):
在樹結構的指導下,LLMs 可針對某一特徵子樹生成具備特定語義的程式碼例項,實現“按需生成”。不僅如此,研究員們還引入了機率取樣機制,可針對模型薄弱區域有針對性地加強資料覆蓋,提升模型對邊緣特徵的學習效果。

基於上述框架,研究員們構建了超過43萬條指令資料,涵蓋從函式級到檔案級的廣泛任務,並在 Qwen2.5-Coder-7B-Base 和 DeepSeek-Coder-6.7B-Base 兩大主流基礎模型上進行了微調,得到的 EpiCoder 模型在函式級和檔案級測試基準上均取得 SOTA 表現。

圖2:實驗結果

圖3:程式碼倉庫級別生成示例
研究員們還進一步探索了該方法在“程式碼倉庫級”合成任務中的可行性,並透過 “LLM-as-a-judge” 評估正規化,從複雜度與多樣性兩個角度對合成資料進行量化分析,驗證了特徵樹框架在構造真實感資料方面的顯著優勢。

傳統程式碼指令資料合成方法在可控性和語義深度上往往存在明顯短板,而特徵樹方法的引入不僅帶來了資料合成“粒度”的提升,也為未來構建具備可解釋性與系統性的大模型打下了基礎。
基於特徵樹框架訓練得到的 EpiCoder 模型的成功表明,藉助特徵驅動的語義建模方式,可以為程式碼大模型建設更穩健、更高質量的訓練基座。隨著該框架的進一步拓展,其有望在定向知識補全、結構程式碼理解、倉庫自動重構等任務中展現出更廣泛的價值。
你也許還想看:
