Skip to main content
QUICK REVIEW

[论文解读] Automatic Generation of Text Descriptive Comments for Code Blocks

Yuding Liang, Kenny Q. Zhu|arXiv (Cornell University)|Aug 21, 2018
Software Engineering Research参考文献 23被引用 14
一句话总结

本文提出了一种无需模板的框架,通过一种新型递归神经网络(Code-RNN)自动为Java代码块生成描述性注释,该网络能够捕捉代码的结构和语义特征,随后使用自定义的GRU生成器(Code-GRU)生成自然语言注释。该方法在Rouge-2指标上达到当前最优性能,显著优于以往基于学习的方法和基于模板的方法。

ABSTRACT

We propose a framework to automatically generate descriptive comments for source code blocks. While this problem has been studied by many researchers previously, their methods are mostly based on fixed template and achieves poor results. Our framework does not rely on any template, but makes use of a new recursive neural network called Code-RNN to extract features from the source code and embed them into one vector. When this vector representation is input to a new recurrent neural network (Code-GRU), the overall framework generates text descriptions of the code with accuracy (Rouge-2 value) significantly higher than other learning-based approaches such as sequence-to-sequence model. The Code-RNN model can also be used in other scenario where the representation of code is required.

研究动机与目标

  • 为解决现实世界软件仓库中注释稀疏且质量低下的关键问题,此类问题会阻碍代码理解与搜索。
  • 克服基于模板的方法存在的局限性,即生成重复、上下文不敏感且语义覆盖不足的注释。
  • 开发一种深度学习框架,以同时捕捉代码块的句法结构与语义含义,从而提升注释生成质量。
  • 提出一种通用的代码表示方法(Code-RNN),可广泛应用于代码分类、检索等任务,而不仅限于注释生成。

提出的方法

  • 设计一种新型递归神经网络(Code-RNN),通过从叶子节点到根节点遍历源代码的抽象语法树(AST),学习编码结构与语义特征的向量表示。
  • 利用Code-RNN为代码块生成密集向量嵌入,其中每个向量均捕捉代码的功能意图与句法结构。
  • 提出一种新型门控循环单元(GRU)变体——Code-GRU,专为更好地利用Code-RNN生成的语义向量进行序列生成而设计。
  • 采用端到端的序列到序列学习方法训练Code-GRU模型,从代码嵌入生成自然语言注释。
  • 通过架构设计隐式引入注意力机制,实现代码语义与生成注释词语之间的对齐。
  • 在十个活跃的Java代码仓库上评估该框架,以Rouge-2作为主要指标,评估注释质量。

实验结果

研究问题

  • RQ1基于神经网络的方法是否能为源代码块生成比基于模板的系统更准确且更多样化的注释?
  • RQ2递归神经网络(Code-RNN)在表示学习中,能在多大程度上有效捕捉代码的结构与语义特征?
  • RQ3当基于代码嵌入进行条件生成时,专用的GRU架构(Code-GRU)是否能相比标准RNN提升注释生成质量?
  • RQ4在多样化的开源Java项目中,该框架在Rouge-2得分上与当前最优方法相比表现如何?

主要发现

  • 所提出的框架在Rouge-2得分上显著高于现有基于学习与基于模板的方法,证明其在注释生成准确性方面具有优越性。
  • 平均而言,该框架在十个活跃的Java代码仓库中均优于当前最优模型,且在大多数项目中取得了最高的Rouge-2得分。
  • Code-RNN模型通过遍历AST成功捕捉了代码的句法与语义特征,生成了有意义的向量表示,且无需依赖模板。
  • Code-GRU生成器能有效利用代码嵌入,生成流畅且上下文相关的注释,避免了基于模板系统中常见的重复问题。
  • 只要存在解析树,该框架即可推广至其他编程语言,表明其在Java之外也具有广泛适用性。

更好的研究,从现在开始

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

无需绑定信用卡

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