温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,汇文网负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
网站客服:3074922707
基于
结构
感知
混合
编码
模型
代码
注释
生成
方法
蔡瑞初
第 49卷 第 2期2023年 2月Computer Engineering 计算机工程基于结构感知混合编码模型的代码注释生成方法蔡瑞初,张盛强,许柏炎(广东工业大学 计算机学院,广州 510006)摘要:代码注释能够提高程序代码的可读性,从而提升软件开发效率并降低成本。现有的代码注释生成方法将程序代码的序列表示或者抽象语法树表示输入到不同结构的编码器网络,无法融合程序代码不同抽象形式的结构特性,导致生成的注释可读性较差。构建一种结构感知的混合编码模型,同时考虑程序代码的序列表示和结构表示,通过序列编码层和图编码层分别捕获程序代码的序列信息和语法结构信息,并利用聚合编码过程将两类信息融合至解码器。设计一种结构感知的图注意力网络,通过将程序代码的语法结构的层次和类型信息嵌入图注意力网络的学习参数,有效提升了混合编码模型对程序代码的复杂语法结构的学习能力。实验结果表明,与 SiT基准模型相比,混合编码模型在 Python 和 Java 数据集上的 BLEU、ROUGE-L、METEOR 得分分别提高了 2.68%、1.47%、3.82%和 2.51%、2.24%、3.55%,能生成更准确的代码注释。关键词:代码注释生成;混合编码模型;图注意力网络;深度自注意力网络;自然语言处理开放科学(资源服务)标志码(OSID):中文引用格式:蔡瑞初,张盛强,许柏炎.基于结构感知混合编码模型的代码注释生成方法 J.计算机工程,2023,49(2):61-69.英文引用格式:CAI R C,ZHANG S Q,XU B Y.Method for generating code comments based on structure-aware hybrid encoding model J.Computer Engineering,2023,49(2):61-69.Method for Generating Code Comments Based on Structure-aware Hybrid Encoding Model CAI Ruichu,ZHANG Shengqiang,XU Boyan(School of Computers,Guangdong University of Technology,Guangzhou 510006,China)【Abstract】Code comments improve the readability of program codes,enhancing software development efficiency and reducing costs.Existing methods for code comment generation feed the sequence form or Abstract Syntax Tree(AST)form of a program code into encoder networks with different structures,which cannot fuse the structural characteristics of different abstract forms of program codes.This results in poor readability of the generated comments.This study proposes a Structure-aware Hybrid Encoding(SHE)model.The SHE model considers both the sequence form and structure form of the program code.This includes capturing the context information and the grammar structure information of the program code by the sequence encoding layer and the graph encoding layer,respectively,and effectively fusing the above two aspect information into the decoder through aggregation encoding.This study further proposes a Structure-aware Graph Attention(SGAT)network to effectively improve the learning ability of the SHE model for the complex grammar structure of a program code by integrating the hierarchical and type information of the grammar structure of the program code into the learning parameters of the graph attention network.The experimental results show that compared with the Structure-induced Transformer(SiT)baseline models,the SHE model improves the Bi-Lingual Evaluation Understudy(BLEU),Recall-Oriented Understudy for Gisting Evaluation-Longest common subsequence(ROUGE-L),and Metric for Evaluation of Translation with Explicit Ordering(METEOR)scores by 2.68%,1.47%,and 3.82%,respectively,on the Python dataset.Moreover,the SHE model improves BLEU,ROUGE-L and METEOR scores by 2.51%,2.24%,and 3.55%,respectively,on the Java dataset.The experimental results demonstrate that the SHE model can generate more accurate code comments than the baseline models.【Key words】code comment generation;hybrid encoding model;graph attention network;deep self-attention network;natural language processingDOI:10.19678/j.issn.1000-3428.0063592基金项目:国家自然科学基金(61876043);国家优秀青年科学基金(62122022);广州市科技计划项目(201902010058)。作者简介:蔡瑞初(1983),男,教授、博士、博士生导师,主研方向为因果关系、机器学习;张盛强,硕士研究生;许柏炎(通信作者),博士研究生。收稿日期:2021-12-21 修回日期:2022-02-18 Email:人工智能与模式识别文章编号:1000-3428(2023)02-0061-09 文献标志码:A 中图分类号:TP3122023年 2月 15日Computer Engineering 计算机工程0概述 代码注释是程序源代码功能含义的可读注解,在软件维护过程中起到关键作用1-2,然而由于编写代码注释的时间成本较高,软件项目中经常出现注释不全、不清晰,甚至无注释等情况。为了解决上述问题,软件工程社区提出了代码注释自动生成任务,其目标是通过机器学习的方法自动将程序代码转化为自然语言注释。代码注释生成作为自然语言生成3-5的一项重要任务,在近年来受到广泛关注6-7。现有代码注释生成方法一般将源代码表示为序列形式或者抽象语法树(Abstract Syntax Tree,AST)形式。早期经典的研究方法8使用循环神经网络作为编码器对源代码序列进行建模。这种方法在建模过程中只关注源代码的序列信息,忽略了源代码的结构信息,导致生成的注释质量较差。为了捕获源代码中的结构信息,文献 9 将源代码表示为 AST中的一系列组合路径,并对每条路径进行编码。文献 10 提出一种基于结构的遍历方式来遍历 AST,以获得更多的结构信息。文献 11 将源代码转化为多视角图,并将结构信息融入深度自注意力网络(Transformer)12。以上方法虽然从不同结构形式对源代码的结构特征进行建模,但是缺少对不同结构形式的融合过程,也缺乏充分考虑程序代码的语法结构的类型和层次信息,使得在面对复杂程序代码时生成的注释存在准确率低和可读性差的问题。针对上述结构编码方面的缺陷,本文建立一种结 构 感 知 的 混 合 编 码(Structure-aware Hybrid Encoding,SHE)模型,包括序列编码、语法结构编码和聚合编码三层编码过程,能够同时捕获源代码的节点序列信息和语法结构信息。设计一种结构化感知 的 图 注 意 力(Structure-aware Graph Attention,SGAT)网络作为 SHE 的语法结构编码层,考虑了源代码的语法结构的层次和类型信息,以提升模型对复杂代码的结构学习能力。1相关工作 根据对源代码的处理方式,可将现有的研究方法分为三类:基于序列的方法,基于树的方法和基于图的方法。基于序列的方法直接将源代码转化为序列结构形式。文献 8 将源代码转化为序列,并使用带有注意力机制13的循环神经网络来生成注释。文献 14使用两个编码器分别学习源代码的序列信息和 API的序列信息,并在解码时通过 API 知识辅助注释的生成。基于树的方法通过语法解析器将源代码转化为AST。为了捕获源代码中的结构信息,文献 9 将源代码表示为 AST 中的一系列组合路径,并在解码时使用注意力机制来选择相关路径。文献 15 所提出的 模 型 采 用 两 个 门 控 循 环 单 元(Gated Recurrent Unit,GRU)16分别对源代码序列和 AST 进行编码,并在解码时通过融合源代码的序列信息和 AST的结构信息来构建上下文向量。文献 17 提出一种用于代码注释生成的编码器-解码器框架,该框架将源代码视为 N 叉树并通过与类型相关的编码器和受类型限制的解码器以捕获更多的结构信息。基于图的方法将源代码转化为图的形式。文献18将 门 控 图 神 经 网 络(Gated Graph Neural Network,GGNN)19融入现有的序列编码器,使得模型能够捕获弱结构化数据中的长距离依赖关系。文献20使 用 图 神 经 网 络(Graph Neural Network,GNN)21来提取源代码的结构特征。文献 22 将源代码转化为基于注意力机制的动态图,并设计一种混合型 GNN来捕获局部和全局结构信息。与上述三种结构编码研究方法不同,本文将源代码转化为程序图,并提出一种基于结构感知的混合编码模型(SHE)。通过融合序列编码层和图编码层以更好地捕获源代码的节点序列信息和语法结构信息。在代码修复任务上,文献 23-24 均采用了序列模型和图模型堆叠的三层编码过程。但是,本文与上述工作采用了不同的序列编码层或图网络编码层。更进一步地,代码注释生成对比代码修复需要更好地理解代码的语法结构中蕴含的语义信息。本文提出的结构化感知的图注意力网络(SGAT)通过更好地考虑源代码的语法结构的层