网站源码在哪里(基于神经网络和信息检索的源代码注释生成 | csa佳文)

wufei123 发布于 2023-11-11 阅读(791)

文章题目:基于神经网络和信息检索的源代码注释生成全部作者:沈鑫, 周宇第一单位:南京航空航天大学 计算机科学与技术学院出版时间:2023, 32(7): 1–10摘要源代码注释生成旨在为源代码生成精确的自然语言注释, 帮助开发者更好地理解和维护源代码. 传统的研究方法利用信息检索技术来生成源代码摘要, 从初始源代码选择相应的词或者改写相似代码段的摘要; 最近的研究采用机器翻译的方法, 选择编码器-解码器的神经网络模型生成代码段的摘要. 现有的注释生成方法主要存在两个问题: 一方面, 基于神经网络的方法对于代码段中出现的高频词更加友好, 但是往往会弱化低频词的处理; 另一方面, 编程语言是高度结构化的, 所以不能简单地将源代码作为序列化文本处理, 容易造成上下文结构信息丢失. 因此, 为了解决低频词问题提出了基于检索的神经机器翻译方法, 使用训练集中检索到的相似代码段来增强神经网络模型; 为了学习代码段的结构化语义信息, 提出结构化引导的Transformer, 该模型通过注意力机制将代码结构信息进行编码. 经过实验, 结果证明该模型在低频词和结构化语义的处理上对比当下前沿的代码注释生成的深度学习模型具有显著的优势.

扫二维码阅读全文图文精选(1) 注释生成模型本文提出一个基于检索的源代码注释自动生成模型, 其融合神经网络机器翻译模型和基于检索的方法, 旨在生成更加准确的源代码注释. 不同于已有的神经网络源代码机器翻译模型, 本方法在对检索代码库进

行联合训练的时候不需要使用额外的编码器, 其包含一个基于注意力机制的编码器解码器模型, 两个基于相似度的代码段检索部分. 模型框架如图1所示.

图1 注释生成模型① 相似代码检索在本文工作中, 因为训练集非常大且无监督方法是首选, 我们不进行训练, 而是基于AST的token序列来有效地计算代码段的语法相似性. 我们将输入的代码片段以及所有的训练集解析

为AST, 并通过先序遍历进一步获得它们的序列表示. 基于这些序列, 我们使用现成且广泛使用的搜索引擎Lucene高效检索训练集中最相似的语法级别的代码片段. 对于语义级别的源代码检索, 最近基于神经网络的

方法将源代码编码为语义向量, 已经展示了它们在捕获代码语义方面的优势. 但他们需要额外的计算代价来进行训练. 如上所述, 基于Bi-LSTM的编码器能够捕获源代码的序列信息并将语义嵌入到隐藏状态向量中.

② 基于检索的源代码注释生成在训练我们的基于注意力的编码器-解码器模型并从训练集中检索两个最相似的代码片段之后, 我们将在线为测试集中的代码片段预测和生成注释语句. 直观地, 我们使用检索到的相似代码段(用于低频词)

增强了基于注意力的编码器-解码器模型(用于高频词). 一个简单的解决方案是通过相似度来增强相似代码片段中所有单词的概率, 但它可能包含干扰词. 同时, 除了代码片段的相似性, 我们还在解码时考虑了每个单

词的条件概率以帮助剔除可能的通常条件概率较低的干扰词. 基于我们训练模型的编码器和解码器, 基于检索的神经摘要生成器同时编码每个测试代码片段及其两个最相似的代码段, 通过注意力机制获取它们的上下文向量并融合条

件概率和相似性对其进行解码以预测摘要.(2) 对比模型我们将本方法与现有的源代码摘要工作进行比较.它们可以分为两组: 基于检索的和基于NMT的方法. 此外, 我们还比较了一个组合上述两种方法的效果最好的算法, 

即在NLP中使用检索到的翻译片段指导NMT翻译(GRNMT).① 基于检索的方法● LSI是一种文本检索技术, 用于分析文档的潜在含义或概念. 为了生成人类可读的摘要语句, 对于任何的测试代码片段, 我们使用LSI从训练

集中检索最相似的语句并取其注释作为结果.● VSM是向量空间模型的缩写形式. 一个VSM的经典例子是TF-IDF, 它被一些自动源代码摘要工作所采用.● NNGen是一个简单却有效的最近邻算法, 其为代

码变更提供提交信息. 在基于词袋和词频构建代码变更的向量之后, 它通过向量的余弦相似度和BLEU-4分数检索代码的最近邻. 然后NNGen直接复用最近邻的提交消息. 我们通过替换代码变更为代码段在我们的任务中复现这样的算法.

② 基于NMT的方法● CODE-NN是第1个基于深度学习生成源代码摘要的神经网络方法. 它是一个LSTM编码器-解码器神经网络, 将代码片段编码为具有注意机制的文本向量并生成摘要.● TL-CodeSum是一种多编码器神经网络模型, 可将

API序列与代码token序列一起编码, 并且使用转移的API知识从源代码生成摘要. 它首先使用外部数据集训练API序列编码器. 然后学习到的API表示应用于源代码摘要任务以辅助摘要生成.● Hybrid-DRL是一种先进的混合神经方法, 其使用

混合代码表示和深度强化学习. 基础模型架构也是多编码器NMT通过编码AST和序列信息来学习结构和序列信息.(3)实验结果与分析表1展示了在我们的评估标准上不同注释生成方法的性能. 使用Hybrid-DRL提供的脚本计算这些

指标的值. 对于这些指标, 值越大越好, 每一个指标的最优值标记为黑体. 从表1中, 我们可以看到基于检索的方法LSI, VSM和NNGen产生了很好的结果. 特别是, VSM获得这3种技术中最好的性能.

表1 源代码摘要方法比较

另外, 我们可以看到本方法实现了所有评估指标的最佳性能. 原因是我们在语法级别和语义级别分别检索最相似的代码片段作为我们的基于注意力机制的编码器解码器模型的附加上下文. 我们还通过相似度和条件概率的融合来预测下一个词. 与我们

的方法相比, 与自然语言翻译任务不同, GRNMT性能较差, 因为它很难精确匹配代码段中包含相应元素的摘要的n-gram并获得高质量的翻译片段. 由于大规模的训练集和测试阶段的在线代码检索, 我们的方法可

能会比单个NMT模型花费更多时间来生成注释. 但是, 我们在实验的两个数据集上平均只需要89 ms为每个测试代码片段生成摘要, 因为高效的搜索引擎Lucene和余弦相似度的快速计算.(4) 结语本文结合神经网络和信息检索的方法来生成源代

码注释, 给定一个测试代码段, 从训练集中检索相似的代码段并进行编码, 融合语法和语义信息辅助生成代码注释, 解决低频词问题, 并通过实验结果对比证实了基于检索的神经网络源代码注释生成方法的效果和潜力.

联系我们电 话:010-62661041微 信:csaWeChat邮 箱:csa@iscas.ac.cn网 站:http://www.c-s-a.org.cn

亲爱的读者们,感谢您花时间阅读本文。如果您对本文有任何疑问或建议,请随时联系我。我非常乐意与您交流。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。