雖然像GPT-4這樣的大型語言模型(LLM)在編寫軟件代碼方面非常精通,但是這些模型的成本和不透明性激發(fā)了人們對更加經(jīng)濟、規(guī)模更小的編碼LLM的興趣。
這些替代方案可以針對特定任務(wù)進行微調(diào),并且成本很低。開發(fā)這些LLM的一大挑戰(zhàn)是在訓(xùn)練數(shù)據(jù)集的大小和模型的性能之間找到最佳平衡點。
針對這一挑戰(zhàn),微軟公司在最近發(fā)表的一篇論文中介紹了一種使用更少示例訓(xùn)練高效編碼語言模型的新技術(shù)。這篇文章介紹了WaveCoder模型,并聲稱優(yōu)于其他在類似數(shù)量的示例上訓(xùn)練的編碼LLM。
作為WaveCoder的補充,微軟公司還開發(fā)了CodeOcean,這是一個包含2萬個不同代碼示例的精選數(shù)據(jù)集。該數(shù)據(jù)集可以增強編碼應(yīng)用的基礎(chǔ)模型的微調(diào)。
選擇正確的編碼示例
雖然WaveCoder是一個令人印象深刻的LLM模型,但這篇論文中更有趣的部分是CodeOcean,它是一個附帶的數(shù)據(jù)集。CodeOcean解決了一個重大挑戰(zhàn):創(chuàng)建一個平衡成本效益和質(zhì)量的數(shù)據(jù)集。研究人員認為一個具有最大多樣性的數(shù)據(jù)集可以產(chǎn)生令人印象深刻的結(jié)果,即使它包含的示例有限。
該研究團隊從CodeSearchNet開始,這是一個包含200萬對注釋和代碼的廣泛編碼數(shù)據(jù)集。他們使用基于BERT的Transformer模型為每個示例生成嵌入,將復(fù)雜信息轉(zhuǎn)換為數(shù)字列表。
他們對嵌入應(yīng)用了一種聚類算法,根據(jù)它們的相似性對示例進行排序。這種方法使研究人員能夠從原始數(shù)據(jù)集中提取一個子集,最大限度地提高多樣性。
添加說明
在建立核心數(shù)據(jù)集之后,研究人員必須創(chuàng)建包含代碼和指令的訓(xùn)練示例。為了實現(xiàn)這一點,他們創(chuàng)建了一個生成器-鑒別器框架,用于根據(jù)原始代碼示例生成指導(dǎo)性數(shù)據(jù)。最初,他們使用GPT-4在特定的場景中制作任務(wù)定義。這些初始任務(wù)定義與指導(dǎo)提示相結(jié)合,被提供給GPT-3.5,以生成額外示例的相應(yīng)指令。
對于鑒別器組件,研究人員制定了一個單獨的評估提示。這個提示以及代碼和指令示例提供給GPT-4進行評估。然后,CodeOcean管道使用良好的示例來生成未來的訓(xùn)練示例。
研究人員通過這個迭代過程生成了2萬個高質(zhì)量的教學(xué)樣本。這些示例跨越了四個不同的編碼任務(wù)類別:代碼生成、代碼摘要、語言翻譯(從一種編程語言到另一種編程語言)和代碼修復(fù)。這四個類別包含了LLM編碼任務(wù)的很大一部分。
訓(xùn)練WaveCoder
生成用于編碼LLM的訓(xùn)練示例有很多方法。但微軟的CodeOcean以強調(diào)泛化和示例效率而與眾不同。與依賴大量數(shù)據(jù)的研究不同,CodeOcean可以使用較小的數(shù)據(jù)集實現(xiàn)高性能。
為了證明CodeOcean的有效性,研究人員對三種編碼語言模型進行了微調(diào):StarCoder-15B、CodeLLaMA(7B和13B)和DeepseekCoder-6.7B??紤]到數(shù)據(jù)集的大小,其微調(diào)既快速又經(jīng)濟高效。研究人員根據(jù)HumanEval、MBPP和HumanEvalPack這三個關(guān)鍵的編碼基準對微調(diào)后的模型進行了評估。
通過在CodeOcean上進行多次訓(xùn)練,所有模型在這些基準測試上都有了顯著的改進。在代碼生成方面,研究人員描述了WaveCoder的影響和局限性:“在微調(diào)過程之后,與基礎(chǔ)模型和一些開源模型相比,WaveCoder模型的性能有了顯著的提高,但它仍然落后于專有模型(例如GPT-4和Gemini),以及使用7萬多個訓(xùn)練數(shù)據(jù)訓(xùn)練的指示模型。”
WaveCoder和WizardCoder之間的性能差異很小,有78000個訓(xùn)練示例。這表明“精細化和多樣化的指令數(shù)據(jù)可以顯著提高指令調(diào)優(yōu)的效率。”
WaveCoder在代碼摘要和修復(fù)任務(wù)方面尤為出色。它在幾乎所有編程語言上的表現(xiàn)都優(yōu)于其他開源模型。這一成功強調(diào)了“定義和分類代碼相關(guān)任務(wù)對增強代碼LLM泛化能力的有效性”。
雖然微軟公司尚未發(fā)布WaveCoder和CodeOcean的模型、代碼和數(shù)據(jù),但有關(guān)Hugging Face的討論表明,該公司正在審查是否將它們對外發(fā)布。展望未來,研究人員的目標是探索更大數(shù)據(jù)集的效果,以及將CodeOcean與其他編碼數(shù)據(jù)集相結(jié)合的潛在好處。