Datawhale 科大讯飞AI大赛(模型蒸馏)

发布于:2025-07-28 ⋅ 阅读:(10) ⋅ 点赞:(0)

目标

使用教师模型蒸馏学生模型(小模型),使得学生模型尽可能在数学推理任务中表现更好,评分标准由4个指标组成:Overall Score=0.4×AS+0.3×CQS+0.2×ES+0.1×MLS

  • AS(答案准确率):正确答案比例,映射至 0–100;
  • CQS(CoT推理质量):推理链逻辑性与合理性;
  • ES(解题效率):每条题目推理所用 token 数,token数量越小越好;
  • MLS(模型轻量化):模型整体文件大小,模型文件越小越好。

实现过程

数据集构建

这里构建的数据集包含3个部分,分别是:

  • 任务一中的微调数据集200条
  • 任务二中的训练数据集
  • 任务二中的测试数据集,使用教师模型进行批量推理(参考星火平台的批量推理功能),得到包含思考过程的输出,作为测试数据集

这里需要注意存在以下几个问题:

  • 任务一中的微调数据集包含<think></think>内容,考虑到模型中评分标准包含推理所用token数量,这里将think标签中的内容删除,减少token生成数量
  • 各个数据集中,有存在output结果为空的情况,此时删除该条数据
  • 微调数据时,需要符合包含instruction、input和output字段,这里将系统提示词放在instruction中,input为问题,output为结果
  • 为了保证模型针对英文和中文有不同的提示词,这里分别设置了对应语言的系统提示词
english_prompt = "Please think through the following math problem step by step and generate the answer. The problem is as follows:"
chinese_prompt = "请你一步一步思考下面的数学问题并生成答案,问题如下:"

def remove_think_tags(text):
    return re.sub(r'<think>.*?</think>', '', text, flags=re.DOTALL)

if input_text.isascii():
   data["instruction"] = english_prompt
else:
   data["instruction"] = chinese_prompt

if len(data["output"]) == 0:
   continue

通过上述方法构建了3个对应的数据集,目前想要对最终的模型使用的数据集进行消融实验,训练及评分过程较慢。三个数据集合并后共包含2126条数据。

模型微调

使用星火平台上传数据集后,构建微调任务,对应的部分微调参数如下:

参数 参数
学习率 8e-5 训练次数 3
LoRA秩 8 Dropout 0.1
LoRA 缩放系数 16

微调中间过程的loss指标:
请添加图片描述
模型微调后,创建应用,发布服务即可提交赛题,目前赛题评分中,待更新最后分数。。。

参考任务


网站公告

今日签到

点亮在社区的每一天
去签到