StarCoder2-15B-Instruct-v0.1 发布说明 / 新功能
Hugging Face 已发布 StarCoder2-15B-Instruct-v0.1,这是首个使用完全透明且宽松的流水线实现全自我对齐的代码大型语言模型(LLM)。该模型表明,高性能代码生成可以在不依赖人工标注数据或从诸如 GPT-4 等专有教师模型蒸馏的情况下实现。
性能基准
StarCoder2-15B-Instruct-v0.1 在 HumanEval 上取得 72.6 分,超过 CodeLlama-70B-Instruct 的 72.0 分。根据在 EvalPlus 基准上的评估,它是同规模下表现最佳的宽松 LLM,超越了 Grok-1、Command-R+、DBRX,并且与 Snowflake Arctic 480B 和 Mixtral-8x22B-Instruct 相近。
在 LiveCodeBench(使用 2023 年 9 月 1 日之后创建的编码题目)上的进一步评估显示,StarCoder2-15B-Instruct-v0.1 始终优于 OpenCodeInterpreter-SC2-15B,该模型是基于从 GPT-4 蒸馏的数据进行训练的。这表明 LLM 可能更有效地从自身分布内的数据学习,而不是从教师模型提供的偏移分布中学习。
自我对齐流水线
StarCoder2-15B-Instruct-v0.1 的训练流水线包括三个主要阶段:种子收集、指令生成和响应验证。
1. 收集种子代码片段
为了确保多样化的编程原则,团队从 The Stack v1 中提取了带有文档字符串的 Python 函数。最终得到的 25 万个 Python 函数数据集是从最初的 500 万函数中通过以下过滤条件得到的:
- 类型检查:使用 Pyright 启发式类型检查器去除存在静态错误的函数。
- 去污:使用精确字符串匹配从训练集移除基准项目。
- 文档字符串质量:StarCoder2-15B 充当评审,过滤掉文档不佳的函数。
- 近似去重:使用 MinHash 和局部敏感哈希(Jaccard 相似度阈值为 0.5)去除重复项。
2. Self-OSS-Instruct
通过使用 16 个少量示例的上下文学习,基础的 StarCoder2-15B 模型自行生成指令,过程分为两步:
- 概念提取:模型在种子函数中识别出基础编程原则(例如模式匹配、数据类型转换)。
- 指令生成:模型基于这些识别出的概念生成编码任务。
该过程生成了 23.8 万条指令。
3. 响应自我验证
与其从教师模型蒸馏响应,StarCoder2-15B 被指示同时生成响应及相应的测试以进行自我验证。
对于每条指令,模型生成 10 个样本。这些样本在沙箱环境中执行,仅保留通过执行测试的样本。在 240 万个生成的响应中,有 50 万通过了执行测试。去重后,最终得到一个包含 5 万条指令的 SFT(监督微调)数据集,每条指令配有一个随机通过的响应。
透明性与开源资源
与许多缺乏训练数据和流水线透明度的宽松模型不同,StarCoder2-15B-Instruct-v0.1 完全透明。Hugging Face 已开源以下资源: