[论文解读] Retrieval-Based Neural Code Generation
本文提出 ReCode,一种基于检索的神经代码生成模型,通过从相似的训练样本中检索并重用动作子树模板,提升代码的语法正确性。通过利用基于动态规划的句子对齐方法与 n-gram 子树检索,ReCode 在两个代码生成任务上性能提升最高达 +2.6 BLEU,增强了对罕见或复杂代码模式的泛化能力。
In models to generate program source code from natural language, representing this code in a tree structure has been a common approach. However, existing methods often fail to generate complex code correctly due to a lack of ability to memorize large and complex structures. We introduce ReCode, a method based on subtree retrieval that makes it possible to explicitly reference existing code examples within a neural code generation model. First, we retrieve sentences that are similar to input sentences using a dynamic-programming-based sentence similarity scoring method. Next, we extract n-grams of action sequences that build the associated abstract syntax tree. Finally, we increase the probability of actions that cause the retrieved n-gram action subtree to be in the predicted code. We show that our approach improves the performance on two code generation tasks by up to +2.6 BLEU.
研究动机与目标
- 为解决在神经代码生成中,针对罕见或低频自然语言描述生成复杂且语法正确的代码的挑战。
- 克服现有基于树的模型在记忆大型或复杂代码结构方面的局限性。
- 通过利用抽象语法树(AST)中的结构相似性,将基于检索的方法从神经机器翻译迁移至代码生成。
- 通过显式重用检索到的代码模板,提升罕见或复杂代码模式的泛化能力与准确性。
提出的方法
- 使用基于编辑距离的句子相似性评分方法,检索与输入自然语言描述最相似的前 M 个训练样本。
- 从检索到的代码样本的 AST 中提取 n-gram 动作子树,表示代码生成中可重用的结构模式。
- 应用基于动态规划的对齐方法,将检索到的动作序列中的词语替换为与输入自然语言描述对应的术语,实现对部分匹配的处理。
- 修改解码过程,提高那些能导致预测 AST 中包含检索到的 n-gram 动作子树的动作的概率。
- 使用带有动作嵌入、上下文向量、父节点输入和复制机制的序列到序列模型,通过前序遍历生成 AST。
- 通过提升与检索子树对齐的动作的概率,将检索引导整合到注意力机制中,确保语法正确性与结构相关性。
实验结果
研究问题
- RQ1检索代码结构模式是否能提升对罕见或复杂自然语言描述的神经代码生成性能?
- RQ2在树结构缺乏线性结构的背景下,如何有效应用子树级别的检索于基于 AST 的代码生成?
- RQ3基于动态规划的句子对齐是否能提升在代码生成中处理不完美或部分匹配的检索性能?
- RQ4在多大程度上,整合检索到的动作子树能提升 BLEU 分数与代码生成的语法正确性?
- RQ5在处理罕见或复杂代码模式时,基于检索的生成方法与最先进模型相比表现如何?
主要发现
- ReCode 在两个基准代码生成任务上,性能最高提升 +2.6 BLEU,显著优于先前的最先进模型。
- 该模型成功生成了复杂短语的正确代码,而此前模型无法处理,例如在某个示例中正确预测了动作 timesince(d, now, reversed)。
- 当参考代码包含罕见或复杂结构时,ReCode 即使未与参考完全匹配,仍优于基线模型(YN17),生成了更准确且结构正确的代码。
- 检索机制使模型能更好地处理复杂代码结构,如在 HS 数据集中,ReCode 正确推断出重载属性,而基线模型未能做到。
- 尽管有所改进,ReCode 仍偶尔无法正确复制变量或正确进行类型转换,表明其复制机制在泛化方面存在局限。
- 该方法通过重用相似训练样本中的结构模式,有效泛化到罕见或未登录词,减少对罕见序列记忆的依赖。
更好的研究,从现在开始
从阅读论文到最终审阅,大幅缩短您的研究时间。
无需绑定信用卡
本解读由 AI 生成,并经人工编辑审核。