StarCoder: 最先進的程式碼大模型

HuggingFace發表於2023-05-08

關於 BigCode

BigCode 是由 Hugging Face 和 ServiceNow 共同領導的開放式科學合作專案,該專案致力於開發負責任的程式碼大模型。

StarCoder 簡介

StarCoder 和 StarCoderBase 是針對程式碼的大語言模型 (程式碼 LLM),模型基於 GitHub 上的許可資料訓練而得,訓練資料中包括 80 多種程式語言、Git 提交、GitHub 問題和 Jupyter notebook。與 LLaMA 類似,我們基於 1 萬億個詞元訓練了一個約 15B 引數的模型。此外,我們還針對一個 35B 詞元的 Python 資料集對 StarCoderBase 模型進行了微調,從而獲得了一個我們稱之為 StarCoder 的新模型。

我們發現 StarCoderBase 在流行的程式設計基準測試中表現優於現有其他開源的程式碼 LLM,同時與閉源模型相比,如來自 OpenAI 的 code-cushman-001 (早期版本的 GitHub Copilot 背後的原始 Codex 模型),其表現也相當甚至超過了閉源模型的表現。憑藉超過 8,000 個詞元的上下文長度,StarCoder 模型可以處理比任何其他開源 LLM 更多的輸入,從而可以賦能更廣泛的有趣應用。例如,透過用多輪對話來提示 StarCoder 模型,我們可以讓它們充當我們的技術助理。此外,這些模型還可用於自動補全程式碼、根據指令修改程式碼以及用自然語言解釋程式碼片段等任務。

為了實現開源模型的安全釋出,我們採取了一系列的措施,包括改進了 PII (Personally Identifiable Information,個人身份資訊) 編輯流水線、對歸因跟蹤工具進行了創新,並使用改進的 OpenRAIL 許可證釋出 StarCoder。更新後的許可證簡化了公司將模型整合到其產品中所需的流程。我們相信,憑藉其強大的效能,StarCoder 模型將賦能社群將其應用或適配至廣泛的應用場景和產品中。

評估

我們在不同的測試基準上對 StarCoder 及其他幾個與其類似的模型進行了深入的評估。其中之一測試基準是 HumanEval,這是一個比較流行的 Python 基準測試,它主要測試模型是否可以根據函式的簽名和文件來編寫函式。我們發現 StarCoder 和 StarCoderBase 在 HumanEval 上的表現均優於最大的模型,包括 PaLM、LaMDA 和 LLaMA,儘管它們尺寸要小得多。同時,它們的效能還優於 CodeGen-16B-Mono 和 OpenAI 的 code-cushman-001 (12B) 模型。我們還注意到該模型會生成 #Solution here 這樣的註釋程式碼,這可能是因為此類程式碼通常是訓練資料中程式碼習題的一部分。為了強制模型生成一個實際的解決方案,我們新增了提示詞 <filename>solutions/solution_1.py\n# Here is the correct implementation of the code exercise。這使得 StarCoder 的 HumanEval 分數有了顯著提高,從 34% 提升到 40% 以上,重新整理了開源模型的最佳結果的記錄。我們也在 CodeGen 和 StarCoderBase 上嘗試了此提示詞,但結果沒有太大差異。

模型 HumanEval MBPP
LLaMA-7B 10.5 17.7
LaMDA-137B 14.0 14.8
LLaMA-13B 15.8 22.0
CodeGen-16B-Multi 18.3 20.9
LLaMA-33B 21.7 30.2
CodeGeeX 22.9 24.4
LLaMA-65B 23.7 37.7
PaLM-540B 26.2 36.8
CodeGen-16B-Mono 29.3 35.3
StarCoderBase 30.4 49.0
code-cushman-001 33.5 45.9
StarCoder 33.6 52.7
StarCoder-Prompted 40.8 49.5

StarCoder 的一個有趣方面是它是多語言的,因此我們在 MultiPL-E 上對其進行了評估,MultiPL-E 是 HumanEval 的多語言擴充套件版。我們觀察到 StarCoder 在許多程式語言上與 code-cushman-001 的表現相當甚至更優。在 DS-1000 資料科學基準測試中,它以明顯優勢擊敗了 code-cushman-001 以及所有其他開源模型。好了,我們來看看除了程式碼補全之外,StarCoder 還能做些什麼!

技術助理

經過詳盡的評估,我們已經知道 StarCoder 非常擅長編寫程式碼。我們還想測試它是否可以用作技術助理,畢竟它的訓練資料中有大量的文件和 GitHub 問題。受 Anthropic 的 HHH 提示 的啟發,我們構建了一個 技術助理提示。令人驚喜的是,僅憑提示,該模型就能夠充當技術助理並回答與程式設計相關的問題!

技術助理示例

訓練資料

該模型是在 The Stack 1.2 的一個子集上訓練的。該資料集僅包含許可程式碼,它還包含一個退出流程,以便程式碼貢獻者可以從資料集中刪除他們的資料 (請參見 Am I in The Stack)。此外,我們從訓練資料中刪除了個人身份資訊,例如姓名、密碼和電子郵件地址。

我們還發布了……

除了模型,我們還發布了一系列其他資源和應用演示:

  • 模型權重,包括具有 OpenRAIL 許可證的 checkpoints
  • 所有資料預處理和訓練程式碼,許可證為 Apache 2.0
  • 對模型進行全面評估的工具
  • 用於訓練的刪除掉 PII 資訊的新資料集,以及用於評估 PII 資訊刪除效果的程式碼
  • 用於訓練的預處理過的資料集
  • 用於在資料集中查詢生成程式碼出處的程式碼歸因工具

連結

模型

  • 論文: 關於 StarCoder 的技術報告。
  • GitHub: 你可以由此獲得有關如何使用或微調 StarCoder 的所有資訊。
  • StarCoder: 基於 Python 資料集進一步微調 StarCoderBase 所得的模型。
  • StarCoderBase: 基於來自 The Stack 資料集的 80 多種程式語言訓練而得的模型。
  • StarEncoder: 在 The Stack 上訓練的編碼器模型。
  • StarPii: 基於 StarEncoder 的 PII 檢測器。

工具和應用演示

資料與治理

你可以在 huggingface.co/bigcode 找到所有資源和連結!


英文原文: https://huggingface.co/blog/starcoder

原文作者: Leandro von Werra,Loubna Ben Allal

譯者: Matrix Yao (姚偉峰),英特爾深度學習工程師,工作方向為 transformer-family 模型在各模態資料上的應用及大規模模型的訓練推理。

審校/排版: zhongdongy (阿東)

相關文章