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

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


                 还对  DHCS  的多个变体进行了比较, 以回答         RQ2  和  RQ3.
                    ● DHCS w/o msp: DHCS  的变体  1. 不使用自监督训练, 即掩蔽子函数预测任务.
                    ● DHCS w/o twc: DHCS  的变体  2. 不使用主题感知复制机制      (topic-aware copy mechanism, TWC), 在解码过程
                 中, 解码器不直接从子函数的主题中提取             token.
                    ● DHCS w/o msp&twc: DHCS  的变体  3. 同时去除了主题感知复制机制和掩蔽子函数预测任务, 因此, 该变体
                 退化为一个分层结构的代码注释生成模型.
                    ● DHCS w/o subfunc: DHCS  的变体  4. 不使用子函数增强   (subfunction enhancement), 因此, 该变体退化为一个
                 类似  CodeT5  的代码注释生成模型.
                  5.6   实验结果
                  5.6.1    主要结果
                    为了回答    RQ1, 将  DHCS  模型与  9  种最先进的  baseline 方法进行比较, 结果如表    3  所示.


                             表 3 DHCS  与  baseline 模型在  Python、Java 和  Go  数据集上的主要实验结果 (%)

                                         BLEU-4                  METEOR                  ROUGE-L
                       方法
                                  Python   Java    Go     Python   Java    Go     Python   Java    Go
                   NeuralCodeSum  10.79    7.81   9.90    10.47    6.68    9.74    17.78   15.44   19.79
                     RoBERTa      10.37   10.98   13.53    8.11    10.17  13.82    17.10   23.40   30.12
                    CodeBERT      14.87   12.77   14.89   13.65    11.47  14.44    28.09   25.75   32.60
                     UniXcoder    17.22   15.61   15.81   15.19    13.48  15.84    30.51   30.18   34.79
                      CodeT5      17.69   16.22   17.28   17.19    14.93  17.04    34.03   32.00   36.75
                   GPT-3.5-turbo  15.56   13.15   12.51   16.87    15.84  16.82    27.17   22.84   22.89
                     CodeT5+      17.76   15.07   12.29   17.35    15.01  12.49    22.80   22.19   19.17
                     StarCoder    16.90   17.25   14.75   17.27    17.53  14.43    17.29   22.97   17.92
                      EACS        18.10   16.38   17.28   17.09    16.50  17.36    34.70   35.54   37.20
                      DHCS        18.62   18.59   18.05   17.63    16.60  17.92    34.99   35.69   37.42

                    从表  3  中可以看出, 在所有     baseline 中, NeuralCodeSum  表现最差, 因为本研究的模型与上述      baseline 一样, 依
                 赖于预训练的编程语言模型. 利用这样的模型能够充分利用编程语言中固有的有价值的语义知识, 从而实现更优
                 的性能. 与本文方案以及大多数          baseline 模型  (如  CodeBERT、UniXcoder、CodeT5  和  CodeT5+) 相比, RoBERTa
                 的表现较差. 这一差异可以归因于          RoBERTa 是一个在自然语言语料库上预训练的语言模型, 而其他                  baseline 模型
                 则是在大规模编程语言语料库上预训练的. 还可以看到, EACS                 的表现优于其他       baseline 方法, 而  DHCS  在  3  个数
                 据集上都取得了      BLEU-4、METEOR   和  ROUGE-L  分数上的最佳表现. 与其他方法相比, GPT-3.5-turbo       的表现较
                 差, 甚至不如   CodeT5  和  UniXcoder. StarCoder 的表现稍好于  GPT-3.5-turbo, 但仍然逊色于本文方法. 这一差异大
                 致归因于两个因素. 首先, GPT-3.5-turbo    采用的是无监督方法进行代码注释生成, 因此缺乏针对特定数据集的训
                 练. 其次, GPT-3.5-turbo  和  StarCoder 在理解代码注释生成任务中的函数调用时遇到了困难. 与                 EACS  相比,
                 DHCS  在  Python  数据集上, 分别在  BLEU-4、METEOR  和  ROUGE-L  上取得了  0.52、0.36  和  0.29  的提升; 在  Java
                 数据集上, DHCS   在所有   3  个指标上比   CodeT5  分别提高了    2.21、0.1  和  0.15; 在  Go  数据集上, 得分分别提高了
                 0.77、0.56  和  0.22. 值得注意的是, 我们通过对   CodeT5  和  DHCS  之间的成对样本   Wilcoxon  符号秩检验计算得出
                 p  值. 在  Python  数据集上, BLEU-4  指标的  p  值低于  0.04, METEOR  指标的  p  值低于  0.01; 在  Java 数据集上, p  值均
                 低于  0.01; 在  Go  数据集上  p  值约为  0.02. 这表明这些改进在统计学上具有显著性, 这些提升证明了              DHCS  的有效
                 性. 表明目标函数中的子函数调用能够补充额外的信息, 从而提高代码注释的性能.
                  5.6.2    人工评估
                    本研究在    3  个数据集上进行了人类评估, 结果如图           4、图  5  所示. 图中蓝线为   Python 数据集上的评估结果; 橙
                 线为  Java 数据集上的评估结果; 绿线为        Go 数据集上的评估结果. 参与此次评估的所有人员都具有丰富的领域知
                 识, 至少拥有   5  年的软件工程专业背景和研究经验.
   190   191   192   193   194   195   196   197   198   199   200