[论文解读] Structural Language Models for Any-Code Generation.
本文提出结构化语言建模(SLM),一种新型的任意代码生成方法,该方法将代码建模为抽象语法树(AST),而非序列,从而实现对任意编程语言中任意表达式的无限制生成。通过利用到达每个节点的所有路径来计算条件概率,SLM 在生成 Java 和 C# 代码方面显著优于序列到序列模型及先前的结构化方法。
We address the problem of Any-Code Generation (AnyGen) - generating code without any restriction on the vocabulary or structure. The state-of-the-art in this problem is the sequence-to-sequence (seq2seq) approach, which treats code as a sequence and does not leverage any structural information. We introduce a new approach to AnyGen that leverages the strict syntax of programming languages to model a code snippet as a tree - structural language modeling (SLM). SLM estimates the probability of the program's abstract syntax tree (AST) by decomposing it into a product of conditional probabilities over its nodes. We present a neural model that computes these conditional probabilities by considering all AST paths leading to a target node. Unlike previous structural techniques that have severely restricted the kinds of expressions that can be generated, our approach can generate arbitrary expressions in any programming language. Our model significantly outperforms both seq2seq and a variety of existing structured approaches in generating Java and C# code. We make our code, datasets, and models available online.
研究动机与目标
- 为解决序列到序列模型在代码生成中的局限性,这些模型忽略结构语法,限制词汇量和表达式多样性。
- 实现支持任意表达式和无限制词汇的任意代码生成(AnyGen),适用于任何编程语言。
- 开发一种神经模型,通过利用所有相关路径计算 AST 节点上的条件概率,更有效地捕捉结构依赖关系。
- 在代码生成质量与灵活性方面超越现有的序列到序列模型和结构化生成方法。
提出的方法
- 该模型将代码表示为抽象语法树(AST),并将整个 AST 的概率表示为各节点条件概率的乘积。
- 通过考虑所有通向目标节点的 AST 路径来计算条件概率,从而实现上下文感知的生成。
- 采用神经架构来计算这些条件概率,从 AST 中的结构模式中学习。
- 该方法将 AST 生成任务分解为一系列基于结构上下文的节点逐个预测。
- 与先前的结构化方法不同,SLM 不限制可生成表达式的类型或复杂度。
- 该模型在代码数据集上端到端训练,学习在多种编程语言中预测有效代码结构。
实验结果
研究问题
- RQ1结构化语言建模方法是否能在任何编程语言中无词汇或语法限制地生成任意代码表达式?
- RQ2SLM 在生成语法正确且多样化的代码方面与序列到序列模型相比表现如何?
- RQ3与现有结构化方法相比,结构化建模在多大程度上能提升代码生成性能?
- RQ4该模型是否无需架构修改即可在不同编程语言(如 Java 和 C#)之间泛化?
主要发现
- SLM 在生成 Java 和 C# 代码方面显著优于最先进的序列到序列模型。
- 该模型成功生成了任意表达式,包括复杂且无限制的语法,而先前的结构化方法存在硬性约束。
- SLM 通过利用通向每个节点的所有 AST 路径,充分捕捉结构上下文,从而实现更高质量的代码生成。
- 该方法在编程语言之间具有泛化能力,在 Java 和 C# 数据集上均表现出有效性。
- 该模型的性能超越了多种现有结构化生成技术,表明完整 AST 路径建模具有优势。
- 作者发布了代码、数据集和训练好的模型,支持可复现性,并推动任意代码生成领域的进一步研究。
更好的研究,从现在开始
从阅读论文到最终审阅,大幅缩短您的研究时间。
无需绑定信用卡
本解读由 AI 生成,并经人工编辑审核。