举荐语:
近期,代码的大型语言模型 (LM)在实现代码和从自然语言形容合成代码方面显示出微小的后劲。然而,以后最先进的代码 LM(例如 Codex (Chen et al., 2021))尚未公开,留下了许多对于其模型和数据设计决策的问题。
援用
咱们的指标是通过对各种编程语言中最大的现有模型的零碎评估来填补其中的一些空白:Codex、GPT-J、GPT-Neo、GPT-NeoX-20B 和 CodeParrot。只管 Codex 自身不是开源的,但咱们发现,针对自然语言建模,现有的开源模型的确在某些编程语言中获得了靠近的后果。咱们进一步确定了一个重要的缺失局部,即专门在多语言代码语料库上训练的大型开源模型。咱们公布了一个新模型 PolyCoder,它具备基于 GPT-2 架构的 2.7B 参数,该模型在单台机器上应用 12 种编程语言的 249GB 代码进行了训练。在 C 编程语言中,PolyCoder 优于包含 Codex 在内的所有模型。咱们训练有素的模型是开源的,可在此 https URL 上公开取得,这使得该畛域的将来钻研和利用成为可能。
援用
—— MobTech袤博科技资深java开发工程师 零零发 MobTech袤博
比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的数据用于训练。
而后是预训练的办法。
语言模型的预训练方法通常有三种。
第一种是自左向右的语言模型,依据上文预测下文,比拟实用于代码生成等;第二种是掩蔽语言模型,基于上下文预测屏蔽片段,比拟适宜代码分类等;第三种是编解码器模型,比拟实用于代码正文等工作。
这里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相比了:
例如,在次要用于评估Python代码的HumanEval上,PolyCoder的能力远不如Codex好:
据论文剖析,这可能是Python代码数据量、模型参数量有余等起因导致的。
此外,作者们也提到,做出PolyCoder的目标次要还是为了开源一个AI代码生成模型,让更多人参加钻研和应用。
目前代码曾经开源,无论是间接拿来用,还是试着在它的根底上开发新模型都能够。
感兴趣的小伙伴能够上手一试了~