萧箫 发自 凹非寺
量子位 | 公众号 QbitAI
比Codex还会写C语言的AI代码生成模型,现在开源了!
这段时间,用AI写代码可以说是大火,其中最著名的要属OpenAI的Codex和DeepMind的AlphaCode。
然而,这两个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 Stars。
据研究人员表示,每种编程语言库的Stars总数加起来不超过25k,以避免模型生成的代码效果太过于倾斜最流行的编程语言(通常编程语言越流行,库的Stars就越多)。
通过提取库中的文件、经过简单处理(包括消除重复代码)后,一共筛选出大约254GB的数据用于训练。
然后是预训练的方法。
语言模型的预训练方法通常有三种。
第一种是自左向右的语言模型,根据上文预测下文,比较适用于代码生成等;第二种是掩蔽语言模型,基于上下文预测屏蔽片段,比较适合代码分类等;第三种是编解码器模型,比较适用于代码注释等任务。
原文链接:https://zhuanlan.zhihu.com/p/477939993