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