StarCoder:多语言代码技术助手
StarCoder 是一款基于 GitHub 数据集的先进的大型语言模型,包括超过80种编程语言,具有超过8,000个令牌的上下文长度。StarCoder 可以处理比其他开放型语言模型更多的输入,使其成为代码完成和其他任务的强大工具。但是,StarCoder 不仅仅是一个代码完成工具 - 它还可以充当多语言技术助手,能够回答与编程相关的请求并协助技术任务。StarCoder 在流行的编程基准测试中表现优于现有的开放型语言模型,且与封闭模型相匹配或超越,成为社区在其用例和产品中使用和适应的坚实基础。
一、关于BigCode
BigCode是由Hugging Face和ServiceNow共同领导的开放科学合作项目,致力于负责任地开发大型代码语言模型。
二、关于StarCoder
StarCoder和StarCoderBase是针对代码的大型语言模型(Code LLMs),使用GitHub的开放授权数据进行训练,包括80多种编程语言、Git提交、GitHub问题和Jupyter笔记本。与LLaMA类似,我们为1万亿令牌训练了一个约15B参数的模型。我们针对35B Python令牌微调了StarCoderBase模型,得到了一个我们称为StarCoder的新模型。
我们发现,StarCoderBase在流行的编程基准测试中优于现有的开源Code LLMs,并且与OpenAI的code-cushman-001(驱动早期版本的GitHub Copilot的原始Codex模型)等封闭模型相匹配或超越。StarCoder模型的上下文长度超过8,000个令牌,比任何其他开源LLM都能处理更多的输入,可以实现各种有趣的应用。例如,通过提示StarCoder模型一系列的对话,我们使其能够充当技术助手。此外,该模型可用于自动完成代码、通过指令修改代码以及用自然语言解释代码片段。我们采取了几项重要的步骤,以确保安全的开源模型发布,包括改进的PII去识别管道、一种新颖的归属追踪工具,并将StarCoder公开发布在改进版的OpenRAIL许可证下。更新后的许可证简化了企业将模型集成到其产品中的流程。我们相信,凭借其强大的性能,StarCoder模型将成为社区使用和适应其用例和产品的坚实基础。
三、评估
我们对StarCoder和几个类似模型进行了全面评估,并进行了多种基准测试。一个流行的Python基准测试是HumanEval,它测试模型是否能根据函数签名和文档字符串完成函数。我们发现,尽管StarCoder和StarCoderBase规模要小得多,但它们在完成任务上优于最大的模型,包括PaLM、LaMDA和LLaMA。它们也优于CodeGen-16B-Mono和OpenAI的code-cushman-001(12B)模型。我们还注意到,该模型的一个失败案例是它会生成“#Solution here”代码,这可能是因为这种代码通常是练习的一部分。为了强制模型生成实际的解决方案,我们添加了提示符“solutions/solution_1.py\n# Here is the correct implementation of the code exercise”。这显著提高了StarCoder
Model 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的子集上进行训练的。该数据集仅包含可许可代码,并包括一个选择退出的过程,使得代码贡献者可以将其数据从数据集中删除(请参见Am I in The Stack)。此外,我们从训练数据中删除了个人可识别信息,例如姓名、密码和电子邮件地址。
六、额外的发布
除了模型外,我们还发布了一些资源和演示:
- 模型权重,包括带有OpenRAIL许可证的中间检查点
- 所有用于数据预处理和训练的代码,采用Apache 2.0许可证
- 用于代码模型的全面评估工具
- 用于训练和评估PII去识别的新PII数据集
- 用于训练的完全预处理数据集
- 用于在数据集中查找生成的代码的代码归属工具
七、链接
- 模型
- 论文:关于StarCoder的技术报告。
- GitHub:了解使用或微调StarCoder的所有内容。
- StarCoder:在Python上进一步训练的StarCoderBase。
- StarCoderBase:在The Stack中训练的80多种语言。
- StarEncoder:在TheStack上训练的编码器模型。
- StarPii:基于StarEncoder的PII检测器。
- 工具和演示
- StarCoder Chat:与StarCoder聊天!
- VSCode扩展:使用StarCoder编写代码!
- StarCoder Playground:与StarCoder一起写作!
- StarCoder Editor:使用StarCoder编辑!
- 数据和治理
- StarCoderData:StarCoder的预训练数据集。
- 技术助手提示:通过这个提示,你可以把StarCoder变成技术助手。
- 治理卡片:概述模型治理。
- StarCoder许可协议:该模型采用BigCode OpenRAIL-M v1许可协议。
- StarCoder搜索:在预训练数据集中进行全文搜索代码。
- StarCoder成员资格测试:快速测试代码是否出现在预训练数据集中。
您可以在huggingface.co/bigcode找到所有资源和链接!