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] , 来评估代码注释生成方法的有效性,
   124   125   126   127   128   129   130   131   132   133   134