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 方法有

