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

舒善富 等: 基于自适应知识蒸馏的代码大模型轻量化                                                       2449


                 10  个错误. 这些数据表明, 知识蒸馏方法会提升模型创新性, 促进模型对递归等包含循环算法的尝试.
                    在“试图访问序列范围外的索引”错误中, AKD              的错误数为    7  个, 高于原始学生模型的      3  个, 低于  KD  方法的
                 12  个和  RKD  方法的  11  个. 类似趋势在其他蒸馏方法中亦有体现, 说明知识蒸馏引导模型尝试新解法.
                    在完整性评估中, 学生模型和教师模型生成的代码有                  321  和  197  个不完整, AKD  方法只有  104  个. 在生成完
                 整的代码中, AKD    方法通过测试用例的比率为          33.2%, AKD  方法最高.
                    综合以上分析, AKD     方法相较于其他方法, 显著提高了代码生成的正确率, 并能生成质量更高的代码. 与学生
                 模型和教师模型相比, AKD       生成的代码在完整性上表现更好, 测试通过率与教师模型的差距更小.
                  4.4.9    RQ9: AKD  方法在不同代码生成模型上的泛化能力如何?
                    为验证   AKD  方法的泛化能力, 本文在       Code Llama 和  CodeGen-Mono  模型上进行了扩展实验以评估       AKD  方
                 法在不同模型规模和任务上的表现, 进一步确认其在多样化模型中的有效性与适应性.
                    实验涵盖从中小模型        (Code Llama-1.1B、CodeGen-Mono-350M) 到大模型  (Code Llama-7B、CodeGen-Mono-
                 6.1B), 在  HumanEval 和  MBPP  的  Pass@1  任务中系统评估  AKD  方法的表现, 实验结果如表    14  所示.

                                    表 14 AKD  方法在   Code Llama 及  CodeGen  上的泛化实验  (%)

                                                             HumanEval                   MBPP
                          模型                方法
                                                        Pass@1      精度损失          Pass@1      精度损失
                       Code Llama-7B      教师模型           22.6         -            41.4          -
                                          学生模型           5.5          75.7          2.8         93.2
                                          MiniLLM        7.3          67.6          5.8         86.0
                                            RKD          9.7          57.0          5.4         87.0
                      Code Llama-1.1B
                                            KD           10.3         54.3          5.4         87.0
                                           SeqKD         7.3          67.6          8.0         80.7
                                            AKD          11.0         51.2         11.2         72.9
                     CodeGen-Mono-6.1B    教师模型           24.0         -            32.5          -
                                          学生模型           12.11        49.5         14.6         55.1
                                          MiniLLM        12.8         46.7          9.0         72.3
                                            RKD          12.1         49.6         11.8         63.7
                    CodeGen-Mono-350M
                                            KD           13.4         44.2         12.6         61.2
                                           SeqKD         11.6         51.7         12.0         63.1
                                            AKD          18.3         23.8         21.0         35.3

                    在  Code Llama 模型上, AKD  在  HumanEval 任务中相较其他知识蒸馏方法将精度损失降低了                3.1%–16.4%,
                 在  MBPP  任务中降低了    7.8%–14.1%. 在  CodeGen-Mono  模型中, AKD  的优势更为显著, HumanEval 任务中精度损
                 失降低幅度达     20.4%–27.9%, MBPP  任务中则达  25.9%–37.0%, 展现出卓越的稳定性和任务适应性.
                    实验结果表明, 相比现有方法, AKD         能更有效地降低学生模型精度损失, 具备良好的跨模型泛化能力. 现有蒸
                 馏方法虽能在缩小模型规模时保留部分性能, 但在大规模差异条件下效果受限. 相比之下, AKD                             通过灵活调整知
                 识传递机制, 显著提升了小模型在多样架构与预训练数据下的性能表现.
                  4.4.10    RQ10: AKD  方法在其他数据集上的泛化能力如何?
                    为讨论   AKD  方法在其他数据集上的泛化能力, 本文引入了开放指令微调数据集                      Magicoder-OSS-Instruct [55] 进
                 行实验, 并采用更具挑战性的评估数据集             HumanEval+ [56] 对模型进行测试. 该数据集相较于原始        HumanEval 基准
                 测试用例, 规模扩大了      80  倍, 能够充分探究代码功能上的不足或极端情况.
                    为了评估    AKD  方法的泛化能力, 本实验以生成效果最好的            StarCoder 作为基座模型, 增加了    DeepSeek-Coder ,
                                                                                                      [57]
                 对比  AKD  方法在不同基座模型上的效果.
                    已有的实验表明, MiniLLM       及  SeqKD  方法消耗的资源及训练时间远大于其他方法, 本实验中不再比较.
                 CodeAlpaca 数据集上的实验结果如表       15  所示, Magicoder-OSS-Instruct 数据集上的实验结果如表    16  所示.
                    从表   15  的实验结果可以得知, AKD      方法在   StarCoder 和  DeepSeek-Coder 上均显著降低了精度损失. 对于
   125   126   127   128   129   130   131   132   133   134   135