Skip to main content
QUICK REVIEW

[论文解读] Neural Sketch Learning for Conditional Program Generation

Vijayaraghavan Murali, Letao Qi|arXiv (Cornell University)|Mar 16, 2017
Software Engineering Research被引用 52
一句话总结

论文提出 Bayou,一个神经-符号系统,在程序草图上学习以条件生成类型安全的 Java 类似代码,然后使用组合搜索将草图具体化为完整程序。它在仅有少量标签的情况下预测包含大量 API 的方法体方面展现出强大能力。

ABSTRACT

We study the problem of generating source code in a strongly typed, Java-like programming language, given a label (for example a set of API calls or types) carrying a small amount of information about the code that is desired. The generated programs are expected to respect a "realistic" relationship between programs and labels, as exemplified by a corpus of labeled programs available during training. Two challenges in such conditional program generation are that the generated programs must satisfy a rich set of syntactic and semantic constraints, and that source code contains many low-level features that impede learning. We address these problems by training a neural generator not on code but on program sketches, or models of program syntax that abstract out names and operations that do not generalize across programs. During generation, we infer a posterior distribution over sketches, then concretize samples from this distribution into type-safe programs using combinatorial techniques. We implement our ideas in a system for generating API-heavy Java code, and show that it can often predict the entire body of a method given just a few API calls or data types that appear in the method.

研究动机与目标

  • 激励具有标签能揭示目标代码有限信息的条件程序生成。
  • 开发一个在程序草图上而非原始代码上运作的学习框架,以处理句法/语义约束。
  • 将草图的神经编码与类型引导的组合具体化结合起来,以生成可编译的程序。
  • 在 API 密集型的 Android/Java 代码上进行评估,展示从少量 API 调用或类型生成完整方法体。

提出的方法

  • 定义一个草图文法,在保留控制流和类型信息的同时抽象化低级名称。
  • 提出一个高斯编码-解码器(Ged),其中潜在变量 Z 将标签 X 与草图 Y 通过 P(Y|X,θ) 连接,解码器为 P(Y|Z,θ)。
  • 通过带有重参数化技巧的变分下界,使用最大条件似然性进行训练。
  • 采用两阶段合成:从 P(Y|X,θ) 采样草图,然后利用对部分具体化草图的类型导向随机搜索对其具体化为完整程序(PCS)。
  • 通过草图的语法和一种启发式具体化分布 P(Prog|Y),确保具体化遵循类型安全和 API 使用。
  • 在大约 150k 条 Android 方法转化为 Aml(Java-like)语料库上对 Bayou 进行评估,并与基于 AST 的基线和替代模型进行比较。

实验结果

研究问题

  • RQ1在 Java-like 语言上,是否可以通过在高层程序草图上学习而不是在完整代码上学习来有效实现条件程序生成?
  • RQ2草图驱动的学习再结合组合具体化,是否能够在有限信息下生成类型安全、可编译的程序,并匹配目标功能?
  • RQ3在部分可观测条件下,Ged 模型相对于基线条件生成模型和基于 AST 的学习者,在准确性和鲁棒性方面有何差异?
  • RQ4从草图生成并对候选程序进行排序的实际性能(时间、可行性)如何?
  • RQ5草图驱动的学习对未见数据和未见 API 使用模式的泛化能力如何?

主要发现

  • 即使在仅有少量 API 调用或类型的情况下,Bayou 也常能生成实现训练期间未见任务的复杂方法体。
  • Ged-Sk(基于草图的)模型在基于 AST 的基线和完整的 AML 基线之上具有更好的表现,在部分可观测情境下具有显著优势。
  • Ged-Sk 在多项评测指标上达到最佳整体准确性,并在具体化草图时保持良好结构。
  • 生成并排名 10 个候选程序大约需要 8 秒的平均时间。
  • 基于草图的学习相较直接的 AST/AML 学习对未见数据具有更好的泛化能力。

更好的研究,从现在开始

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

无需绑定信用卡

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