对于 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 (阿东)