时间:2022-10-09 17:11:42 | 浏览:3004
萧箫 发自 凹非寺
量子位 | 公众号 QbitAI
比Codex还会写C语言的AI代码生成模型,现在开源了!
这段时间,用AI写代码可以说是大火,其中最著名的要属OpenAI的Codex和DeepMind的AlphaCode。
△基于Codex的Copilot
然而,这两个AI模型,全都没有开源:
其中AlphaCode只给出了一些测试样例,而Codex只开放了API。
为此,来自CMU的几个研究人员,用GPT-2搞出了一个名叫PolyCoder的AI代码生成模型,而且还是开源的。
据研究人员表示,虽然PolyCoder最大只有27亿参数(相比Codex有120亿参数),但它用C语言写出来的代码,比Codex的效果还要好。
这里面究竟有什么秘诀?
首先来看训练用的数据集,这也是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模型,代码生成效果如何?
研究人员将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代码生成模型,让更多人参与研究和使用。
目前代码已经开源,无论是直接拿来用,还是试着在它的基础上开发新模型都可以。
感兴趣的小伙伴可以上手一试了~
一作许方正(Frank Xu),目前在CMU读博,研究方向是NLP、信息抽取等,发表过多篇顶会论文,包括ICLR、ACL和EMNLP等。本硕毕业于上海交通大学,师从朱其立教授。
Uri Alon,在CMU进行博士后工作,研究方向是编程语言处理(PLP)、NLP和深度学习。
Graham Neubig,CMU助理教授,研究方向是NLP、机器翻译和基于机器学习的自然语言理解。
Vincent J. Hellendoorn,CMU计算机助理教授,主要研究方向是软件工程和机器学习,致力于利用智能方法帮助软件开发人员减少代码调试、程序优化等繁琐工作的时间。
不知道作者们是否已经在用这个AI撸代码了(手动狗头)
项目地址:
https://github.com/VHellendoorn/Code-LMs
论文地址:
https://arxiv.org/abs/2202.13169
— 完 —
量子位 QbitAI · 头条号签约
关注我们,第一时间获知前沿科技动态
随着互联网的发展以及编程技术的不断更新,编程语言的种类也是越来越多,甚至现在的话针对每一个互联网的领域,都有不同的适合它的编程语言。不同的语言是为了实现不同的目标而设计的。不过无论你是一个有经验的程序员,还是你是这个编程网络中的新手,有一
学习资料:
先来看看本节知识的结构图吧!接下来我们就逐步来看一下所有的知识点:结构的演化C++中的类是从结构演变而来的, 所以我们可以称C++为”带类的C”.结构发生质的演变C++结构中可以定义函数, 称之为成员函数结构定义格式, 像这样:struct
编辑:桃子【新智元导读】程序员「35岁定律」更像是圈内人的自嘲。近日,一位45岁程序员发帖称,「自己精通各种技术体系,却连个面试机会都没有」。据统计,不论是在国内还是国外,35岁以上的程序员占比最少,尤其在中国仅有9.4%。大龄码农真的如此
最近网上对“AI外呼”的讨论非常多,许多人将其等同于“骚扰电话”、“电销机器”,前天我们从法规上说明了,“大厂做的AI外呼不是骚扰电话”,依然有用户跟我们掰扯说AI外呼就是换了马甲的电销,今天我们再从技术上、功能上来看看AI外呼到底是不是电
一个半小时的试听课结束后,儿子很兴奋,在课程销售的热情推介下,杭州的程芳(化名)刷了近3万元,给儿子报了两年半的编程课。“这是目前为止,给他报的最贵的兴趣班。”最近两年,在中小学生的课外培训市场上,少儿编程像一匹黑马冲了出来,日渐火热。上个
长江日报融媒体6月25日讯(记者陈智)对于非计算机专业的80后、90后来说,编程至今仍是能力范围以外的“技术活”,一串串代码只有程序员们能“驾驭”。但是,现在的不少00后已经可以熟练制作愤怒的小鸟,植物大战僵尸等小游戏。长江日报记者在百度上
在政策以及环境的驱动下,我国的少儿编程市场逐渐发展成型。但由于国内少而变成试产发展起步较晚,目前还有较大的空间有待发掘。10月10日,网易宣布正式上线少儿编程平台“网易卡搭编程”,完成了编程教育的重要布局。此外,编程猫获3亿C轮融资;小码王
青少年培训市场刮起了“编程热”,一如当年的少儿英语和奥数培训 少儿编程缘何成了资本的“香饽饽”?“时代真的不一样了,现在的孩子都开始学起了我在大学才开始接触的编程。”在重庆一软件开发公司上班的刘明看着手中刚刚拿到的宣传单感叹道,现在的培训机
随着“双减政策”的实施,课外辅导机构已经基本被取缔了,家长又要开始担心孩子的学习问题了,尤其是英语,作为一门主流的沟通语言,学好它对孩子未来的发展大有裨益。这也就意味着学科类学习重心回归课本的教育方式再次到来,回归课本有利于巩固孩子们的基础