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 上找到所有资源和链接!