Skip to main content
QUICK REVIEW

[论文解读] A Syntactic Neural Model for General-Purpose Code Generation

Pengcheng Yin, Graham Neubig|arXiv (Cornell University)|Apr 6, 2017
Natural Language Processing Techniques参考文献 44被引用 114
一句话总结

本文提出一种基于语法信息的神经模型,生成一个 AST 来输出格式正确的代码,在基于自然语言描述的一般用途 Python 代码方面达到最先进(state-of-the-art)的结果。

ABSTRACT

We consider the problem of parsing natural language descriptions into source code written in a general-purpose programming language like Python. Existing data-driven methods treat this problem as a language generation task without considering the underlying syntax of the target programming language. Informed by previous work in semantic parsing, in this paper we propose a novel neural architecture powered by a grammar model to explicitly capture the target syntax as prior knowledge. Experiments find this an effective way to scale up to generation of complex programs from natural language descriptions, achieving state-of-the-art results that well outperform previous code generation and semantic parsing approaches.

研究动机与目标

  • 将对自然语言描述进行解析以生成通用代码,而非无结构的文本序列为动机。
  • 通过用概率语法建模 AST 推导来利用目标语言的语法。
  • 通过在神经解码中加入结构信息以及父节点/兄弟节点上下文来提升代码生成质量。

提出的方法

  • 在固定的 Python 语法下定义 p(y|x) 为在给定 NL 输入 x 时生成 AST y 的概率。
  • 使用交替 ApplyRule(产生式规则应用)和 GenToken(终结符发射)动作的语法模型,以深度优先、从左到右的方式构建 AST。
  • 通过结构化神经连接(父节点输入和前沿节点嵌入)扩展解码器,以反映 AST 拓扑。
  • 用带注意力的编码器-解码器计算动作概率,包含:(i) 对 NL 输入的双向 LSTM 编码器,(ii) 具有语法信息状态的基于 LSTM 的解码器,(iii) 通过指针网络的拷贝机制从输入中抽取的终结符令牌。
  • 通过最大化从代码解析得到的 AST 派生的 oracle 动作序列的似然来训练;推理阶段对动作序列进行束搜索以产生最佳 AST。

实验结果

研究问题

  • RQ1带有语法信息的神经模型是否能够通过通过包含显式语法规则的 AST 生成来将代码生成约束为结构良好的程序?
  • RQ2在一般用途的代码生成中,结合 AST 结构(父节点/兄弟节点信息)是否能提升准确性和鲁棒性?
  • RQ3与先前的 Seq2Tree 和 LPN 方法在真实 Python 代码生成基准上的比较,基于语法的方 法表现如何?
  • RQ4从输入描述中复制(拷贝)在处理变量名和字面量时是否必不可少?

主要发现

数据集准确率(acc)BLEU-4(bleu)
HearthStone (HS)16.275.8
Django71.684.5
  • 所提出的语法驱动模型在 HS 和 Django 数据集上相对于 Latent Predictor Network 基线分别取得 11.7% 和 9.3% 的绝对准确率提升。
  • 对语法和 AST 结构的建模产生了符合语法的输出,并相对于 Seq2Tree 基线减少了无效 AST。
  • 在 HS 数据集上,模型每个示例大约生成 170 个动作(相比 Seq2Tree 的 300+),凸显了应用全部语法规则带来的效率提升。
  • 父节点输入显著提升 HS 的表现,表明更大的 AST 从分层信息流中获益。
  • 从输入中拷贝终结符(指针网络)对于处理变量名和字面量至关重要,移除会导致准确率显著下降。
  • 对于 IFTTT(领域特定语言),该模型与神经基线竞争力十足,在完整解析树准确度方面更接近经典方法,展示了更广的适用性。
  • 消融研究表明前沿嵌入在较小的语法上贡献较少,但在较大语法上有帮助;而一元闭包可减少动作数量,并且根据数据集特征可能有利。

更好的研究,从现在开始

从论文设计到论文写作,大幅缩短您的研究时间。

无需绑定信用卡

本解读由 AI 生成,并经人工编辑审核。