当前位置: 首页 > 科技观察

会写代码的AI是开源的!C语言优于Codex,掌握12种编程语言

时间:2023-03-13 05:24:55 科技观察

能写出C语言优于Codex的AI代码生成模型,现已开源!这段时间,用AI写代码可以说是大红大紫,其中最著名的是OpenAI的Codex和DeepMind的AlphaCode。△基于Codex的Copilot但是,这两个AI模型都没有开源:AlphaCode只给出了一些测试样本,Codex只开放了API。为此,CMU的几位研究人员使用GPT-2创建了一个名为PolyCoder的AI代码生成模型,该模型也是开源的。据研究人员称,虽然PolyCoder最多只有27亿个参数(相比之下,Codex有120亿个参数),但它用C语言编写的代码甚至比Codex还要好。这里有什么秘密?用12种编程语言代码集进行训练首先我们来看训练数据集,这也是PolyCoder最大的特点之一。此前,Codex、CodeParrot等AI代码生成模型主要基于Python语言代码进行训练。例如,Codex的评估数据集之一的HumanEval评估了生成Python代码的效果。相比之下,PolyCoder使用多种编程语言代码集进行训练,共有12种:C、C#、C++、Go、Java、JavaScript、PHP、Python、Ruby、Rust、Scala和TypeScript。其中,C语言的代码量最大,达到221GB;Python代码的数据量小于Codex和CodeParrot。这里的PolyCoder使用的是GitHub上的公开代码,主要选取了各种编程语言的热门库,每个库至少有50个Star。据研究人员介绍,每个编程语言库的Star总数不超过25k,以避免模型生成的代码过于偏向最流行的编程语言(通常是越流行的编程语言,库中有更多星星)。将库中的文件提取出来,经过简单的处理(包括剔除重复代码),一共筛选出约254GB的数据用于训练。然后是预训练方法。语言模型通常有三种预训练方法。第一种是从左到右的语言模型,根据上面预测上下文,更适合代码生成等;二是maskinglanguagemodel,根据上下文预测和屏蔽片段,更适合代码分类;三是编码解码器模型更适合代码标注等任务。这里PolyCoder主要采用第一种预训练方式。与同样使用GPT-2训练的CodeParrot和Codex相比,PolyCoder在超参数设置上也有一些差异:PolyCoder一共提供了三种不同的模型,分别有27亿个参数、4亿个参数和1.6亿个参数。研究者可以根据自己的需要和不同的训练能力选择合适的模型。那么,最终训练出来的AI模型的代码生成效果如何呢?C语言写的特别好,Python就不行了。研究人员将PolyCoder与现有的AI代码生成模型进行了比较。由于AlphaCode不易对比(接口未开放),研究人员主要分析了以下模型,包括GPT-Neo、CodeParrot和Codex。其中,蓝色的是开源的,橙色的是不开源的:从参数数量上看,PolyCoder并不是最顶尖的,最大的27亿参数模型也只不到Codex的四分之一。研究人员首先将一系列模型与困惑度进行了比较,困惑度是语言模型评估中常用的一种衡量标准。困惑度(Perplexity),用来衡量语言模型(LM)的好坏。困惑度越低,语言模型对代码的混淆越少,模型生成效果越好。从图中可以看出,PolyCoder意外地取得了C语言中最好的结果(最低的困惑度)。用大量C语言训练PolyCoder的结果表明,即使模型整体原理不变(基于GPT-2),简单改变用于训练的代码集也可以训练出AI代码生成模型,擅长不同的语言风格。遗憾的是,从其他语言的角度来看,其生成的效果是完全无法与Codex相提并论的:例如在HumanEval上,主要用于评估Python代码,PolyCoder的能力远不及Codex:据分析论文中,这可能是Python代码数据量和模型参数量不足造成的。此外,作者还提到,做PolyCoder的主要目的是开源一个AI代码生成模型,让更多人参与研究和使用。目前代码已经开源,无论是直接使用还是尝试基于其开发新的模型。感兴趣的朋友可以开始了!作者介绍FrankXu,目前在读博士。CMU学生。研究方向为NLP、信息抽取等,发表多篇顶级会议论文,包括ICLR、ACL、EMNLP。毕业于上海交通大学,获学士和硕士学位,师从朱启礼教授。UriAlon,CMU博士后,研究兴趣为编程语言处理(PLP)、NLP和深度学习。GrahamNeubig是CMU的助理教授。他的研究兴趣是自然语言处理、机器翻译和基于机器学习的自然语言理解。VincentJ.Hellendoorn是CMU的计算机科学助理教授。主要研究方向为软件工程和机器学习。他致力于用智能化的方法帮助软件开发人员减少花在代码调试、程序优化等繁琐工作上的时间。项目地址:https://github.com/VHellendoorn/Code-LMs论文地址:https://arxiv.org/abs/2202.13169