Skip to main content
QUICK REVIEW

[论文解读] Learning to Complete Code with Sketches

Daya Guo, Alexey Svyatkovskiy|arXiv (Cornell University)|Jun 18, 2021
Software Engineering Research被引用 8
一句话总结

本文提出 GRAMMFORMER,一种基于 Transformer 的模型,通过编程语言语法引导,生成带有故意‘空缺’(■)的代码补全草图——即部分代码。该模型在生成准确度上比标准自回归模型高出 10–50%,且生成的草图更长、更精确,长度提升 37–50%。其采用强化学习目标,奖励长且空缺最少的预测结果,使其与真实代码匹配。

ABSTRACT

Code completion is usually cast as a language modelling problem, i.e., continuing an input in a left-to-right fashion. However, in practice, some parts of the completion (e.g., string literals) may be very hard to predict, whereas subsequent parts directly follow from the context. To handle this, we instead consider the scenario of generating code completions with "holes" inserted in places where a model is uncertain. We develop Grammformer, a Transformer-based model that guides code generation by the programming language grammar, and compare it to a variety of more standard sequence models. We train the models on code completion for C# and Python given partial code context. To evaluate models, we consider both ROUGE as well as a new metric RegexAcc that measures success of generating completions matching long outputs with as few holes as possible. In our experiments, Grammformer generates 10-50% more accurate completions compared to traditional generative models and 37-50% longer sketches compared to sketch-generating baselines trained with similar techniques.

研究动机与目标

  • 为解决标准代码语言模型在生成时产生错误代码的问题,通过在代码补全中显式使用‘空缺’表示不确定性。
  • 开发一种方法,在生成过程中利用编程语言语法,生成更精确、更长的草图(即带占位符的部分代码)。
  • 设计一种新评估指标 REGEXACC,通过将草图转换为正则表达式模式(将 ■ 替换为 ".+"),并检查其是否与真实代码匹配,同时按非空缺标记的比例进行缩放,以衡量草图的正确性与具体性。
  • 使用强化学习训练模型,优化目标为生成长且准确、空缺最少的草图,避免错误预测。
  • 证明语法引导、草图感知的生成方法在 Python 和 C# 的代码补全任务中优于标准自回归模型。

提出的方法

  • GRAMMFORMER 使用基于 Transformer 的架构,通过构建部分语法树生成代码,允许非终结符节点在输出中保留为‘空缺’(■)。
  • 模型通过强化学习进行训练,其奖励函数旨在最大化草图长度(终端标记数量)同时最小化空缺,以鼓励生成更精确、更完整的建议。
  • 提出新指标 REGEXACC:将草图转换为正则表达式模式(将 ■ 替换为 ".+"),然后检查该正则表达式是否匹配真实代码,并按非空缺标记的比例进行缩放。
  • 训练数据通过在真实代码补全中插入空缺生成,为强化学习目标提供监督信号。
  • 模型利用编程语言的正式语法规则指导生成过程,即使存在空缺,也能保证语法正确性。
  • 与标准自回归模型不同,GRAMMFORMER 并非盲目地从左到右生成标记;而是使用语法感知解码,优先生成结构上有效的补全。

实验结果

研究问题

  • RQ1是否可以训练神经代码生成模型,使其生成带有故意‘空缺’的草图,而非幻觉生成标记,从而提升代码补全的可靠性?
  • RQ2与标准自回归语言建模相比,语法引导、草图感知的生成在代码补全的准确性和完整性方面表现如何?
  • RQ3一种奖励长且空缺最少草图的强化学习目标,是否能相比监督基线提升代码补全的质量?
  • RQ4新指标 REGEXACC 与人工评估的草图质量相关性如何?
  • RQ5生成更长、更具体的草图(空缺更少)是否能提升开发者体验并减少调试工作量?

主要发现

  • GRAMMFORMER 在 C# 和 Python 代码补全基准测试中,生成的代码补全准确度比标准自回归语言模型高出 10–50%。
  • GRAMMFORMER 生成的草图比使用类似技术训练的草图基线模型长 37–50%,表明其具有更高的精确度与具体性。
  • 所提出的 REGEXACC 指标能有效衡量草图质量,通过测量正则表达式与真实代码的匹配度,并考虑实际预测标记的比例。
  • 采用语法感知目标的强化学习显著优于标准从左到右的自回归生成,在草图生成任务中表现更优。
  • 模型能够将非终结符节点保留为空缺,使其即使在不确定具体值时,也能生成语义有效、结构正确的代码建议。
  • 仍需人工评估以进一步验证草图正确性与具体性之间的权衡,因当前结果基于自动化指标。

更好的研究,从现在开始

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

无需绑定信用卡

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