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

李重 等: 基于语义重排序的代码注释生成方法                                                           611


                 库; 而对于基于    CodeT5  的代码注释生成方法, 我们则通过训练数据集对              Hugging Face [25] 提供的  CodeT5  预训练模
                 型进行了微调. 对于实验中所使用的基线方法, 均直接采用其开源实现, 并根据作者建议的设置配置参数, 或者使
                 用原始论文的默认设置, 以确保实验重复的准确性. 另外, 对于基线方法                     Code LLaMA, 我们遵循现有工作      [47] 的设
                 定, 使用  Hugging Face [25] 提供的  CodeLlama-7b-Instruct-hf 模型, 并采用少样本提示来进行代码注释生成. 图   4  展示
                 了实验所使用的少样本提示词模板. 同时, 为了进一步评估大语言模型在信息检索增强下的代码注释生成能力, 基
                 于  SRBCS  中所使用的基于    BM25  的词法检索和基于余弦相似度的语义检索构建了                 Code LLaMA  在信息检索增
                 强下的代码注释生成方法. 具体而言, 使用检索到的代码示例对前述少样本提示词中的样例进行替换实现                                   Code
                 LLaMA  在信息检索增强下的代码注释生成. 对于基线方法                  DeepSeek-Coder 和  Qwen-Coder, 我们分别采用
                 Hugging Face [25] 提供的  deepseek-coder-33b-instruct 模型和  Qwen2.5-Coder-32B-Instruct 模型. 这两个模型为当前
                 DeepSeek-Coder 和  Qwen-Coder 开源的最大量级版本. 在初步实验中, 我们发现          DeepSeek-Coder 和  Qwen-Coder
                 容易输出冗余内容, 因此在现有工作            [47] 的提示词基础上, 我们进一步增加语句“Please keep the output concise
                 enough and avoid including irrelevant information, and limit the output to 50 tokens as much as possible” 来限制冗余单
                 词的产生, 具体提示词模板如图          4  所示. 需要指出的是, 尽管不同提示词可能导致不同模型性能, 但本文主要关注
                 如何集成基于检索的方法和基于深度学习的方法进行代码注释生成, 提示词的调优超出了本文研究范围. 因此, 我
                 们主要基于已被现有工作         [47] 证实有效性的提示词来设计实验中大模型所使用的提示词. 在本文后续章节中, 为了
                 描述的简洁性, 分别使用        x-fewshot 和  x-RAG  表示代码大模型  x (即, Code LLaMA、DeepSeek-Coder 和  Qwen-
                 Coder) 在少样本提示词下和信息检索增强下的代码注释生成. 所有实验均运行在同一机器上, 该机器运行                              Ubuntu
                 18.04.6 LTS, CPU 配置为 Intel(R) Xeon(R) W-2245 CPU @ 3.90 GHz, GPU 配置为 NVIDIA GeForce RTX 3090.

                            Pretend  that  you  are  a  programmer  writing  [Programming  Language  (Java/Python)] functions.  For  a  given
                            [Programming Language (Java/Python)] function you have to generate a short documentation describing what the
                            function  does. [(For  DeepSeek-Coder  and  Qwen-Coder) Please  keep  the  output  concise  enough  and  avoid
                            including irrelevant information, and limit the output to 50 tokens as much as possible.]
                            Example 1:
                            Code:
                            # Example of Code
                            Documentation:
                            # Example of Code’s summary
                            ...
                            Now you are given that the following [Programming Language (Java/Python)] function:
                            Code:
                            # Target Code
                               图 4 Code LLaMA、DeepSeek-Coder 和  Qwen-Coder 所采用的少样本提示词

                  3.5   实验结果与分析
                    为了评估基于语义重排序的代码注释生成方法                 SRBCS  的有效性, 我们研究了以下       5  个问题.
                    • RQ1: SRBCS  是否比其他代码注释生成的方法更好?
                    • RQ2: SRBCS  是否能够有效对基于信息检索的方法和基于深度学习的方法进行集成?
                    • RQ3: SRBCS  生成的代码注释对于开发人员而言是否更为有效?
                    • RQ4: SRBCS  在不同的基于深度学习的方法上的有效性?
                    • RQ5: SRBCS  中语义重排序模型在不同配置下的有效性?
                    RQ1: SRBCS  是否比其他代码注释生成的方法更好?
                    该研究问题旨在评估        SRBCS  是否能够实现优于现有代码注释生成方法的性能. 为了回答该问题, 将所提出的
                 方法与第   3.3  节中所列出的所有基线方法进行了比较. 实验结果见表                2. 从表  2  的实验结果中, 可以得到以下发现.
   127   128   129   130   131   132   133   134   135   136   137