Skip to main content
QUICK REVIEW

[论文解读] Program Synthesis and Semantic Parsing with Learned Code Idioms

Richard Shin, Miltiadis Allamanis|arXiv (Cornell University)|Jun 26, 2019
Software Engineering Research参考文献 41被引用 44
一句话总结

Patois 将高级代码成语与低级令牌交错混合,通过从语料库挖掘常见的 AST 片段并训练一个基于树的神经合成器在代码生成时输出成语,从而在 Hearthstone 和 Spider 数据集上提高语义解析的准确性。

ABSTRACT

Program synthesis of general-purpose source code from natural language specifications is challenging due to the need to reason about high-level patterns in the target program and low-level implementation details at the same time. In this work, we present PATOIS, a system that allows a neural program synthesizer to explicitly interleave high-level and low-level reasoning at every generation step. It accomplishes this by automatically mining common code idioms from a given corpus, incorporating them into the underlying language for neural synthesis, and training a tree-based neural synthesizer to use these idioms during code generation. We evaluate PATOIS on two complex semantic parsing datasets and show that using learned code idioms improves the synthesizer's accuracy.

研究动机与目标

  • 通过把高层推理与底层实现细节联系起来,激发在通用语言中合成现实世界程序的挑战。
  • 提出从语料库自动挖掘常见代码成语,以将成语作为一级运算符扩展语法。
  • 训练一个基于树的神经合成器,使其在生成过程中能够输出成语或它们的主体,以实现推理层次的交错。
  • 证明面向成语的训练在语义解析基准测试上提高了合成准确性。
  • 展示成语如何压缩和构造程序片段,以简化生成并实现跨数据集的泛化。

提出的方法

  • 使用非参数贝叶斯方法(Pitman-Yor 过程)从语料库挖掘频繁的代码成语,以构建成语的后验 pTSG。
  • 用成语片段扩展底层语法,并将它们的非终结叶标记为充当命名参数。
  • 训练一个基于树或图的神经生成器,在程序构建过程中输出成语或原始 AST 片段。
  • 使用一个专门的训练目标,在有益时鼓励输出成语,同时保留原始生成轨迹。
  • 在推理阶段,将成语输出替换为其主体,像逐步展开一样展开 IDE。
  • 在 Hearthstone(Python 程序)和 Spider(SQL)语义解析任务上使用精确匹配和 BLEU 指标进行评估。

实验结果

研究问题

  • RQ1从自然语言描述生成时,自动挖掘的代码成语是否能改善通用语言的神经程序合成?
  • RQ2在每个生成步骤将高级成语与低级令牌交错是否比端到端的逐字生成能带来更好的语义解析准确性?
  • RQ3成语集合的规模和质量(K)如何影响在不同领域的合成性能?
  • RQ4基于树的解码器是否能够通过在推理阶段保留完整成语主体的训练目标来有效利用成语?
  • RQ5成语是否能跨具有不同模式和编程任务(Python 与 SQL)的数据集实现泛化?

主要发现

  • 从训练数据中挖掘的成语提高 BLEU 分数,并且可以显著提升精确匹配准确度,尤其是在较大的成语集合(例如 K=80)的 Hearthstone 测试数据上。
  • 在 Hearthstone 上,最佳的成语配置在精确匹配上带来显著提升(例如提升至多 4.5%)以及 BLEU 分数。
  • 在 Spider 上,使用成语的模型在多个 K 值下达到或超过基线的精确匹配性能。
  • 该方法证明学习的成语能够捕捉频繁且语义上有意义的模式,如常见的句法结构和领域 API。
  • 成语可以是较大的片段,能够一次性输出大块代码,减轻解码器的任务。

更好的研究,从现在开始

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

无需绑定信用卡

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