StarCoder:一种用于代码的先进LLM
StarCoder Advanced LLM code.
介绍 StarCoder
StarCoder 和 StarCoderBase 是用来进行代码的大型语言模型(Code LLMs),它们是通过使用来自 GitHub 的可许可许可证数据进行训练的,包括来自 80 多种编程语言、Git 提交、GitHub 问题和 Jupyter 笔记本的数据。与 LLaMA 类似,我们训练了一个包含大约 150 亿参数的模型,训练了 1 万亿个标记。我们对 StarCoderBase 模型进行了 350 亿个 Python 标记的微调,从而得到了一个我们称之为 StarCoder 的新模型。
我们发现,StarCoderBase 在流行的编程基准测试中表现优于现有的开源 Code LLMs 模型,并且与 OpenAI 的 code-cushman-001(最初用于支持 GitHub Copilot 早期版本的 Codex 模型)等封闭模型相媲美或超越。StarCoder 模型的上下文长度超过 8000 个标记,可以处理比任何其他开源 LLM 模型更多的输入,从而实现了广泛的应用。例如,通过使用一系列的对话作为提示,我们使 StarCoder 模型能够充当技术助手。此外,该模型可以用于自动完成代码、通过指令修改代码以及用自然语言解释代码片段。我们采取了几个重要步骤来确保安全的开放模型发布,包括改进的个人身份信息删除流水线、一种新颖的属性追踪工具,并使用改进版的 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 中使用此提示,但没有观察到太大的差异。
StarCoder 的一个有趣之处在于它是多语言的,因此我们在 MultiPL-E 上对其进行了评估,该基准将 HumanEval 扩展到许多其他语言。我们观察到,StarCoder 在许多语言上与 code-cushman-001 相匹配或超越。在一个名为 DS-1000 的数据科学基准测试中,它明显击败了 code-cushman-001 以及所有其他开放访问模型。但是,除了代码完成之外,让我们看看模型还能做什么!
技术助手
通过详尽的评估,我们发现 StarCoder 在编写代码方面非常有能力。但是我们还想测试它是否可以作为技术助手使用,毕竟它是在大量的文档和 GitHub 问题上进行训练的。受 Anthropic 的 HHH 提示的启发,我们构建了一个技术助手提示。令人惊讶的是,只需简单的提示,模型就能够充当技术助手并回答与编程相关的请求!
训练数据
该模型是在 The Stack 1.2 的一个子集上进行训练的。该数据集仅包含可许可许可证的代码,并包括一个选择退出的流程,以便代码贡献者可以从数据集中删除其数据(请参阅我是否在 The Stack 中)。我们与 Toloka 合作,从训练数据中删除了个人身份信息,例如姓名、密码和电子邮件地址。
关于 BigCode
BigCode 是由 Hugging Face 和 ServiceNow 共同领导的开放科学合作项目,致力于负责任地开发用于代码的大型语言模型。
其他发布内容
除了模型,我们还发布了一系列资源和演示:
- 包括 OpenRAIL 许可证的模型权重,包括中间检查点
- 用于数据预处理和训练的所有代码,使用 Apache 2.0 许可证
- 用于代码模型的全面评估测试工具
- 用于训练和评估 PII 删除的全面数据集
- 用于训练的完全预处理的数据集
- 用于在数据集中查找生成的代码的代码归属工具
链接
模型
- 论文:关于StarCoder的技术报告。
- GitHub:关于使用或微调StarCoder的所有信息。
- StarCoder:在Python上进一步训练的StarCoderBase。
- StarCoderBase:从The Stack训练而来的80多种语言。
- StarEncoder:在TheStack上训练的编码器模型。
- StarPii:基于StarEncoder的PII检测器。
工具和演示
- StarCoder聊天:与StarCoder聊天!
- VSCode扩展:与StarCoder一起编写代码!
- StarCoder Playground:使用StarCoder编写!
- StarCoder Editor:使用StarCoder编辑!
数据和治理
- StarCoderData:StarCoder的预训练数据集。
- 技术助手提示:使用此提示将StarCoder转换为技术助手。
- 治理卡:概述模型的治理情况。
- StarCoder许可协议:该模型根据BigCode OpenRAIL-M v1许可协议授权。
- StarCoder搜索:在预训练数据集中进行全文搜索。
- StarCoder成员资格测试:快速测试代码是否存在于预训练数据集中。
您可以在huggingface.co/bigcode找到所有资源和链接!