北大新成果!首次成功地将CNN解码器用于代码生成 | 论文+代码

2018-11-25 14:40:22 来源:网络整理 作者:管理员

原标题:北大新成果!首次成功地将CNN解码器用于代码生成 | 论文+代码

乾明 发自 凹非寺

想象一下。

直接说你想干什么,就能生成相应的代码,会是多么“功德无量”一件事。

最直接受益的,就是程序员群体。

再也不用饱受“996”的折磨,也不用摸着不断后退的发际线而黯然神伤。

北大新成果!首次成功地将CNN解码器用于代码生成 | 论文+代码

现在,这一天又近了一些。

最近,有一篇论文提出了一种基于语法的结构化CNN代码生成器,用《炉石传说》(HearthStone)基准数据集进行实验的结果表明:

准确性上明显优于以前最先进的方法5个百分点。

北大新成果!首次成功地将CNN解码器用于代码生成 | 论文+代码

这篇论文目前已经被AAAI 2019收录。作者在论文中表示,他们是第一个成功地将CNN解码器用于代码生成的团队。

那么问题来了:

将CNN解码器用到代码生成,与之前的方法相比,到底有什么不同?

他们的模型又有什么特殊之处?效果到底好在哪?

下面,我们就来一一回答这些问题。

用CNN解码器生成代码的优势

基于自然语言描述生成代码,是挺难的一件事。

现在,通常用循环神经网络( RNN)进行序列生成,生成一首诗、进行机器翻译,都没问题。

但用在生成代码上,“麻烦”就来了。

程序中有很多结构化的信息,对程序建模很重要,但传统的Seq2Seq神经网络,并没有明确对程序结构进行建模。就比如下面这个Python的抽象语法树(AST)。

北大新成果!首次成功地将CNN解码器用于代码生成 | 论文+代码

其中,n3和n6两个节点应该作为父子节点紧密交互,但如果使用传统的Seq2Seq方法,就会导致他们“父子离散”,彼此远离。

为了解决这个问题,很多人都开始想各种办法。其中一个关键方法就是用卷积神经网络(CNN),毕竟人家效率高,训练也简单。

这篇论文,就是一个代表。而且是第一个成功地将CNN解码器用于代码生成的,颇具分水岭意义。

在论文中,作者也介绍说,这比原来的RNN强多了。最主要的一点就是:

输入的程序一半都比自然语言句子长得多,就算RNN有LSTM(long short-term memory)的加持,也会一直受到依赖性问题的困扰。

而CNN就不一样了,可以通过滑动窗口(slide window)有效地捕捉不同区域的特征。

那,这个模型是怎么设计的呢?

模型设计

论文中介绍的CNN,是一种基于语法的结构化CNN。模型会根据AST的语法结构规则生成代码,而且还能预测语法规则的顺序,最终构建整个程序。

那,他们是如何预测语法规则的呢?主要基于三种类型的信息:

指定要生成的程序的源序列、之前预测的语法规则和已经生成的部分AST。

第一种很好理解,是编码器的输入。后两种的任务,就是使解码器能够自回归(autoregressiveness),并且解码器也以编码器为条件。

为了让这个结构化CNN更适合于代码生成,他们还设计了几个不同的组件:

第一,基于树的卷积思想,在AST结构上应用滑动窗口。然后,设计另一个CNN模块对部分AST中的节点进行前序遍历。这两种类型的CNN不仅捕获序列中的“邻居”信息,还捕获树结构中的“邻居”信息。

第二,将另一个CNN模块应用于要生成的节点的祖先,让网络知道,在某个步骤中在哪里生成。从而增强“自回归性”。

第三,设计专门的注意力机制,将CNN的特征与不同的CNN模块进行交互。此外,作者表示,在代码生成过程中考虑范围名称(例如,函数和方法名称)是有用的,所以就使用了这样的信息当作几个池层的控制器。

于是,就得出了这样的一个模型。

北大新成果!首次成功地将CNN解码器用于代码生成 | 论文+代码

模型概述。虚线箭头表示注意力控制器。

这个模型,效果到底怎么样呢?

模型效果

作者用两个任务评估了模型的效果。一个是生成《炉石传说》游戏的Python代码,一个是用于语义解析的可执行逻辑形式生成。

生成《炉石传说》的Python代码

这个任务使用的是《炉石传说》基准数据集,一共包括665张不同卡牌。

