StarCoder:一款最先進的程式碼大型語言模型
StarCoder 簡介
StarCoder 和 StarCoderBase 是針對程式碼的大型語言模型 (Code LLMs),使用來自 GitHub 的許可資料進行訓練,其中包括 80 多種程式語言、Git 提交、GitHub 問題和 Jupyter Notebook。與 LLaMA 類似,我們訓練了一個約 150 億引數的模型,處理了 1 萬億個標記。我們對 StarCoderBase 模型進行了 350 億個 Python 標記的微調,得到了一個我們稱之為 StarCoder 的新模型。
我們發現 StarCoderBase 在流行的程式設計基準測試中優於現有的開源 Code LLM,並與 OpenAI 的 `code-cushman-001`(為早期版本 GitHub Copilot 提供支援的原始 Codex 模型)等封閉模型持平或超越。StarCoder 模型具有超過 8000 個標記的上下文長度,可以處理比任何其他開源 LLM 更多的輸入,從而支援廣泛的有趣應用。例如,透過向 StarCoder 模型提供一系列對話提示,我們使其能夠充當技術助手。此外,這些模型還可以用於程式碼自動完成、透過指令修改程式碼以及用自然語言解釋程式碼片段。我們採取了幾個重要步驟,以實現安全開源模型釋出,包括改進的 PII 匿名化管道、新穎的歸因追蹤工具,並根據改進版的 OpenRAIL 許可證公開發布 StarCoder。更新後的許可證簡化了公司將模型整合到其產品中的過程。我們相信,憑藉其強大的效能,StarCoder 模型將成為社群使用和適應其用例和產品的堅實基礎。
評估
我們徹底評估了 StarCoder 和幾個類似模型,以及各種基準。一個流行的 Python 基準測試是 HumanEval,它測試模型是否能夠根據其簽名和文件字串完成函式。我們發現 StarCoder 和 StarCoderBase 都優於包括 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 上對其進行了評估,該基準將 HumanEval 擴充套件到許多其他語言。我們觀察到 StarCoder 在許多語言上與 `code-cushman-001` 持平或表現更優。在名為 DS-1000 的資料科學基準測試中,它也明顯優於所有其他開放獲取模型。但除了程式碼補全之外,讓我們看看該模型還能做什麼!
技術助手
透過詳盡的評估,我們發現 StarCoder 在編寫程式碼方面能力很強。但我們也想測試它是否可以用作技術助手,畢竟它是在大量文件和 GitHub 問題上訓練出來的。受 Anthropic HHH 提示的啟發,我們構建了一個 技術助手提示。令人驚訝的是,僅僅透過提示,該模型就能夠充當技術助手並回答與程式設計相關的請求!
訓練資料
該模型是在 The Stack 1.2 的子集上訓練的。該資料集只包含許可的程式碼,幷包括一個選擇退出過程,以便程式碼貢獻者可以從資料集中刪除其資料(參見我是否在 The Stack 中)。我們與 Toloka 合作,從訓練資料中刪除了個人可識別資訊,如姓名、密碼和電子郵件地址。
關於 BigCode
BigCode 是 Hugging Face 和 ServiceNow 共同領導的開放科學合作專案,致力於程式碼大型語言模型的負責任開發。
額外發布
除了模型,我們還發布了一系列資源和演示:
- 模型權重,包括帶有 OpenRAIL 許可證的中間檢查點
- 所有用於資料預處理和訓練的程式碼,採用 Apache 2.0 許可證
- 用於程式碼模型的全面評估工具
- 用於訓練和評估 PII 刪除的新 PII 資料集
- 用於訓練的完全預處理資料集
- 用於在資料集中查詢生成程式碼的程式碼歸因工具
連結
模型
- 論文:關於 StarCoder 的技術報告。
- GitHub:關於使用或微調 StarCoder 所需的一切資訊。
- StarCoder:在 Python 上進一步訓練的 StarCoderBase。
- StarCoderBase:在 The Stack 的 80 多種語言上訓練。
- StarEncoder:在 TheStack 上訓練的編碼器模型。
- StarPii:基於 StarEncoder 的 PII 檢測器。
工具與演示
- StarCoder 聊天:與 StarCoder 聊天!
- VSCode 擴充套件:使用 StarCoder 編寫程式碼!
- StarCoder 遊樂場:使用 StarCoder 創作!
- StarCoder 編輯器:使用 StarCoder 編輯!
資料與治理
- StarCoderData:StarCoder 的預訓練資料集。
- 技術助手提示:使用此提示,您可以將 StarCoder 轉換為技術助手。
- 治理卡:概述模型治理的卡片。
- StarCoder 許可協議:該模型根據 BigCode OpenRAIL-M v1 許可協議獲得許可。
- StarCoder 搜尋:在預訓練資料集中進行程式碼全文搜尋。
- StarCoder 會員測試:快速測試程式碼是否存在於預訓練資料集中。
您可以在 huggingface.co/bigcode 上找到所有資源和連結!