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