StarCoder: 最先進(jìn)的代碼大模型

關(guān)于 BigCode
BigCode 是由 Hugging Face 和 ServiceNow 共同領(lǐng)導(dǎo)的開放式科學(xué)合作項(xiàng)目,該項(xiàng)目致力于開發(fā)負(fù)責(zé)任的代碼大模型。
StarCoder 簡(jiǎn)介
StarCoder 和 StarCoderBase 是針對(duì)代碼的大語(yǔ)言模型 (代碼 LLM),模型基于 GitHub 上的許可數(shù)據(jù)訓(xùn)練而得,訓(xùn)練數(shù)據(jù)中包括 80 多種編程語(yǔ)言、Git 提交、GitHub 問(wèn)題和 Jupyter notebook。與 LLaMA 類似,我們基于 1 萬(wàn)億個(gè)詞元訓(xùn)練了一個(gè)約 15B 參數(shù)的模型。此外,我們還針對(duì)一個(gè) 35B 詞元的 Python 數(shù)據(jù)集對(duì) StarCoderBase 模型進(jìn)行了微調(diào),從而獲得了一個(gè)我們稱之為 StarCoder 的新模型。
我們發(fā)現(xiàn) StarCoderBase 在流行的編程基準(zhǔn)測(cè)試中表現(xiàn)優(yōu)于現(xiàn)有其他開源的代碼 LLM,同時(shí)與閉源模型相比,如來(lái)自 OpenAI 的?code-cushman-001
?(早期版本的 GitHub Copilot 背后的原始 Codex 模型),其表現(xiàn)也相當(dāng)甚至超過(guò)了閉源模型的表現(xiàn)。憑借超過(guò) 8,000 個(gè)詞元的上下文長(zhǎng)度,StarCoder 模型可以處理比任何其他開源 LLM 更多的輸入,從而可以賦能更廣泛的有趣應(yīng)用。例如,通過(guò)用多輪對(duì)話來(lái)提示 StarCoder 模型,我們可以讓它們充當(dāng)我們的技術(shù)助理。此外,這些模型還可用于自動(dòng)補(bǔ)全代碼、根據(jù)指令修改代碼以及用自然語(yǔ)言解釋代碼片段等任務(wù)。
為了實(shí)現(xiàn)開源模型的安全發(fā)布,我們采取了一系列的措施,包括改進(jìn)了 PII (Personally Identifiable Information,個(gè)人身份信息) 編輯流水線、對(duì)歸因跟蹤工具進(jìn)行了創(chuàng)新,并使用改進(jìn)的 OpenRAIL 許可證發(fā)布 StarCoder。更新后的許可證簡(jiǎn)化了公司將模型集成到其產(chǎn)品中所需的流程。我們相信,憑借其強(qiáng)大的性能,StarCoder 模型將賦能社區(qū)將其應(yīng)用或適配至廣泛的應(yīng)用場(chǎng)景和產(chǎn)品中。
評(píng)估
我們?cè)诓煌臏y(cè)試基準(zhǔn)上對(duì) StarCoder 及其他幾個(gè)與其類似的模型進(jìn)行了深入的評(píng)估。其中之一測(cè)試基準(zhǔn)是 HumanEval,這是一個(gè)比較流行的 Python 基準(zhǔn)測(cè)試,它主要測(cè)試模型是否可以根據(jù)函數(shù)的簽名和文檔來(lái)編寫函數(shù)。我們發(fā)現(xiàn) StarCoder 和 StarCoderBase 在 HumanEval 上的表現(xiàn)均優(yōu)于最大的模型,包括 PaLM、LaMDA 和 LLaMA,盡管它們尺寸要小得多。同時(shí),它們的性能還優(yōu)于 CodeGen-16B-Mono 和 OpenAI 的 code-cushman-001 (12B) 模型。我們還注意到該模型會(huì)生成?#Solution here
?這樣的注釋代碼,這可能是因?yàn)榇祟惔a通常是訓(xùn)練數(shù)據(jù)中代碼習(xí)題的一部分。為了強(qiáng)制模型生成一個(gè)實(shí)際的解決方案,我們添加了提示詞?<filename>solutions/solution_1.py\n# Here is the correct implementation of the code exercise
。這使得 StarCoder 的 HumanEval 分?jǐn)?shù)有了顯著提高,從 34% 提升到 40% 以上,刷新了開源模型的最佳結(jié)果的記錄。我們也在 CodeGen 和 StarCoderBase 上嘗試了此提示詞,但結(jié)果沒有太大差異。

