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

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


                 在准确性、完整性、简洁性和整体注释质量方面均表现突出. 子函数调用在实际代码中经常出现, 捕捉函数调用
                 中代码结构的语义和关系可以显著提高生成注释的质量.
                  5.6.3    消融实验
                    为了回答    RQ2  和  RQ3, 本研究还进行了消融实验, 以评估        DHCS  中两个关键组件的影响, 即主题感知复制机
                 制和掩码子函数预测任务. 实验结果如表             4  所示.

                                                   表 4 消融实验结果 (%)

                                           BLEU-4                 METEOR                 ROUGE-L
                     不同变体方法
                                    Python   Java    Go     Python  Java    Go     Python   Java    Go
                       DHCS          18.62  18.59   18.05   17.63   16.60  17.92    34.99  35.69   37.42
                    DHCS w/o msp     18.25  18.34   17.84   17.60   16.59  17.73    34.83  35.02   37.02
                     DHCS w/o twc    18.40  18.37   17.89   17.60   16.54  17.69    34.84  35.63   37.01
                   DHCS w/o msp&twc  18.13  18.08   17.62   17.37   16.42  17.55    34.14  34.84   36.79
                   DHCS w/o subfunc  17.69  16.22   17.28   17.19   14.93  17.04    34.03  32.00   36.75

                    从表  4  中可以看到, 在去除各个模块后, DHCS         的性能均有所下降. 特别是去除掩码子函数预测任务                 (msp) 和
                 主题感知复制机制       (twc) 后, 性能下降最为明显, 这验证了本文的自监督训练目标在分层编码器中的重要性和有效
                 性. 此外, 还发现, 去除子函数增强        (subfunc) 时, DHCS  仍然略优于没有使用    msp  和  twc 的模型, 表明子函数的调
                 用确实对代码注释的生成有增益作用.
                  5.6.4    训练/推理时间
                    为了回答    RQ4, 首先报告了本文方法和所有         baseline 模型的参数规模, 结果如表      5  所示.

                                               表 5 各模型的参数规模统计 (M)

                                               方法                       参数量
                                           NeuralCodeSum                  86
                                             RoBERTa                      173
                                             CodeBERT                     173
                                             UniXcoder                    127
                                              CodeT5                      223
                                            GPT-3.5-turbo                 -
                                             CodeT5+                      223
                                             StarCoder                   15 517
                                              EACS                        223

                    从表  5  中可以看出, NeuralCodeSum  的参数量较小, 表现也较差. 其他         baseline 模型的参数量相似, 平衡了性
                 能和计算效率. 值得注意的是, StarCoder 的参数量显著较大, 达到了             15 517M, 这使得它的计算资源需求较高, 训练
                 时间更长, 推理速度较慢. 相比之下, 本文模型虽然较小, 但在计算资源上更高效, 能在保持竞争力的同时提供更快
                 的部署速度和更高的训练效率.
                    后文图   6  展示了各个模型在     3  个数据集上的训练时间和推理时间. 横轴表示各模型, 纵轴表示每个                   epoch  的训
                 练或推理步骤的时间       (以  min  为单位). 可以观察到, StarCoder 的训练和推理时间最长, 大约是其他方法的            10  倍. 本
                 文模型尽管引入了分层结构和新的解码机制, 但性能提升的同时, 计算复杂度的增加非常小.
                  5.7   讨 论
                  5.7.1    依赖关系对基准模型的影响
                    本文方法采用了分层结构来捕捉上下文依赖关系, 从而提高了注释的质量. 与此不同, 其他                            baseline 模型未能
                 做到这一点. 为了评估函数依赖关系对这些模型的影响, 通过将子函数信息直接集成到                           baseline 模型的输入中, 进
                 行了一次对比实验. 在训练和测试过程中, 这些              baseline 模型的输入包括了子函数信息, 结果如表            6  所示. 其中,
                 “_wsf”表示包含子函数的输入.
   192   193   194   195   196   197   198   199   200   201   202