Page 129 - 《软件学报》2026年第2期
P. 129
608 软件学报 2026 年第 37 卷第 2 期
算法 1. 基于语义重排序的代码注释生成算法.
c; 词法检索库 LexReDatabase; 语义检索库 SemReDatabase; 深度学习代码注释生成模型
输入: 目标函数源代码
CodeSumModel; 语义重排序模型 Reranker;
输出: 与目标函数源代码 c 相吻合的注释 ˆ s.
1. CandidateSummaries = ∅
2. LexCandidateSummaries = BM25(LexReDatabase)
3. for CandidateSummary ∈ LexCandidateSummaries do
4. CandidateSummaries.append(CandidateSummary)
5. end for
6. SemCandidateSummaries = CosSim(SemReDatabase)
7. for CandidateSummary ∈ SemCandidateSummaries do
8. CandidateSummaries.append(CandidateSummary)
9. end for
10. DLCandidateSummaries = BeamSearch(CodeSumModel, c)
11. for CandidateSummary ∈ DLCandidateSummaries do
12. CandidateSummaries.append(CandidateSummary)
13. end for
14. ReRankedSummaries = Reranker(CandidateSummaries)
15. ˆ s = ReRankedSummaries[0]
16. return ˆ s
3 实验分析
3.1 实验数据集
本文在 JCSD 和 PCSD 两个数据集上进行实验, 这两个数据集均在代码注释生成领域中被广泛应用 [16,31] .
表 1 给出了实验所用数据集的详细统计信息.
表 1 实验数据集
数据集名称 训练数据数量 验证数据数量 测试数据数量 总数量
JCSD 69 708 8 714 8 714 87 136
PCSD 55 538 18 505 18 502 92 545
JCSD 是由 Hu 等人 [8,17] 从 GitHub 收集的一个数据集, 其包含了 2015–2016 年间至少有 20 个点赞的 9 714 个
Java 项目, 总计 87 136 个函数源代码-代码注释对. 这 87 136 个函数源代码-代码注释对被按 8:1:1 的比例分割为训
练集、验证集和测试集.
PCSD 是由 Wan 等人 [10] 对 Barone 等人 [34] 所收集的数据集处理得到, 该数据集总计包含 92 545 个来自 GitHub
的函数源代码-摘要对. 这 92 545 个函数源代码-代码注释对被按 6:2:2 的比例分割为训练集、验证集和测试集.
数据预处理: 对于 JCSD 和 PCSD 两个数据集, 进一步遵循现有工作 [8,14,35,36] 对其中的函数源代码-代码注释对
进行了预处理. 具体而言, 首先将函数源代码中出现的数值常量、字符或字符串常量以及布尔常量替换为_NUM_、
_STR_和_BOOL_. 然后, 对代码注释中的所有单词进行了统一的小写化.
3.2 评价指标
本文采用 3 种常用的评价指标, 即 BLEU [32] 、ROUGE-L [37] 和 METEOR [38] , 来评估代码注释生成方法的有效性,

