程式碼摘要、生成、翻譯、修復全覆蓋…WaveCoder開啟程式碼智慧新篇章

(本文閱讀時間:7分鐘)
編者按:程式碼大語言模型(Code LLMs)作為大語言模型與程式設計領域結合的產物,可以透過自動生成和補全程式碼幫助開發者快速實現功能。但目前針對程式碼大語言模型的指令微調方法主要集中在傳統的程式碼生成任務上,忽略了模型在處理複雜多工場景中的表現。為此,來自微軟亞洲研究院的研究員們開發了 WaveCoder 模型,其使用包含19,915個指令、涵蓋4個程式碼任務的資料集 CodeSeaXDataset 進行訓練,在程式碼摘要、生成、翻譯、修復等多個程式碼任務的基準測試中顯著優於其他開源模型,具有更強的泛化能力。近期,WaveCoder也已開源,希望可以成為開發者程式設計之旅中的得力夥伴!
大語言模型與程式設計的結合正在開啟程式設計領域的新篇章。在過去一年中,基於程式碼生成的大語言模型備受矚目,程式碼大語言模型(Code LLMs)不僅能夠自動生成和補全程式碼,還能修復錯誤、進行程式碼最佳化,無疑以更高的效率給程式設計領域帶來了深遠影響。
程式碼大模型透過在程式碼資料集上的預訓練和針對特定任務的微調,已經能夠理解使用者的問題並生成相應的解決方案程式碼。然而,在處理多樣化程式設計任務時,現有的程式碼大模型仍然存在著難以理解精確、廣泛的理解指令,生成的程式碼質量不佳等問題。為此,微軟亞洲研究院的研究員們提出了 WaveCoder,透過指令最佳化增強程式碼大語言模型的廣泛性和多功能性。
WaveCoder: Widespread And Versatile Enhancement For Code Large Language Models By Instruction Tuning
論文連結:
https://arxiv.org/pdf/2312.14187
GitHub:
https://github.com/microsoft/WaveCoder
為了使模型能夠處理複雜的程式碼任務,研究員們還提出了一套以開原始碼為基礎的資料合成框架,能夠為特定的程式設計任務生成高質量且多樣化的指令資料。透過這一框架,研究員們成功構建了一個全面而多樣的程式設計資料集 CodeSeaXDataset。CodeSeaXDataset 彙集了從開源專案中精選的程式設計問題及其解決方案,不僅包含多種程式語言,還涵蓋了廣泛的任務型別。
CodeSeaXDataset 資料集彙集了19,915條經過嚴格篩選的指令例項,包含程式設計領域的廣泛主題。這個資料集的高質量和多樣性為 WaveCoder 在程式碼摘要、生成、翻譯和修復等多個程式設計任務上的訓練提供了堅實的支撐。
表1:CodeSeaXDataset 中各種程式碼相關任務的詳細細節
研究員們認為,高質量、多樣的資料是提升機器學習模型效能的核心要素。CodeSeaXDataset 資料集的豐富內容能使 WaveCoder 深入理解多工場景下的使用者指令,從而在各種程式設計挑戰中展現出卓越的效能。此外,該資料集的多樣性也促進了模型對不同程式設計情境的適應能力,使其能夠靈活應對各種程式設計需求。透過這樣的資料基礎,WaveCoder 能夠提高處理不同程式碼相關指令的準確性和效率。
圖1:WaveCoder 的整體流程
創新型指令資料生成策略
為了顯式控制資料的多樣性和質量,WaveCoder 採用了一種兩階段的指令資料生成策略。首先,研究員們對海量程式碼資料進行初步篩選,去除掉其中質量不佳的樣本,保證程式碼資料的基本質量。然後,研究員們利用 KCenterGreedy 聚類方法,進一步優化了資料集的結構,保留了程式碼的多樣性,這些例項能夠全面覆蓋程式語言的各種應用場景,保證了資料集的高效性和實用性。
為了進一步提升資料質量,WaveCoder 還引入了基於大語言模型的生成器-判別器框架。在這一框架中,原始程式碼片段被輸入生成器以生成新的指令資料,再由判別器進行質量評估,保證每一條生成的指令資料都符合高標準的質量要求。生成器和判別器的相互作用,形成了一個動態的資料生成和最佳化迴圈,使得資料生成過程能夠從正確的示例和錯誤的示例中學習,從而提升生成資料的質量。
圖2:WaveCoder 中基於 LLMs 的生成器-鑑別器框架
透過這種創新的資料生成策略,WaveCoder 在多工學習中展現出了卓越的穩定性和可靠性。無論是程式碼摘要、生成、翻譯還是修復任務,模型都能夠提供準確、高效的解決方案。
WaveCoder在基準測試中表現優異
在一系列程式碼相關的基準測試,如 HumanEval、MBPP 和 HumanEvalPack 中,WaveCoder 都表現出其在多工程式設計場景中的巨大潛力和卓越效能。這些測試是評估程式語言處理模型能力的重要標準,涵蓋了程式碼生成、理解和修復等多個方面。
特別是 WaveCoder 的兩個高階版本,WaveCoder-Pro-6.7B 和 WaveCoder-Ultra-6.7B,在這些基準測試中的多個程式碼相關任務上均取得了顯著的成果。它們不僅在傳統的程式碼生成任務上表現出色,還在更復雜的程式設計挑戰中,如程式碼摘要和修復任務,也有極高的準確性和效率。WaveCoder 在資料合成上的創新和最佳化,是獲得這些優異表現的關鍵。
表2:WaveCoder 在程式碼生成基準 HumanEval 和 MBPP 上的表現
表3:WaveCoder 在程式碼修復基準 HumanEvalFix(左)和程式碼總結任務 HumanEvalExplain (右)上的表現
此外,在資料科學相關的程式碼評測基準 DS-1000 中,WaveCoder 在一眾超級大模型對比中也能表現得比較出色,這說明了開原始碼在資料合成中的潛力。
表4:DS-1000 Arena Leaderboard
高可靠性和有效性,開啟程式碼智慧新篇章
在探究 WaveCoder 效能的多維度影響因素時,為了確保研究結果的可靠性與評估的公正性,研究員們還對所使用的資料集進行了資料洩露分析。這一過程包括了對資料集的全面審查,以識別並解決任何可能影響評估結果的潛在問題。透過這種方法,研究員們排除了資料洩露對研究結論的干擾,可以確保研究的嚴謹性和結論的有效性。
圖3:資料洩露分析
WaveCoder 在未來會利用更廣泛的資料集進一步實現能力的擴充套件和增強。這些資料集將涵蓋更多的程式語言、框架和庫,以及更多樣化的程式設計場景和問題,從而使 WaveCoder 能夠更好地理解和適應不同的程式設計需求。
WaveCoder 解鎖了程式設計領域的新潛能,也開啟了程式碼智慧的新篇章。透過提供更加智慧的程式設計輔助,WaveCoder 將可以在有效提高開發者工作效率的同時,激發開發者的創造力,幫助他們構建更加創新、複雜的軟體系統。微軟亞洲研究院的研究員們將不斷探索新的演算法和技術,為程式語言處理技術的探索和創新持續貢獻力量。
你也許還想看:

相關文章