温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,汇文网负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
网站客服:3074922707
基于
多维
度异质图
结构
代码
注释
自动
生成
戎珂瑶
第 49卷 第 4期2023年 4月Computer Engineering 计算机工程基于多维度异质图结构的代码注释自动生成戎珂瑶,熊贇(复旦大学 计算机科学技术学院 上海市数据科学重点实验室,上海 200433)摘要:代码注释能够增强源代码的可读性、辅助软件开发过程,因此代码注释自动生成任务成为研究热点。然而现有工作大多只利用了源代码的序列信息或抽象语法树信息,未能充分捕捉代码语言特有的多种特征。为进一步利用源代码的多维度特征,提升注释生成的效果,构建基于多维度异质图结构的代码注释自动生成模型。利用异质图结构和图神经网络,将源代码的抽象语法树、控制流图、数据流图等进行融合并构建为具有多种节点和连边的异质表示图,以此表现代码的语义特征、序列特征、语法特征、结构特征等多维度特征。在真实数据集上的实验结果表明,该模型相较于 Hybrid-DRL、NeuralCodeSum、SeqGNN 等模型具有更好的效果,在 BLEU-4、METEOR、ROUGE-L指标上分别最高提升 1.6%、3.2%、3.1%,可获得更流畅、可读性更好的代码注释。关键词:代码注释生成;异质图;图注意力网络;神经机器翻译;多维度特征开放科学(资源服务)标志码(OSID):中文引用格式:戎珂瑶,熊贇.基于多维度异质图结构的代码注释自动生成 J.计算机工程,2023,49(4):240-248.英文引用格式:RONG K Y,XIONG Y.Automatic code annotation generation based on multi-dimensional heterogeneous graph structure J.Computer Engineering,2023,49(4):240-248.Automatic Code Annotation Generation Based on Multi-dimensional Heterogeneous Graph StructureRONG Keyao,XIONG Yun(Shanghai Key Laboratory of Data Science,School of Computer Science,Fudan University,Shanghai 200433,China)【Abstract】The task of automatic code annotation generation has become a research hotspot considering code annotations can enhance the readability of source code and assist the software development process.While some researchers have exploited the sequence information or abstract syntax tree information of source code,the multiple features specific to the code language have not been studied.Therefore,to further exploit the multi-dimensional features of source code and improve the annotation generation effect,this study uses a heterogeneous graph structure and graph neural network to fuse and construct the abstract syntax tree,control flow graph,and data flow graph of the source code into a heterogeneous representation graph with multiple nodes and edges to represent the multi-dimensional features such as semantic features,sequence features,syntax features,and structural features of the code.Furthermore,this study proposes an automatic code annotation generation model based on a multi-dimensional heterogeneous graph structure.The experimental results show that the proposed model can perform better on the real datasets compared to other current models such as Hybrid-DRL,NeuralCodeSum,SeqGNN,et al.The highest improvement in BLEU-4,METEOR,and ROUGE-L metrics are 1.6%,3.2%,and 3.1%,respectively,which obtained more fluent and readable code annotations.【Key words】code annotation generation;heterogeneous graph;graph attention network;neural machine translation;multi-dimensional featureDOI:10.19678/j.issn.1000-3428.00642400概述 代码注释是指人类可读的对程式语言源代码的描述,用以解释源代码的功能和意图,在软件开发过程中是项目代码重要的一部分。然而,在实际的编程环境中,大多数源代码都没有对应的注释,因为手动编写代码注释是一项耗费时间、代价昂贵的工作,而代码注释自动生成任务可以解决这一困境。代码注释自动生成是通过对源代码的分析,自动生成用自然语言编写的源代码文本描述,借此表达程序软件的设计意图、函数功能、参数含义等,其最基本的任务是把编程语言形式的代码转换成自然作者简介:戎珂瑶(1996),女,硕士研究生,主研方向为深度学习;熊 贇,教授、博士。收稿日期:2022-03-21 修回日期:2022-05-30 Email:开发研究与工程应用文章编号:1000-3428(2023)04-0240-09 文献标志码:A 中图分类号:TP18第 49卷 第 4期戎珂瑶,熊贇:基于多维度异质图结构的代码注释自动生成语言形式的文本注释。这项任务目前已经有了不少的研究工作。早期的研究者们主要通过基于规则模板的方法来生成注释。SRIDHARA 等1借助 SWUM2进行分析,从代码片段中选择出核心代码语句,而后基于预定义的模板,将核心语句中的焦点术语和关键词填入 模 板,产 生 代 码 注 释。之 后,他 们3进 一 步 将SWUM 和启发式方法结合,对方法注释添加更为细节的参数注释。基于规则模板的模型拥有简洁的模板,可以生成特定格式的注释,但它针对的源代码范围十分狭窄,缺乏可泛化性;针对不同结构的源代码需要单独设计详细的规则,生成效率不高,也缺少对代码特征的挖掘。基于信息检索的方法可以解决上述问题,它的适 用 范 围 更 广 且 不 需 要 额 外 创 造 规 则 和 模 板。HAIDUC等4于 2010年提出基于潜在语义索引的代码摘要生成模型,从代码文档中抽取单词来构建语料库并计算单词在对应文档中的权重,根据单词权重抽取排名前 k的单词作为代码注释。WONG等5-6提出一种基于代码克隆检测的注释生成方法,提取StackOverflow 上的代码片段和文本描述建立数据库,从数据库中找出和目标代码最相似的代码段,对应的注释就是目标代码的注释。类似地,白杨等7通过代码克隆技术查找原始软件和目标软件中的相似代码,提取并精简相似代码和对应注释,将原始软件的代码注释映射给目标软件的代码。但这类模型同样存在较为明显的缺点:只利用了源代码的语义信息,缺少对其他特征的深层挖掘;有效性主要取决于数据集的数量和质量;对数据集的依赖导致生成的注释仅包含数据集中存在的名称,缺乏可泛化性和灵活性。近年来,随着人工智能和机器学习技术的发展,研究者们利用深度神经网络方法来解决源代码注释问题。基于深度学习的方法相较于传统方法,在特征挖掘、可泛化性和生成效果上取得了重大的进展。IYER 等8提出一种基于长短时记忆(Long Short-Term Memory,LSTM)网 络 的 注 释 生 成 模 型CODE-NN,模型采用带有注意力机制的 LSTM 网络作为编解码器,能够为 C#代码段和 SQL查询生成相应的代码注释。ZHENG 等9同样使用编码器-解码器结构,其中编码器的基本结构是门控循环单元(Gated Recurrent Unit,GRU),同时加入全局注意力机制,从而更好地理解代码的结构信息,提高注释生成的准确性。HU 等10提出 DeepCom 方法,利用源代码的抽象语法树转换而成的序列作为模型的输入,提 出 基 于 结 构 的 遍 历 方 法(Structure-Based Traversal,SBT),借助括号表示抽象语法树(Abstract Syntax Tree,AST)的内部子树结构。基于 DeepCom,他们进一步提出 Hybrid-DeepCom11,在使用 AST转换的序列信息的基础上加入了额外的代码信息。此外,他们将遵守驼峰命名规范的标识符细分为多个单词来缓解词汇量不足(Out of Vocabulary,OOV)的问题。牛长安等12则在 Hybrid-DeepCom 基础上引入指针生成网络模块,以解决 OOV 问题。许柏炎等13提出语法辅助复制机制改进指针网络,以减少指针网络的学习成本。除了单编码器-解码器结构,也发展出了多编码器-解码器的模型结构。XIONG 等14-15提出一种结构感知的双编码器模型,结合序列编码器和树编码器,通过树编码器来表示代码抽象语法树的层次信息,同时将注意力机制改为双重注意机制,以达到更好的生成效果。此外,有不少研究者选择了其他种类的神经网络。ALLAMANIS 等16在借助编码器-解码器和注意力机制的基础上,在注意力机制中引入卷积神经网络,确认注意力应关注的重要令牌,生成简短注释。MOU 等17则是在处理源代码的 AST时使用卷积神经网络,将之处理成向量表示,他们将整个 AST 作为模型输入,并设计通过卷积内核来捕获源代码的结构信息。除了使用常规的神经网络结构外,研究者还试着加入其他类型的模型或任务,形成综合性的模型18。WAN 等19提出 Hybrid-DRL 方法,利用强化学习来改进注释生成模型,使用双编码器结构来处理代码的顺序信息和结构信息,并通过Actor-Critic强化学习模型提升生成效果。大多数基于深度神经网络的注释生成算法都是在循环神经网络(Recurrent Neural Network,RNN)编码器-解码器模型的基础上进行探索和创新9,20-21,和前两种模型相比,往往能得到很好的结果。但同样地,由于任务本身的复杂性和现有技术的局限性,这类方法也仍然存在不足。目前,代码注释自动生成仍然面临着源代码多维度特征表示的挑战。源代码中包含的信息包括语义特征、语法特征、词法特征、序列特征、结构特征等多维度信息。代码的注释生成并不是简单的自然语言翻译问题,而是从一种包含丰富特征的结构化语言到自然语言的转换问题。目前已经有结合基于令牌和基于抽象语法树的模型,将语义信息和语法信息一起传入神经网