Page 131 - 《软件学报》2026年第2期
P. 131

610                                                        软件学报  2026  年第  37  卷第  2  期


                    (6) CodeBERT [42] . CodeBERT  是一种基于  BERT  的代码大模型. 它利用自然语言-源代码对, 通过掩码标识符
                 预测和替换标识符检测作为预训练任务对模型进行预训练. CodeBERT                    在诸如代码搜索、代码补全、代码文档生
                 成和代码翻译等众多代码理解任务中表现出了优异的性能, 因此我们也将其作为基线方法对                              SRBCS  进行评估. 在
                 本文实验所用的实验数据集上对           CodeBERT  模型进行了微调, 以保证其可以有效为实验数据集生成代码注释.
                    (7) CodeT5 [33] . CodeT5  是一种基于  T5  的代码大模型. 通过其设计的标识符敏感预训练、标识符标注以及掩
                 码标识符预测这      3  个预训练任务, CodeT5   实现了对代码语义的有效学习. 此外, 利用双向对偶生成预训练任务,
                 CodeT5  还实现了代码和自然语言语义的理解和对齐. 因此, CodeT5             被广泛用于代码注释生成领域中. 同样在本文
                 实验所用的实验数据集上对          CodeT5  模型进行了微调, 以保证其可以有效为实验数据集生成代码注释.
                    (8) Code LLaMA [43] . Code LLaMA  是一种基于  LLaMA  的代码大模型, 其采用自回归建模的目标在代码数据
                 (GitHub  等开源代码库中的代码) 和代码相关的自然语言数据               (如代码文档、注释和编程相关文本) 上进行训练,
                 使得模型具备出色的代码理解与生成能力. 在本文实验中, 我们进一步将                       Code LLaMA  作为基线方法之一, 以评
                 估  SRBCS  在当前大语言模型的背景下是否依然有效.
                    (9) DeepSeek-Coder  [44] . DeepSeek-Coder 是一种基于  DeepSeek  架构构建的大规模代码模型, 其通过多阶段混
                 合训练策略    (包括海量开源代码库、高质量技术文档和跨语言对齐数据等) 进行深度优化, 在代码补全、多语言
                 互译和技术文档撰写等场景中展现了卓越性能. 我们同样将                   DeepSeek-Coder 作为实验的基线方法之一, 来进一步
                 评估  SRBCS  在大语言模型背景下的有效性.
                    (10) Qwen-Coder [45] . Qwen-Coder 是一种基于  Qwen  架构的大规模代码模型, 其采用自回归建模和指令微调技
                 术, 在由开源代码、技术文档和合成数据等数据组成的混合数据集上, 针对代码理解与生成任务进行了优化, 展现
                 了出色的代码理解及生成能力. 我们在实验中进一步将                   Qwen-Coder 作为实验基线方法之一, 以更全面地评估
                 SRBCS  在大语言模型背景下的有效性.
                    (11) Re2Com [13] . Re2Com  首先利用信息检索为目标源代码检索一个相似代码片段并将其注释作为范例. 之后,
                 它通过一个基于循环神经网络的序列到序列转换模型对目标源代码、目标源代码抽象语法树、相似代码片段以
                 及范例进行编码, 利用两点代码间相似度信息以及范例注释进行代码注释生成.
                    (12) Recons [14] . Recons 基于深度神经网络模型更倾向于生成高频词汇而难以生成低频词汇这一发现, 提出了
                 一种基于信息检索的神经代码注释生成方法. 该方法分别基于词法信息和语义信息检索目标源代码的相似代码,
                 并利用一个基于循环神经网络的注意力编码器-解码器模型对目标源代码和两个相似代码进行编码, 实现代码注
                 释生成.
                    (13) EditSum [15] . EditSum  首先利用信息检索为目标源代码检索一个相似代码片段并将其注释作为原型. 之后,
                 以原型注释为起点, 根据目标函数源代码与检索到的相似代码间的语义差异对原型注释进行修改, 最终生成目标
                 函数源代码的代码注释.
                    (14) DECOM  [46] . DECOM  受人类润色文档流程的启发, 提出了一种多次审议的代码注释自动化生成框架. 对
                 于一个目标源代码, DECOM       首先从该代码中提取变量名等关键信息并利用信息检索技术检索该代码的相似代码
                 片段. 随后, 检索到的代码片段的注释被作为初始化草稿同输入代码以及关键词序列并一同输入到                                DECOM  中以
                 开启迭代审议流程. 在每轮审议中, 审议模型对草稿进行润色并生成一个新的注释, 而评估模型对新生成注释的质
                 量进行评估以决定审议是否终止. 迭代审议流程结束后便可得到目标源代码的注释.
                  3.4   实验方法

                    使用  Python  和  PyTorch  对  SRBCS  进行了实现. 在构造语义重排序模型的训练数据时, 将词法检索、语义检
                                             n 1 = n 2 = n 3 = 5; 并将  BLEU       τ = 0.4. 同时, 选择在  Hugging
                 索和随机采样检索的数量均设置为                                  分数的阈值设置为
                 Face 提供的  BAAI/base-reranker-large 模型上进行微调来构建语义重排序模型. 对于         SRBCS  中使用的代码注释生
                 成方法, 选择基于     BM25  的词法检索代码注释生成方法、基于余弦相似度的语义检索代码注释生成方法以及基
                 于  CodeT5  的代码注释生成. 对于两种基于信息检索的代码注释生成方法, 在各数据集的训练数据上构建了检索
   126   127   128   129   130   131   132   133   134   135   136