核心概念
OpenCoder 是一種開源程式碼大型語言模型,它不僅提供模型權重和程式碼,還公開了其訓練資料、資料處理流程、實驗結果和訓練協定,旨在促進程式碼生成領域的透明度和可復現性研究。
這篇研究論文介紹了 OpenCoder,一個完全開源的程式碼大型語言模型 (LLM),它建立在透明的資料處理流程和可復現的資料集基礎上。不同於以往只發布模型權重和推論程式碼的做法,OpenCoder 還公開了其可復現的訓練資料、完整的資料處理流程、嚴謹的實驗結果和詳細的訓練協定,為研究社群提供了一個「開源食譜」。
OpenCoder 的重要性
現今,用於程式碼的大型語言模型 (LLM) 已成為程式碼生成、推理任務和代理系統等各個領域不可或缺的一部分。雖然開放存取的程式碼 LLM 正逐漸接近專有模型的效能水準,但適用於嚴謹科學研究的高品質程式碼 LLM,特別是那些具有可復現資料處理流程和透明訓練協定的模型,仍然有限。造成這種情況的原因有很多,包括資源限制、道德考量,以及保持模型先進性的競爭優勢。
OpenCoder 的出現,正是為了解決這一差距。它不僅達到了與領先模型相當的效能,而且還充當了研究社群的「開源食譜」。透過這種全面的公開,OpenCoder 旨在促進程式碼智慧研究領域的發展,並鼓勵其在程式碼智慧社群中的廣泛應用。
OpenCoder 的關鍵要素
透過一系列的對照實驗,OpenCoder 的開發者們強調了在不同訓練階段,資料處理對於頂尖程式碼 LLM 的關鍵設計選擇:
資料清理: 在預訓練階段,資料清理至關重要。這包括移除無資訊的資料,例如純十六進位制程式碼和過短的程式碼片段,這些資料無助於學習過程。
重複資料刪除: 重複資料刪除的影響非常顯著,檔案級別的重複資料刪除透過保持資料多樣性和增強模型在下游任務上的效能,被證明比儲存庫級別的重複資料刪除更有效。
GitHub 星標的影響: 研究還探討了 GitHub 星標的影響,結果顯示,根據 GitHub 星標數量過濾資料可能會降低資料多樣性並影響整體資料分佈,從而導致結果欠佳。
退火階段高品質資料的重要性: 在退火階段,使用高品質資料對於進一步增強模型的能力至關重要,這表明在模型訓練的後期階段,資料品質比數量更重要。
兩階段指令微調策略: 最後,在指令微調階段,兩階段指令微調策略被證明是有效的,它允許模型首先獲得廣泛的能力,然後透過特定於程式碼的任務來完善這些能力,從而提高了模型在理論和實務程式設計任務上的效能。
這五個關鍵點強調了資料品質、多樣性和目標增強策略在開發 OpenCoder 等高效能程式碼生成模型中的重要性。
OpenCoder 的貢獻
OpenCoder 的發布,為程式碼 LLM 的研究帶來了以下貢獻:
提供了一個精心策劃且完全透明的強大基準程式碼 LLM,用於研究機械可解釋性和程式碼 LLM 的資料分佈。
深入研究了用於開發更強大程式碼 LLM 的預訓練和指令資料處理流程。
透過允許對模型開發進行詳細審查,OpenCoder 有望解鎖更多基於透明程式碼 LLM 的客製化解決方案。
OpenCoder 的目標是促進開源程式碼 LLM 社群的發展和加速其發展。
統計
OpenCoder 的訓練資料集 RefineCode 包含約 9600 億個詞元,涵蓋 607 種程式語言。
OpenCoder-1.5B 模型在 HumanEval 測試集上達到了 72.5% 的 pass@1 準確率,在 MBPP 測試集上達到了 72.7% 的 pass@1 準確率。
OpenCoder-8B 模型在 HumanEval 測試集上達到了 83.5% 的 pass@1 準確率,在 MBPP 測試集上達到了 79.1% 的 pass@1 準確率。