StarCoder:一款最先進的程式碼大型語言模型

釋出日期:2023 年 5 月 4 日
在 GitHub 上更新

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 提示的啟發,我們構建了一個 技術助手提示。令人驚訝的是,僅僅透過提示,該模型就能夠充當技術助手並回答與程式設計相關的請求!

ChatExamples

訓練資料

該模型是在 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 檢測器。

工具與演示

資料與治理

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

社群

ijoi

我能測試你嗎

你好

你好

註冊登入 發表評論

© . This site is unofficial and not affiliated with Hugging Face, Inc.