關於 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 檢測器。
工具和應用演示
- StarCoder Chat: 和 StarCoder 聊天!
- VSCode Extension: 使用 StarCoder 補全程式碼的 VSCode 外掛!
- StarCoder Playground: 用 StarCoder 寫程式碼!
- StarCoder Editor: 用 StarCoder 編輯程式碼!
資料與治理
- StarCoderData: StarCoder 的預訓練資料集。
- Tech Assistant Prompt: 使用該提示,你可以將 StarCoder 變成技術助理。
- Governance Card: 有關模型治理的卡片。
- StarCoder License Agreement: 該模型基於 BigCode OpenRAIL-M v1 許可協議。
- StarCoder Search: 對預訓練資料集中的程式碼進行全文搜尋。
- StarCoder Membership Test: 快速測試某程式碼是否存在於預訓練資料集中。
你可以在 huggingface.co/bigcode 找到所有資源和連結!
英文原文: https://huggingface.co/blog/starcoder
原文作者: Leandro von Werra,Loubna Ben Allal
譯者: Matrix Yao (姚偉峰),英特爾深度學習工程師,工作方向為 transformer-family 模型在各模態資料上的應用及大規模模型的訓練推理。
審校/排版: zhongdongy (阿東)