
社群是國內外知名的機器學習與自然語言處理社群,受眾覆蓋國內外NLP碩博生、高校老師以及企業研究人員。
來源 | 量子位
作者 | 克雷西
用程式碼訓練大模型思考,其他方面的推理能力也能提升。
DeepSeek團隊最新研究,利用300多萬個例項,將程式碼轉換成思考過程,構建出資料集CODEI/O,對Qwen、Llama等模型進行了訓練。

結果,在各種型別的推理任務當中,模型效能都取得了全面提升,包括在非程式碼類的推理任務上,也展現出了良好的遷移能力。

研究團隊認為,在程式碼當中暗含了不同型別場景的思考過程,於是想要把這種思考過程“提取”出來訓練推理模型。
他們生成了大量的訓練資料執行這些程式碼,然後把程式碼、輸入/輸出對以及功能描述輸入DeepSeek-V2.5,從而合成自然語言形式的推理過程。
在此基礎上,團隊還引入了驗證和修訂機制,形成了更高質量的CODEI/O++。

從程式碼中構建思維鏈
首先,作者從CodeMix、PyEdu-R等資料集中收集了80多萬份程式碼檔案,涵蓋多種程式語言(以Python為主),任務型別多樣,並且蘊含了豐富的推理模式。
但是,由於原始程式碼檔案通常缺乏結構化,包含不相關的元素,難以以自包含的方式執行,作者使用DeepSeek-V2.5模型對其進行預處理,將其轉換為統一的格式。
轉換過程中的工作主要包括把核心邏輯功能提取到函式中,新增總結整體邏輯的主入口函式,明確定義主入口函式的輸入/輸出,建立獨立的基於規則的輸入生成器函式,以及基於主入口函式生成簡明的問題陳述作為查詢等等。

接下來,在轉換後的每個函式上,使用輸入生成器取樣多個輸入,並透過執行程式碼獲得相應的輸出,從而收集輸入-輸出對。
這一過程中,部分程式碼出現了超時、複雜度過高、不可執行或結果不確定等情況,這部分程式碼被作者跳過,最終生下了40多萬份程式碼文件,產生了350萬個樣本例項。
然後,作者利用DeepSeek-V2.5,將程式碼、輸入輸出對、功能描述等資訊合成為自然語言思維鏈(CoT),構建訓練樣本。
對於每一個輸入-輸出對,作者首先構建一個輸入提示。這個提示由幾個部分拼裝而成:
-
函式定義:即之前結構化和標準化後的Python函式程式碼。
-
文字描述:用自然語言概括函式的功能和目的。
-
參考程式碼:與函式定義類似,但可能包含一些額外的上下文資訊或註釋。
-
輸入或輸出:根據是輸入預測還是輸出預測任務,提示中會包含具體的輸入或期望的輸出。

將構建好的提示輸入給DeepSeek-V2.5模型,模型會根據提示生成一段自然語言文字作為響應。
這段文字就是作者想要的推理過程——它需要解釋如何從給定的輸入推匯出輸出,或者在給定輸出的情況下如何構造出滿足條件的輸入。
透過這種方式收集的資料集,就是CODEI/O。

在CODEI/O的基礎上,作者進一步利用了程式碼的可執行特性,合成了資料質量更高的CODEI/O++。
作者首先對CODEI/O中生成的所有響應透過重新執行程式碼進行正確性驗證。對於驗證為不正確的響應,作者將執行反饋追加為第二輪輸入資訊,並要求模型重新生成一個響應。
執行反饋包括輸出預測的正誤、輸入預測基於錯誤輸入的執行輸出,以及程式碼執行失敗的錯誤資訊等。
在第二輪生成後,再次檢查新響應的正確性。
無論第二輪結果如何,最終的響應都由四個部分按順序構成:第一輪響應、第一輪反饋、第二輪響應和第二輪反饋。
對於第一輪就正確的響應,第一輪反饋簡單標記為“Success”,且沒有第二輪內容。
與CODEI/O一樣,所有修訂後的響應都會被保留。透過引入基於執行反饋的多輪修正所構建的增強型資料集就是CODEI/O++。

資料集構建完成後,作者採用了兩階段訓練策略對相關模型進行訓練。
第一階段先用CODEI/O或CODEI/O++來訓練推理能力,然後再用通用指令資料集進行微調,教會模型遵循自然語言指令、執行各種任務。
模型推理能力全面提升
為了評估CODEI/O或CODEI/O++的效果,作者一共找來了四個模型來進行測試,分別是Qwen 2.5-7B-Coder、Deepseek v2-Lite-Coder、Llama 3.1-8B和Gemma 2-27B。
測試過程中,作者共選用了10餘個資料集,測試了模型常識、數學、程式碼、物理、工程等領域的表現,具體資料集如下表:

CODEI/O訓練之後,Qwen-Coder在程式碼理解任務上取得了突破性進展,並且在閱讀理解和推理任務(如DROP)上也有明顯提升,這表明透過程式碼訓練獲得的推理能力確實遷移到了其他領域。
DeepSeek-Coder在CODEI/O的訓練下也展現出了均衡的進步,在各個維度上都實現了穩定的改進。
Qwen-Coder和DeepSeek-Coder的表現說明,即使是已經在程式碼領域有專門訓練的模型,也能從這種結構化的推理訓練中獲益。
Llama在LeetCode-O上的效能提升了將近150%,說明即使是引數量較小的模型,透過合適的訓練方法也能在特定任務上獲得較大提升。
而Gemma作為測試中最大的模型,展示了CODEI/O方法在大規模模型上的適用性,在多個關鍵領域取得了進步。
相比於資料量更大的WebInstruct(WI),CODEI/O整體上取得了更好的效果;而相對於專門為某種任務設計的OpenMathInstruct2(OMI2)、PyEdu等方式,CODEI/O體現了更強的通用性。

作者簡介
本文第一作者是來自上海交大的碩士生Junlong Li,目前在DeepSeek實習。
同時他還在香港科技大學助理教授何俊賢的指導下進行研究工作,何俊賢亦是本文的通訊作者。
此外參與了DeepSeek V2、V3以及R1研發的DeepSeek核心研究員、中山大學校友郭達雅也參與了這一專案。
論文地址:
https://arxiv.org/abs/2502.07316
GitHub:
https://github.com/hkust-nlp/CodeIO
資料集:
https://huggingface.co/datasets/hkust-nlp/CodeIO-PyEdu-Reasoning
技術交流群邀請函

△長按新增小助手
掃描二維碼新增小助手微信
關於我們