StarCoder 的一個(gè)有趣方面是它是多語(yǔ)言的,因此我們?cè)?MultiPL-E 上對(duì)其進(jìn)行了評(píng)估,MultiPL-E 是 HumanEval 的多語(yǔ)言擴(kuò)展版。我們觀察到 StarCoder 在許多編程語(yǔ)言上與?code-cushman-001
?的表現(xiàn)相當(dāng)甚至更優(yōu)。在 DS-1000 數(shù)據(jù)科學(xué)基準(zhǔn)測(cè)試中,它以明顯優(yōu)勢(shì)擊敗了?code-cushman-001
?以及所有其他開源模型。好了,我們來(lái)看看除了代碼補(bǔ)全之外,StarCoder 還能做些什么!
技術(shù)助理
經(jīng)過(guò)詳盡的評(píng)估,我們已經(jīng)知道 StarCoder 非常擅長(zhǎng)編寫代碼。我們還想測(cè)試它是否可以用作技術(shù)助理,畢竟它的訓(xùn)練數(shù)據(jù)中有大量的文檔和 GitHub 問(wèn)題。受 Anthropic 的 HHH 提示 的啟發(fā),我們構(gòu)建了一個(gè) 技術(shù)助理提示。令人驚喜的是,僅憑提示,該模型就能夠充當(dāng)技術(shù)助理并回答與編程相關(guān)的問(wèn)題!

訓(xùn)練數(shù)據(jù)
該模型是在 The Stack 1.2 的一個(gè)子集上訓(xùn)練的。該數(shù)據(jù)集僅包含許可代碼,它還包含一個(gè)退出流程,以便代碼貢獻(xiàn)者可以從數(shù)據(jù)集中刪除他們的數(shù)據(jù) (請(qǐng)參見 Am I in The Stack)。此外,我們從訓(xùn)練數(shù)據(jù)中刪除了個(gè)人身份信息,例如姓名、密碼和電子郵件地址。
我們還發(fā)布了……
除了模型,我們還發(fā)布了一系列其他資源和應(yīng)用演示:
模型權(quán)重,包括具有 OpenRAIL 許可證的 checkpoints
所有數(shù)據(jù)預(yù)處理和訓(xùn)練代碼,許可證為 Apache 2.0
對(duì)模型進(jìn)行全面評(píng)估的工具
用于訓(xùn)練的刪除掉 PII 信息的新數(shù)據(jù)集,以及用于評(píng)估 PII 信息刪除效果的代碼
用于訓(xùn)練的預(yù)處理過(guò)的數(shù)據(jù)集
用于在數(shù)據(jù)集中查找生成代碼出處的代碼歸因工具
鏈接
模型
論文: 關(guān)于 StarCoder 的技術(shù)報(bào)告。
GitHub: 你可以由此獲得有關(guān)如何使用或微調(diào) StarCoder 的所有信息。
StarCoder: 基于 Python 數(shù)據(jù)集進(jìn)一步微調(diào) StarCoderBase 所得的模型。
StarCoderBase: 基于來(lái)自 The Stack 數(shù)據(jù)集的 80 多種編程語(yǔ)言訓(xùn)練而得的模型。
StarEncoder: 在 The Stack 上訓(xùn)練的編碼器模型。
StarPii: 基于 StarEncoder 的 PII 檢測(cè)器。
工具和應(yīng)用演示
StarCoder Chat: 和 StarCoder 聊天!
VSCode Extension: 使用 StarCoder 補(bǔ)全代碼的 VSCode 插件!
StarCoder Playground: 用 StarCoder 寫代碼!
StarCoder Editor: 用 StarCoder 編輯代碼!
數(shù)據(jù)與治理
StarCoderData: StarCoder 的預(yù)訓(xùn)練數(shù)據(jù)集。
Tech Assistant Prompt: 使用該提示,你可以將 StarCoder 變成技術(shù)助理。
Governance Card: 有關(guān)模型治理的卡片。
StarCoder License Agreement: 該模型基于 BigCode OpenRAIL-M v1 許可協(xié)議。
StarCoder Search: 對(duì)預(yù)訓(xùn)練數(shù)據(jù)集中的代碼進(jìn)行全文搜索。
StarCoder Membership Test: 快速測(cè)試某代碼是否存在于預(yù)訓(xùn)練數(shù)據(jù)集中。
你可以在 huggingface.co/bigcode 找到所有資源和鏈接!
??今天是世界微笑日,???讓我們給自己一個(gè)微笑,給家人一個(gè)微笑,給夢(mèng)想一個(gè)微笑!
英文原文:?https://huggingface.co/blog/starcoder
原文作者: Leandro von Werra,Loubna Ben Allal
譯者: Matrix Yao (姚偉峰),英特爾深度學(xué)習(xí)工程師,工作方向?yàn)?transformer-family 模型在各模態(tài)數(shù)據(jù)上的應(yīng)用及大規(guī)模模型的訓(xùn)練推理。
審校/排版: zhongdongy (阿東)