1. 笔记/

From 10% to 96%: Qwen2.5-0.5B 文本分类微调实践

From 10% to 96%: Qwen2.5-0.5B 文本分类微调实践 #

原文链接: https://zhuanlan.zhihu.com/p/2010718456983618357
作者: 钅钅钅
编辑时间: 2026-02-27 14:25・浙江

本文记录了 Qwen2.5-0.5B 在文本分类任务上的 CPU 部署与微调实验过程。从基线准确率 10.59% 提升至最终 95.61%,召回率从 15.34% 提升至 96.18%。


一、CPU 部署方案 #

1.1 部署配置 #

配置项内容
推理框架llama.cpp
硬件CPU only

1.2 优化策略 #

策略说明
Prompt 优化调整 prompt 使模型只输出 1 个 token 作为分类选项
Prefix Cache启用 KV Cache 复用,避免重复计算 prompt 部分

1.3 性能指标 #

  • Latency: ~300ms / request
  • 结论: 满足实时性要求

二、微调实验 #

2.1 Baseline(未微调) #

MetricValue
Accuracy10.59%
Recall15.34%

基线指标惨不忍睹,模型对分类任务几乎没有理解。

2.2 数据合成 #

数据来源:

  • 收集各类别的标准说法和泛化说法
  • 使用 Qwen2.5-32B 进行数据合成

数据质量:

  • 合成数据存在不属于任何类别的问题样本
  • 经人工标注后,这些数据作为 “other” 类别的训练数据(意外收获)
  • 最终得到 2万条数据

2.3 训练策略实验 #

Exp 1: 默认训练策略 #

Config:

  • Learning Rate: 3e-5
  • LR Scheduler: linear decay
  • Batch Size: 2

Result:

MetricValue
Accuracy93.54%
Recall92.69%

微调有效,但指标仍有提升空间。

Exp 2: Loss 计算位置 #

尝试不同的 loss 计算策略:

Loss onAccuracyRecallNote
prompt + answer94.74%93.78%↑~1%
prompt only10.07%13.86%↓ 比未训练更差
answer only (default)93.54%92.69%baseline

发现: 在 prompt + answer 上计算 loss 效果更好。

分析:

  • Prompt 中包含各选项的含义解释
  • 模型可能在 prompt 上学习到了选项语义与答案的映射关系
  • 仅在 prompt 上计算 loss 导致过拟合了无答案的信息,指标比未训练还低

跨模型验证: 在 Qwen2.5-3B 上尝试,指标无明显提升。

Exp 3: Warmup + Weight Decay #

Config:

  • Warmup Ratio: 20%
  • Weight Decay: 0.01

Result:

MetricValue
Accuracy95.11%
Recall95.08%

分析:

  • 缓解了对微调数据的过拟合

跨模型验证: 在 Qwen2.5-3B 上尝试,指标无明显提升。推测原因:参数量增加后,模型容量更大,对训练技巧敏感度降低。

Exp 4: 调参实验 #

进行多轮超参数调优后,指标稳定在 95% 附近,无明显突破。

Exp 5: 蒸馏数据 #

数据来源: DeepSeek-R1 问答数据

混合比例实验:

Distill : OriginalAccuracyRecall
1 : 495.61%96.18%
1 : 194.71%95.30%

发现:

  • 适量的蒸馏数据(20%)带来 ~1% 提升
  • 蒸馏数据比例过高反而导致指标下降
  • 蒸馏数据质量 > 数量

跨模型验证: 在 Qwen2.5-3B 上无明显提升。


三、最终结果 #

StageAccuracyRecallΔ
Baseline10.59%15.34%-
+ Default FT93.54%92.69%+83%
+ prompt+answer loss94.74%93.78%+1.2%
+ warmup + wd95.11%95.08%+0.4%
+ Distill (1:4)95.61%96.18%+0.8%

四、总结与思考 #

4.1 核心发现 #

1. Loss 计算策略影响显著 #

  • 在 prompt + answer 上计算 loss 比仅在 answer 上效果更好
  • 推测 prompt 中的选项解释提供了重要的语义信息
  • 小模型对此更敏感

2. 训练技巧的有效性因模型而异 #

  • Warmup + Weight Decay 在 0.5B 模型上有效
  • 在 3B 模型上无明显收益
  • 结论:小模型对训练技巧更敏感

3. 蒸馏数据需要控制比例 #

  • 20% 蒸馏数据比例最优
  • 过多蒸馏数据可能导致分布偏移

4.2 经验教训 #

  • 数据质量 > 数据数量
  • 小模型微调需要更精细的训练策略
  • 跨模型验证很有必要,trick 不一定通用

4.3 后续优化方向 #

  • 尝试更大的 teacher model 进行蒸馏
  • 数据增强策略优化

五、评论区精选 #

评论 1:关于提示词计算的问题 #

hhh 提问:

你前面所说的对提示词进行给式计算是什么意思呀?这个我不太理解

hhh 提问:

请问你蒸馏数据时候,长出来的数据是什么样子的呀?是在思考过程的吗,这样的话,那你在计算损失函数的时候,需不需要对思考过程的损失函数也进行计算?

作者 钅钅钅 回复:

我微调的这个模型不思考,把 deepseek r1 的思考过程去掉进行蒸馏的

hhh 追问:

那您最终的训练数据中是直接输出分类的名称吗?完全一点分析过程都不要?

评论 2:关于 32B 模型不微调的准确率 #

画枕 提问:

在 qwen32b 不微调,基于提示词分类准确率是多少呢?[思考]

评论 3:关于 CPU 性能 #

codingBug 提问:

cpu 能跑到多少 tps 啊

作者 钅钅钅 回复:

和 cpu 性能有关,我这个 cpu tps 2.1 左右


六、相关信息 #

关于作者 #

  • 昵称: 钅钅钅
  • 身份: 学生
  • 关注者: 21
  • 文章数: 2
  • 回答数: 5

关注者包括: LAM、美丽新世界 等 20 人赞同了该文章

文章互动数据 #

  • 👍 赞同: 20
  • 💬 评论: 7 条
  • ⭐ 喜欢: 49
  • 📤 分享
  • 📝 申请转载