Skip to main content
QUICK REVIEW

[论文解读] Exploring Dynamic Selection of Branch Expansion Orders for Code Generation

Hui Jiang, Chulun Zhou|arXiv (Cornell University)|Jun 1, 2021
Software Engineering Research参考文献 30被引用 5
一句话总结

本文提出一种上下文感知的分支选择器,通过强化学习基于损失差异动态确定代码生成中多分支节点的最优展开顺序,以优化分支排序。该方法通过减少误差累积,在多个代码生成基准上实现了最先进性能,显著提升了Seq2Tree模型的表现。

ABSTRACT

Due to the great potential in facilitating software development, code generation has attracted increasing attention recently. Generally, dominant models are Seq2Tree models, which convert the input natural language description into a sequence of tree-construction actions corresponding to the pre-order traversal of an Abstract Syntax Tree (AST). However, such a traversal order may not be suitable for handling all multi-branch nodes. In this paper, we propose to equip the Seq2Tree model with a context-based Branch Selector, which is able to dynamically determine optimal expansion orders of branches for multi-branch nodes. Particularly, since the selection of expansion orders is a non-differentiable multi-step operation, we optimize the selector through reinforcement learning, and formulate the reward function as the difference of model losses obtained through different expansion orders. Experimental results and in-depth analysis on several commonly-used datasets demonstrate the effectiveness and generality of our approach. We have released our code at https://github.com/DeepLearnXMU/CG-RL.

研究动机与目标

  • 解决Seq2Tree模型在代码生成中固定左到右分支展开的局限性。
  • 探究动态、上下文相关的分支排序是否能提升代码生成性能。
  • 开发一种可训练的、非可微分的分支选择机制,兼容现有Seq2Tree框架。
  • 在多个代码生成数据集上证明该方法的通用性与有效性。

提出的方法

  • 引入一种基于上下文的分支选择器,在生成过程中预测多分支AST节点的最优展开顺序。
  • 采用强化学习制定训练目标,其中奖励为不同展开顺序下模型损失的差异。
  • 使用策略梯度方法优化分支选择器,即使动作顺序不可微分,也能实现端到端训练。
  • 将选择器集成到TRANX模型架构中,在保持前序遍历的同时,允许对兄弟分支进行动态重排序。
  • 在代码生成数据集上训练扩展后的模型,奖励信号来源于不同展开序列间模型损失的比较。
  • 推理阶段应用课程学习与束搜索,以提升泛化能力与生成质量。

实验结果

研究问题

  • RQ1与固定左到右展开顺序相比,动态选择分支展开顺序是否能提升代码生成性能?
  • RQ2上下文感知的分支选择器能否有效识别多分支AST节点的最优展开序列?
  • RQ3所提方法在标准代码生成基准上与基线Seq2Tree模型相比表现如何?
  • RQ4动态排序在多大程度上减少了AST生成过程中的误差传播?
  • RQ5该方法在不同代码生成数据集与架构上是否具备可泛化性?

主要发现

  • 与右到左基线(TRANX-R2L)相比,所提方法在处理多分支节点方面实现了7.66%的性能提升,证明了动态选择的优势。
  • 在DJANGO数据集上,模型通过优先生成较短的子树,减少了误差累积,提升了后续节点的预测准确性。
  • 分支选择器成功识别出上下文相关的最优顺序,例如优先展开'name'字段以辅助后续'type'字段的预测。
  • 在多个数据集上,该模型优于标准Seq2Tree基线,BLEU与CodeBLEU得分均取得统计显著提升。
  • 消融实验表明,基于强化学习的奖励机制对实现有效分支排序至关重要。
  • 该方法具备良好泛化能力,在多样化代码生成任务与数据集上均表现出一致的性能提升。

更好的研究,从现在开始

从阅读论文到最终审阅,大幅缩短您的研究时间。

无需绑定信用卡

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