StarCoder: A State-of-the-Art LLM for Code

发布于 2023年5月4日
在 GitHub 上更新

介绍 StarCoder

StarCoder 和 StarCoderBase 是代码大型语言模型(Code LLMs),在 GitHub 上采用许可宽松的数据进行训练,包括 80 多种编程语言、Git 提交、GitHub issue 和 Jupyter notebooks。与 LLaMA 类似,我们训练了一个约 150 亿参数、1 万亿 token 的模型。我们使用 350 亿 Python token 对 StarCoderBase 模型进行了微调,从而得到了一个我们称之为 StarCoder 的新模型。

我们发现 StarCoderBase 在流行的编程基准测试中优于现有的开源代码 LLM,并且在性能上与 OpenAI 的 code-cushman-001(最初为 GitHub Copilot 提供支持的 Codex 模型)等闭源模型相当或超越。StarCoder 模型具有超过 8,000 个 token 的上下文长度,能够处理比其他任何开源 LLM 更多的输入,从而能够实现广泛的应用。例如,通过向 StarCoder 模型提供一系列对话提示,我们使其能够充当技术助手。此外,这些模型还可以用于代码自动补全、通过指令修改代码以及用自然语言解释代码片段。我们采取了多项重要措施来实现安全的开源模型发布,包括改进的 PII(个人身份信息) redaction pipeline,一个新颖的归因追踪工具,并以 OpenRAIL 许可协议的改进版本公开发布 StarCoder。更新后的许可协议简化了公司将模型集成到其产品中的流程。我们相信,凭借其强大的性能,StarCoder 模型将为社区提供坚实的基础,使其能够根据自身用例和产品进行使用和调整。

评估

我们对 StarCoder 和几个类似的模型以及各种基准测试进行了彻底评估。一个流行的 Python 基准测试是 HumanEval,它测试模型是否能够根据函数签名和文档字符串完成函数。我们发现,尽管 StarCoder 和 StarCoderBase 的规模显著小于 PaLM、LaMDA 和 LLaMA 等大型模型,但它们的性能却超越了它们。它们还优于 CodeGen-16B-Mono 和 OpenAI 的 code-cushman-001(120 亿参数)模型。我们还注意到,模型的一个失败案例是它会生成 # 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 issue 上训练的。受 Anthropic 的 HHH prompt 的启发,我们构建了一个 技术助手 Prompt。令人惊讶的是,仅凭这个 prompt,模型就能充当技术助手并回答编程相关的问题!

ChatExamples

训练数据

模型是在 The Stack 1.2 的一个子集上训练的。该数据集仅包含许可宽松的代码,并包含一个退出机制,以便代码贡献者可以将其数据从数据集中删除(请参阅 Am I in 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 找到所有资源和链接!

社区

我可以测试你吗

您好,

注册登录 发表评论

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