输入是字段的半结构化描述,例如卡牌名、成本、攻击、描述和其他属性;

北大新成果!首次成功地将CNN解码器用于代码生成 | 论文+代码

要输出的是实现卡牌功能的Python代码片段。

北大新成果!首次成功地将CNN解码器用于代码生成 | 论文+代码

通过准确性与BLEU分数来测量模型的质量。在准确性方面,作者追踪了之前大多数研究相同的方法,根据字符串匹配计算精度(表示为StrAcc )。

有时候,几个生成的程序使用了不同的变量名,但功能是正确的,这就需要人为去调整。并用Acc +表示人为调整的精度。

最后,用BLEU值评估生成的代码的质量。

结果如下图所示:

北大新成果!首次成功地将CNN解码器用于代码生成 | 论文+代码

在准确性和BLEU分数方面,都优于之前的所有模型。StrAcc比之前最好的模型高出了5个百分点。经过人为调整后的Acc+达到了30.3%,增加了3个百分点,之前的模型最好的效果提高了2%。

作者认为,这显示了他们方法的有效性。至于之前的模型跟他们的模型在BLEU分数上的相似性,作者解释道,代码生成还是要看细节。

语义解析任务

在语义解析任务中,使用的两个语义解析数据集( ATIS和JOBS ),其中输入是自然语言句子。ATIS的输出是λ演算形式,而对于JOBS,输出的是Prolog形式。

北大新成果!首次成功地将CNN解码器用于代码生成 | 论文+代码

在这两个数据集中,论文中提出的模型并没有展现出什么优势。

北大新成果!首次成功地将CNN解码器用于代码生成 | 论文+代码

作者在论文中表示,这可能是因为语义解析的逻辑形式通常很短,因此,RNN和CNN都可以生成逻辑形式。

不过,这个实验也证明了用CNN进行代码生成的普遍性和灵活性。毕竟,整个模型基本上是为长程序设计的,在语义解析方面也很好。

关于作者

按照署名顺序,作者分别为孙泽宇、朱琪豪、牟力立、熊英飞、李戈、张路,其中其中熊英飞为通讯作者。作者单位为北京大学信息科学技术学院。

北大新成果!首次成功地将CNN解码器用于代码生成 | 论文+代码

传送门

论文:

https://arxiv.org/abs/1811.06837

GitHub:

https://github.com/zysszy/GrammarCNN

显示全文
为您推荐
宋伊人、丁泽仁主演的《花青歌》过审,人设有趣,口碑却让人担忧
宋伊人、丁泽仁主演的《花青歌》过审,人设有趣,口碑却让人担忧

2021年由楼健执导,苏晓彤、王子奇领衔主演的《御赐小仵作》可以说取得了不错的口碑与成绩,使这部小成本剧集达到了S+级的热度与播放量,成了近两年来当之无愧的古代仵作题材的古装甜爽探案喜剧。如今距离这部.........

发布时间:2023-06-01 18:03:12

鹅蛋能蒸蛋羹吗
鹅蛋能蒸蛋羹吗

【导读】 鹅蛋能蒸蛋羹吗,下面是小编为你收集整理的,希望对你有帮助!能。鹅蛋是家禽鹅生下的卵,表面较光滑,白色,呈椭圆形,个体很大,其重量是一般鸡蛋的四、五倍,味道有些油,但质地较粗糙,草腥味较重,食味不及鸡鸭蛋,新鲜的鹅蛋必须烹饪后食用。此外,鹅蛋中还含有丰富的营养......

发布时间:2023-06-01 18:01:06

江疏影与王传君同框叙旧
江疏影与王传君同框叙旧

江疏影和王传君,两个看似完全没有交集的名字,在5月28日有了神奇的新反应因为一起参加《五十公里桃花坞3》,老同学很少在镜头前同框。除了花旦 江疏影说,他想和王传君在一起,因为这会让他更有安全感。这也让.........

发布时间:2023-06-01 17:03:17

向日葵传播种子的方法 这些方法可以传播种子
向日葵传播种子的方法 这些方法可以传播种子

【导读】 向日葵传播种子的方法 这些方法可以传播种子,下面是小编为你收集整理的,希望对你有帮助!向日葵不仅可以观赏食用,另外在工业方面也有一定作用,向日葵有很多种不同传播种子的方法,分别是自体传播、风体传播、水体传播、鸟类传播、哺乳类动物传播等,传播范围也是相当广泛。向日葵传播种子的方法1.自体......

