关键词:
注释生成
抽象语法树
关键字语义
结构化信息
NMT
摘要:
在软件的开发和维护中,清晰的代码注释对于程序理解非常重要,开发人员可以通过使用注释的自然语言描述去理解一段代码的含义。然而,由于项目进度紧迫或开发人员能力限制等各种原因,许多项目中的注释常常缺失、过时、或者与代码不匹配。最近几年,基于深度学习模型为代码自动生成注释的研究工作取得了很大的进展,在为源代码建立语言模型的趋势推动下,目前技术的关注点大部分集中在源代码的结构上,而代码中的关键字内容例如方法名、变量名等蕴含着丰富的功能描述性信息,这对注释生成是非常重要的,且尚待研究人员探究与挖掘。本文通过研究各种方法,提出一种基于关键字语义的注释自动生成技术Key Sum,以独立地分析代码中关键字语义信息对生成注释的影响和效果。由于Java是过去10年里最流行的编程语言,且作为一门强类型语言,具有一定的代表性和通用性。因此,Java被选择为实验对象进行注释生成,并且一个Java方法是数据组织的单元。注释生成技术分为两部分实现,分别为数据预处理和模型训练。在预处理阶段,Key Sum基于代码的关键字语义生成注释,其利用源代码树状结构的抽象语法树(AST)提取代码段中关键字信息,例如方法名、变量名以及应用程序接口(API)等。为使得代码在提取和分析层面具备更强的操作性,一种新的数据格式――全局记录表,被引入贯穿整个代码预处理环节。为了探究和比较关键字语义与结构化信息在生成注释过程中的重要性,我们在Key Sum的基础上,提出Key Sum S,以关键字结合简单结构化信息的形式形成代码语料序列。更进一步探究,一种注重代码结构的注释生成方法作为实验基线被引入。在模型训练阶段,Key Sum将利用深度学习的方法,基于注意力机制的神经机器翻译(NMT)去训练数据。我们从github上爬取1,000多个Java项目,清洗之后,使用大小为48万的训练集,以及大小均为6万的验证集和测试集进行实验。结果评估过程采用BLEU-4得分作为指标,并结合定性评估讨论。实验结果表明,基于关键字语义的方法Key Sum的BLEU得分达到41.40%,并在很多情况下,其生成代码注释的能力具备优越性和有效性。