Page 129 - 《软件学报》2026年第6期
P. 129

2448                                                       软件学报  2026  年第  37  卷第  6  期


                 参数自适应机制在两个数据集上均取得最佳表现, 验证了其必要性和有效性.

                    综上所述, 固定参数      β 能提高知识蒸馏的效果, 但其效果不如            AKD  方法. AKD  方法的参数自适应学习在两个
                 评估数据集上均取得了最佳结果, 证明了             AKD  方法的必要性和有效性.
                  4.4.8    RQ8: AKD  方法生成代码的质量如何?
                    本文在   HumanEval 和  MBPP  数据集上评估了各知识蒸馏方法的代码生成质量, 评估标准采用                   Wen  等人  [51] 提
                 出的  20  类代码生成错误类型. 实验由       3  名研究人员进行人工评估, 对结果不一致样本讨论后达成最终结论. 部分
                 未出现的错误类型如“TimeoutError”“IndentationError”等未在本文所测试的知识蒸馏方法中出现, 因此不对其进行
                 展示, 实验结果如表      13  所示.


                            表 13 各知识蒸馏方法在        HumanEval 及  MBPP  数据集上生成代码的质量评测结果

                                                                     学生                         教师
                     评估类型                      评估描述                       KD RKD SeqKD MiniLLM      AKD
                                                                     模型                         模型
                    AssertionError  模型创建一个空函数, 使用pass语句、return 0等     235  25  29   27    153   108  29
                                 Model定义了一个函数, 但是用不正确的名称调用它           31   7   12   21     35    40  11
                     NameError
                                     模型不生成任何内容, 导致缺少入口点               26   1   1    2      28    13   1
                                       生成代码中的引号或括号不平衡                  1   2   1    0      1     1    5
                     SyntaxError
                                    过多的函数生成达到限制, 导致输出不完整               4   0   1    0      6     8    0
                                           函数处理空输入失败                   1   0   0    1      0     0    1
                     ValueError
                                      函数接收到正确的类型但不正确的值                 2   3   2    2      2     5    2
                     IndexError          试图访问序列范围外的索引                  3  12   11   12     4     0    7
                     TypeError          对不适当类型的对象应用操作                 15  23   27   38     24    17  36
                    AttributeError        访问对象中不存在的属性                  1   0   2    0      2     0    1
                  UnboundLocalError       在赋值前引用局部变量                   2   1   1    0      0     0    1
                    RecursionError        函数缺乏适当的终止条件                  0   6   6    14     3     4   10
                 NotImplementedError     模型包含raise以提高健壮性               0   0   0    0      0     1    0
                                             生成的代码完整                  343  584  571  547  406   467  560
                    完整性评估
                                            生成的代码不完整                  321  80  93  117    258   197  104
                                             生成的代码正确                  92  151  124  161   120   208  186
                    正确性评估
                                      生成完整的代码通过测试的比例 (%)              26.8 25.9 21.7  29.4  29.6  44.5  33.2

                    从正确性评估“生成的代码正确”的数量来看, AKD               方法生成了     186  个正确代码, 较初始学生模型的        92  个有
                 显著提升, 并且接近教师模型的         208  个, 表明  AKD  方法在整体上增强了学生模型的代码生成能力.
                    在错误类型的分布上, 对于“模型创建一个空函数, 使用                pass 语句、return 0  等”, AKD  方法仅有  29  个错误, 较
                 原始学生模型的      235  个和教师模型的    153  个大幅减少. 表明    AKD  方法在引导模型生成有意义的代码方面具有明
                 显优势, 避免了简单占位符代码的产生.
                    对于“Model 定义了一个函数, 但是用不正确的名称调用它”这个错误, AKD                   方法的错误数为      11  个, 介于  KD
                 的  7  个和  RKD  方法的  12  个之间, 远低于原始学生模型的      31  个及教师模型的    40  个, 错误数量仅多于    KD  方法. 由
                 于  AKD  方法是对  KD  和  RKD  方法的自适应结合, 这一结果符合预期, 兼具           KD  和  RKD  的特征. 此外, 所有的蒸
                 馏方法相比原始学生模型, 在此类错误上有明显的改进, 说明知识蒸馏能帮助模型纠正函数命名和调用方面的
                 问题.
                    在“模型不生成任何内容, 导致缺少入口点”错误上, AKD               仅  1  个, 与表现最好的   KD、RKD   方法持平, 低于原
                 始学生模型的     26  个. 证明了  AKD  方法在确保代码完整性和可运行性方面的有效性, 能提升生成代码的质量.
                    值得注意的是, 在一些复杂的错误类型上, AKD              方法的错误数有所增加. 例如, 因“对不适当类型的对象应用
                 操作”而导致的     TypeError, AKD  的错误数为  36  个, 高于学生模型的    15  个. 在因“函数缺乏适当的终止条件”而导
                 致的  RecursionError 上, 原始学生模型没有出现此类错误, 而其他知识蒸馏方法出现了                 3–14  个错误, AKD  方法有
   124   125   126   127   128   129   130   131   132   133   134