发布时间:2023-06-01 17:01:05

《奥本海默》新预告泄露 展示更多新角色
《奥本海默》新预告泄露 展示更多新角色

在很早之前发布首支官方预告后,人们关于克里斯托弗·诺兰自编自导的新片《奥本海默》愈加等待。而近日网上走漏出了一段长达 3 分钟的最新预告,其中展示了更多新角色,包含马特·达蒙、佛罗伦斯·皮尤和小罗伯特.........

发布时间:2023-06-01 16:03:25

纳摩盖吐龙:蒙古超巨型恐龙(长21米/长有钉状牙齿)
纳摩盖吐龙:蒙古超巨型恐龙(长21米/长有钉状牙齿)

【导读】 纳摩盖吐龙:蒙古超巨型恐龙(长21米/长有钉状牙齿),下面是小编为你收集整理的,希望对你有帮助!纳摩盖吐龙是一种蜥脚类恐龙,诞生于7500万年前-7000万年前的白垩纪末期,体长最多可达21米,属于超巨型恐龙的一种,因为出土的四颗钉子状牙齿而被命名,第一批化石发现于蒙古国,因此也叫做蒙古纳摩盖吐......

发布时间:2023-06-01 16:01:04

日内瓦是哪个国家的首都:瑞士的一个城市(并不是首都)
日内瓦是哪个国家的首都:瑞士的一个城市(并不是首都)

【导读】 日内瓦是哪个国家的首都:瑞士的一个城市(并不是首都),下面是小编为你收集整理的,希望对你有帮助!我们知道地球对于人类来说是一个非常大的星球,因此地球上还有许多我们人类没能发掘的地方,而地球上的国家也是非常多的,日内瓦这个城市也是一个比较有名的城市,那么日内瓦是哪个国家的首都呢?它具体又在哪个地方......

发布时间:2023-06-01 15:01:04

《欢迎光临》播出近半,口碑稳中有升
《欢迎光临》播出近半,口碑稳中有升

本报记者 李夏至由正午阳光出品制作的都市生活轻喜剧《欢迎光临》在北京卫视播出接近一半,口碑稳中有升。该剧讲述一个酒店门童和空姐的恋爱故事,看似多少有点悬浮的设定需要大量的生活细节与戏剧手段来弥补。对《.........

发布时间:2023-06-01 14:03:12

月球背面为什么去不了,月球背面到底有什么?
月球背面为什么去不了,月球背面到底有什么?

【导读】 月球背面为什么去不了,月球背面到底有什么?,下面是小编为你收集整理的,希望对你有帮助!作为太阳系中最为特殊的天体,月亮总是以一面面向地球,从来没见过它的背面长什么样,这主要是由于月球的自转和公转周期相同。然而自人类登月成功以来,如今已经成功发射探测器到火星了,但却根本没有月球背面的消息......

发布时间:2023-06-01 14:01:04

朱一龙爆发式的哭戏,刷新演艺圈新水平,拭目以待
朱一龙爆发式的哭戏,刷新演艺圈新水平,拭目以待

朱一龙主演的电影《峰爆》9月17日即将在各大电影院上映,这部属于灾难型的电影,里面没有过多装饰的场景和华丽的服饰。在灾难面前,个人是多么的渺小,他们帮助困难群众,为了保护家园逆行而上,在这期间产生的父.........

发布时间:2023-06-01 13:03:11

鸡胗怎么炒
鸡胗怎么炒

【导读】 鸡胗怎么炒,下面是小编为你收集整理的,希望对你有帮助!用料:小米椒,鸡胗,大蒜,盐,生抽,黄酒。步骤:1、鸡胗冷水下锅,煮变色了捞起切片。鸡胗要切花,一来好看,二来容易熟又保持了爽口感。2、切好的鸡胗加盐加黄酒加生抽腌制半小时以上。3、大蒜切成蒜蓉,小米......

发布时间:2023-06-01 13:01:03

周迅觉得何炅黄磊太像空巢老人
周迅觉得何炅黄磊太像空巢老人

今日何炅晒出与黄磊的《向往的生活7》海报,何炅黄磊两人牵着小h小o画面很温馨夸姣的呢。可是有的网友却戏弄:“如同两个假笑空巢白叟”“孩子们都离开了,就剩俩老人了,能开心吗?”“这笑脸是p的吧?”这一季.........

发布时间:2023-06-01 12:03:13