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”表示包含子函数的输入.

