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

李重 等: 基于语义重排序的代码注释生成方法                                                           617


                 内容进行排序筛选的思想可以扩展到文件级、包级和项目级的注释生成. 同时, 这种思想也可以被用于一些其他
                 的软件工程任务. 比如, 可以将        SRBCS  的思想用于代码补丁生成, 通过语义重排序模型对不同补丁生成方法所生
                 成的补丁进行排序选择, 实现对不同补丁生成方法的集成, 从而提升代码补丁生成的质量.
                    有效性威胁: 本文工作的内部有效性威胁主要来自以下                  3  个方面: (1) SRBCS  和各基线方法的实现正确性. 为
                 了缓解这一威胁, 我们使用成熟的第三方库对               SRBCS  进行实现. 而对于各基线方法, 则直接使用其开源实现. 同
                 时, 还仔细检查了各方法的源代码和实验脚本. (2) 实验中基线代码大模型所使用提示词的有效性. 为了缓解这一
                 威胁, 主要基于已被现有工作         [47] 证实有效性的提示词来设计实验中代码大模型所使用的提示词. 我们计划在未来
                 研究中对不同提示词下代码大模型代码注释生成能力进行探索. (3) 实验数据集在大模型上的潜在数据泄露. 为了
                 缓解这一威胁, 在实验中对        SiT  这一从零开始训练的方法进行了考虑, 并严格划分了训练集、验证集和测试集. 实
                 验结果表明, 通过     SRBCS  将基于  SiT  的方法和基于检索的方法进行集成后, 所生成代码注释质量得到了明显提
                 高. 此外, 对于  CodeBERT、CodeT5、Code LLaMA、DeepSeek   和  Qwen  等大模型, 尽管其可能存在数据泄露, 但
                 SRBCS  仍实现了相较于单独使用大模型进行代码注释更优的性能, 这进一步证明了                         SRBCS  的有效性. 本文工作
                 的外部威胁主要来自实验中的实验对象. 为了缓解这一威胁, 在两个被现有研究所广泛采用的数据集上进行了实
                 验评估, 这两个数据集涵盖了         Java 和  Python  两个当前较为流行的编程语言. 同时, 还将        SRBCS  与  14  种基线方法
                 进行了比较, 全面评估了       SRBCS  的有效性. 在未来研究工作中, 将在更多数据集和性能指标上检验                    SRBCS  的有
                 效性. 本文工作的结构有效性威胁主要来自实验所用的评价指标. 为了缓解这一威胁, 在本文实验中考虑了                                3  种被
                 现有工作   [16,31] 所广泛使用的性能指标, 即    BLEU、ROUGE-L  和  METEOR.

                  5   相关工作

                    在本节中, 详细介绍和讨论了          3  类与本文所提出的代码注释自动生成方法             SRBCS  相关的工作: (1) 基于信息
                 检索的代码注释生成; (2) 基于深度学习的代码注释生成; (3) 基于集成的代码注释生成.
                    基于信息检索的代码注释方法通过从代码数据库中检索与目标代码相似的源代码, 利用检索得到的代码的注
                 释来为目标代码生成注释. 根据所使用的相似度度量方法不同, 现有基于信息检索的代码注释生成方法可以分为
                 基于文本相似度的方法和基于语义相似度的方法. 基于文本相似度的方法大多通过评分函数                               BM25  在  token  粒度
                 上对代码间相似度进行度量并利用搜索引擎                Lucene2  检索相似代码. 然而, 在构建检索索引时, 不同方法所使用的
                 信息会有所差别. 例如, Zhang     等人  [14] 提出使用抽象语法树来构建索引, 而        Wei 等人  [13] 则仅使用源代码中的    alpha
                 tokens 来构建索引. 不同于基于文本相似度的方法, 基于语义的方法通过深度神经网络模型来将源代码进行编码
                 以捕捉源代码中更深层次的程序语义, 随后基于编码后的特征向量对代码间相似度进行度量. 举例来说, Zhang
                 等人  [14] 训练了一个基于循环神经网络的序列到序列转换模型来将源代码嵌入到一个隐空间中, 并利用隐空间中
                 向量的余弦相似度来度量代码间相似度实现代码检索.
                    基于深度学习的代码注释生成方法将代码注释生成任务建模为神经机器翻译问题                              (即, 如何将源代码翻译为
                 自然语言描述的注释), 利用深度神经网络模型来将源代码转换为注释. 根据构建深度神经网络模型方式的不同,
                 现有基于深度学习的代码注释方法可以分为从零开始进行模型训练的方法和基于迁移学习的方法. 从零开始进行
                 模型训练的方法通常利用不同的源代码信息对一个完全初始化的深度神经网络模型进行训练, 以构建代码注释生
                                         [9]
                 成模型. 例如, AST-AttendGRU 、Code2Seq   [49] 和  Graph2Seq [50] 分别通过线性化、路径分解和图神经网络来提取
                 源代码所对应的抽象语法树中的信息来进行模型构建; AST-Trans                 [42] 主要利用抽象语法树中节点间关系来构建深
                 度神经网络模型; SiT    [40] 在构建代码注释生成模型时则更多地关注数据流和控制流等图信息. 近年来, 伴随着大规
                 模预训练基础模型的成功, 基于迁移学习的方法受到了广泛关注. 这种方法通过在目标数据集上对诸如                                    Code-
                 BERT [43] 、PLBART [51] 和  CodeT5 [33] 等代码大模型进行微调来实现目标数据集上的代码注释生成.
                    基于集成的代码注释生成方法将信息检索技术集成到基于深度学习的代码注释生成方法, 利用信息检索得到
                 的相似代码片段及其相应注释来辅助深度神经网络模型进行代码注释生成. 在信息检索方面, Zhang                                等人  [14] 、
   133   134   135   136   137   138   139   140   141   142   143