🚀 Diff-Codegen-350M v2模型卡片
Diff-Codegen-350M v2是一款用于代码生成的差异模型,由CarperAI发布。该模型能根据文本片段和期望的更改描述,以差异格式智能修改文本,标记出新增、修改和删除的行。
🚀 快速开始
你可以通过这个Colab笔记本查看一个简单的模型调用示例。
✨ 主要特性
- 专业代码修改:相较于普通代码生成模型的少样本提示,差异模型专门用于对现有代码(尤其是较长的代码段)提出智能修改建议,且能依据自然语言描述(以提交消息的形式提供)进行修改。
- 实验研究价值:作为实验性研究成果,该模型有望为代码领域的研究社区提供帮助。
📦 安装指南
文档未提及安装步骤,故跳过此章节。
💻 使用示例
文档未提供代码示例,故跳过此章节。
📚 详细文档
模型描述
diff-codegen-350m-v2是Salesforce的codegen-350m-mono的微调版本,在从GitHub收集的大量提交数据集上进行了训练。它是一个实验性的研究产物,发布此结果和模型是希望能对更广泛的研究社区(尤其是对代码语言模型感兴趣的人)有所帮助。
训练数据
- 预训练数据:该模型基于Salesforce的codegen-350m-mono进行微调。此语言模型首先在The Pile上进行预训练,The Pile是一个由各种网络语料组成的800GB数据集。关于The Pile的数据集说明和论文分别可在这里和这里找到。该模型随后在多种语言的大量代码数据语料上进行微调,最后在Python代码数据集上进行微调。关于这些数据集的完整细节的Codegen论文可在这里找到。
- 微调数据集:本次微调的数据集由GitHub的提交记录组成,使用Google BigQuery公共数据集获取,这是一个包含大量开源GitHub仓库的最新公共快照。我们使用BigQuery对该数据集进行过滤,排除了星标少于100的仓库,并进一步将查询限制为仅包含开源非版权保护许可(如MIT、Apache等)的仓库以及提交消息超过10个字符的提交。我们还将范围限制在22种流行的编程语言、脚本语言和标记语言,包括Python、HTML、Bash脚本、SQL、C++等。过滤后得到了一个包含1900万条提交记录的数据集。我们的差异模型在来自BigQuery的提交数据集上进行训练,这是一个来自GitHub仓库的多种编程语言的大规模数据集。我们根据仓库的星标数量(>100星)、许可证(仅包含开源非版权保护许可的代码)和文件长度(排除长度超过2048个标记的文件)对数据集进行过滤。该模型使用Huggingface Codegen分词器进行训练。
训练细节
- 训练资源:该模型在由Stability AI提供的64块A100 GPU上,对10.8亿个标记进行了1个轮次的训练。
- 输入格式:每个文件在输入语言模型时的格式如下:
<NME> {FILE_NAME}
<BEF> {INPUT_FILE}
<MSG> {COMMIT_MESSAGE}
<DFF> {FILE_DIFF}
预期用途和局限性
由于模型规模较小且仅限于代码领域,不应期望该模型能推广到代码以外的领域,也不能对大量代码进行(成功的)推理。该模型旨在用于代码生成系统的原型设计,仅用于实验目的。此模型不提供任何保证,即使许可证允许,也不应在商业环境中使用。
局限性和偏差
- 语言表现不均:由于上下文长度限制以及排除了星标少于100的仓库,我们预计该差异模型在一些代表性不足的语言(如Lean或Coq)上的表现会较差。
- 代码安全性:该模型的输出不应被视为正确和安全的代码。在任何安全至关重要的关键任务环境中,都不应使用此模型。运行该模型的输出时,应尽可能在沙箱环境(如gVisor)中进行,因为模型很可能会生成可能删除文件、发送HTTP请求或包含严重安全漏洞的代码。
- 输出质量问题:与其他语言模型一样,diff-codegen容易产生幻觉,输出可能存在偏差、刻板印象或有毒内容。从该模型生成内容时,无法保证输出的真实性。
评估结果
完整的评估结果可查看我们的博客文章。
🔧 技术细节
该模型在64块A100 GPU上,对10.8亿个标记进行了1个轮次的训练。输入文件按照特定格式处理,使用Huggingface Codegen分词器进行训练。
📄 许可证
该模型采用MIT许可证。
致谢
感谢Honglu Fan、Harry Saini、Herbie Bradley、Reshinth Adithyan和Joel Lehman的努力!感谢Nitarshan Rajkumar对本模型卡片提供的反馈。