nmt模型源文本词项序列_Code2seq: 可用于多种任务的代码序列化模型

338d362dd94c431d6a83be531292d08c.png

Paper

来自ICLR2019

818fe5689ed7e7b5c860153661eb6d86.png

Abstract

来自神经机器翻译(NMT)领域的Seq2seq模型已经在该领域的很多任务上取得了SOTA的结果,本文提出Code2seq模型,利用编程语言中的语法结构对源代码进行编码。该模型在代码片段的AST种提取一部分路径,进行LSTM编码后利用Attention生成目标序列。该模型在2个任务、2种编程语言、4个数据集上进行实验,取得了比之前的模型都好的效果,验证了模型的有效性。

Motivation

目前有许多针对源代码和自然语言之间的关系建模的任务,比如代码归纳,代码分类,代码检索,代码生成等等。这篇工作考虑从源代码生成自然语言序列的问题。对于这种问题之前的做法不能很好的提取语法信息,因此本工作利用对代码片段AST的采样进行encoding的方式来更好的提取语法信息。

Contribution

该模型有效的提取了代码片段的语法特征,是第一个直接使用AST路径的端到端的序列生成模型。该模型的有效性在以下两个任务上得到了验证: 1)代码归纳:根据java方法体预测方法名字(下图左侧a图),2)代码captioning:预测一条自然语言语句来描述C#的代码片段(下图右侧b图)。

b04f8a676a0fc539402bd01c2725b327.png
每一条标注的线是每一步decode时最大attention的path

Background: About AST

抽象语法树(abstract syntax code,AST)是源代码的抽象语法结构的树状表示,树上的每个节点都表示源代码中的一种结构。AST存在的原因是,它不依赖于具体的文法,不依赖于语言的细节,我们可以对其进行各种各样的操作,在编译器中可以为后端提供稳定、统一的接口,极大的提高了编译器的可维护性。

AST的叶子结点常常是一些用户定义的名字或标识符,非叶子结点是一些循环,变量声明,表达式等结构。例如下图中c是a的AST,名字(num)和类型(int)等等是叶子节点,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值