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

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


                    知识蒸馏通过教师模型生成的输出分布概率, 帮助学生模型学习代码的细节. 代码生成对结构化语法和逻辑
                 关系有着严格的要求. 知识蒸馏在逐步捕捉各步骤中的语法与逻辑关系方面表现出色, 使学生模型能够精确地模
                 仿教师模型在特定数据上的生成方式, 生成符合严格代码规范的输出. 知识蒸馏技术通过大参数模型                                 (教师模型)
                 指导小参数模型      (学生模型) 训练, 在减小模型规模的同时降低生成精度损失. 其核心是最小化教师模型与学生模
                 型生成概率分布的损失函数, 使学生模型在参数减少的情况下依然具备较强的代码生成能力. 优化函数如下:

                                                                [          ]
                                             minL KD (p,q θ ) = minE x∼data D(p(x)|q θ (x))           (1)
                                              θ           θ
                 其中,  L KD (p,q θ ) 表示知识蒸馏的损失函数,  D(·|·) 是散度度量,  p(x) 是教师模型生成的概率分布,        q θ (x) 是学生模型
                 生成的概率分布,     θ 是学生模型的参数.
                    本文面临的挑战是如何在降低模型参数规模的情况下, 充分保持代码生成的精度和质量. 尽管知识蒸馏技术
                 在自然语言处理      [42] 和图像分类  [43] 等领域取得了显著效果, 但将其直接应用于代码生成任务时存在一些困难. 代码
                 生成具有高度结构化和严格语法要求, 生成的代码需要严格遵循编程语言的语法规则和逻辑结构. 相较于自然语
                 言, 代码中的微小错误       (如缺少一个括号或拼写错误) 都会导致编译失败和运行错误; 其次, 教师模型和学生模型
                 在参数规模上的巨大差异会导致知识蒸馏过程中存在信息传递瓶颈. 大参数的教师模型能够捕获更复杂的代码模
                 式和语义信息, 而小参数的学生模型无法有效学习和表示这些复杂的信息; 此外, prompt 的选取对代码生成模型
                 的生成效果有重要影响, 如何选取           prompt 模板以发挥教师模型的能力, 是代码生成领域内亟待解决的挑战. 综上
                 所述, 如果不针对代码生成任务的特点进行改进, 知识蒸馏将无法充分发挥其作用, 导致学生模型的性能大幅
                 下降.
                    针对代码生成任务的特殊性, 本文在知识蒸馏的框架下, 选择适当的                        prompt 模板, 构造任务提示明确的
                 prompt 以提高教师模型的生成质量. 本文通过设计有效的蒸馏策略和损失函数, 确保学生模型在减少参数量的同
                 时, 学习教师模型的代码生成能力, 生成符合语法和逻辑要求的高质量代码.

                  3   自适应知识蒸馏方法

                  3.1   Prompt 选取
                    在代码生成任务中, 知识蒸馏的效果很大程度上取决于教师模型输出的质量. 学生模型依赖于教师模型提供
                 的概率分布来学习代码生成的细节, 因此确保教师模型输出的准确性和一致性至关重要. 教师模型输出的概率分
                 布不仅由其自身的参数决定, 还受到输入             prompt 的影响. 指令内容明确的模板能够构造好的             prompt, 引导教师模
                 型生成更高质量的代码, 如更准确的语法、更规范的格式等. 本文讨论的                         3  种模板如表   1  所示, 需要在模板的
                 {instruction}中填写数据集的指令内容, 在{input}中填写数据集的输入内容, 若为空则不填写, 构造后的内容是
                 prompt, 即输入至模型的内容. 模板      1  来源于  Li 等人  [34] 的模板, 未提供额外的生成指导, 引导性较弱; 模板         2  来源
                 于  Chia 等人  [45] 的模板, 告知模型在生成代码时应避免不必要的任务            (如测试或解释), 为生成过程增加了一定的限
                 制和方向; 模板    3  来源于  Stanford-Alpaca 的模板  (https://github.com/tatsu-lab/stanford_alpaca), 是更结构化的指令,
                 明确告诉模型应该完成的任务及输入信息.

                                                   表 1 模板类别及其描述

                  模板类别          来源                                   模板描述
                    模板1       StarCoder             <fim_prefix>{instruction}\n{input}<fim_suffix><fim_middle>
                                            Please complete the following Python code without providing any additional tasks such
                    模板2      Instruct-Eval
                                                        as testing or explanations.\n{instruction}\n{input}
                                          Below is an instruction that describes a task. Write a response that appropriately completes the
                    模板3     Stanford-Alpaca
                                                request.### Instruction:\n{instruction}\n### Input:{input}\n### Response:

                    因此, 自适应知识蒸馏方法旨在使学生模型学习教师模型的生成分布, 而高质量的                          prompt 模板可以提高教师
                 模型的生成质量, 使学生模型学到更精准的答案. 随着学生模型质量的提升, 其与教师模型之间的差距得以缩小,
   112   113   114   115   116   117   118   119   120   121   122