Step1 报告:SFT 风险控制¶
中文邮政客服任务 SFT 训练方案与风险控制报告¶
1. 目标¶
这份文件主要把两件事说清楚:
- 在
k级别中文客服数据上,SFT 的实施路径应如何设计 - 训练过程中应该看哪些指标,避免模型出现“训崩 / crash / collapse / 明显退化”
这里说的“风险控制”,不是泛泛而谈训练安全,而是围绕这套数据和任务,怎么把训练过程看住、把问题尽早发现。
2. 当前数据特点决定不能激进训练¶
按现在的数据情况,至少有三个很现实的约束:
2.1 数据量不大¶
当前数据是 k 级别,不是百万级别。
对应的训练约束是:
- 很难支撑激进的大模型全参训练
- 很容易过拟合
- 很容易把模型原有通用能力训坏
2.2 数据更像客服监督数据,而不是 reasoning 数据¶
当前数据核心内容是:
- 对话
- summary
- intent
它适合做:
- 客服风格适配
- 领域知识适配
- 工单总结与结构化输出
但它并不天然适合做:
- 高质量思维链监督
- reasoning 行为强化
2.3 输出目标很明确¶
本项目最终希望模型能稳定完成:
- 中文客服对话
- 领域问答
- 工单总结
JSON输出
所以训练设计的重点必须放在“输出稳不稳、任务贴不贴”上,而不是去追 reasoning 分数。
3. 微调实施方案¶
3.1 采用 LoRA / 参数高效微调方案¶
当前阶段不采用全参微调,训练方案确定为采用:
LoRA- 或其他参数高效微调方案
原因:
- 算力成本低
- 调参成本低
- 更符合小数据场景
- 更不容易把底模能力整体训坏
3.2 分阶段推进模型规模¶
本项目采用如下实施顺序:
Qwen2.5-3BQwen2.5-7B- 视资源情况再考虑
gpt-oss:20b
该实施路径的价值在于:
- 小模型更快暴露数据问题
- 小模型更利于快速试验超参数
- 等流程稳定后,再把经验迁移到更大模型
3.3 不采用一步到位的超大模型路线¶
这里不是否定大模型本身,而是当前不走这条路线,原因很简单:
- 训练慢
- 验证慢
- debug 成本高
- 在当前时间窗口下性价比不高
4. 训练时最需要监控的指标¶
下面这些指标统一作为训练过程的健康度监控项。
4.1 训练 loss¶
最基础指标。
需要观察:
- 是否稳定下降
- 是否突然震荡
- 是否在某一阶段开始异常升高
风险信号:
- loss 长时间不降:说明学习率、数据、模板或训练目标有问题
- loss 突然暴涨:可能是学习率过高、梯度不稳定、数据脏样本影响
4.2 验证 loss¶
这一项比训练 loss 更重要。
需要观察:
- 验证集 loss 是否同步改善
- 是否出现明显过拟合
风险信号:
- 训练 loss 继续下降,但验证 loss 开始上升
- 说明模型开始记忆训练集而不是学到泛化能力
4.3 结构化输出成功率¶
这个项目不能只看语言模型的通用 loss,还需要同时跟踪任务指标。
本方案中专门统计:
JSON可解析率- 字段完整率
- 字段格式正确率
风险信号:
- loss 看起来下降了,但 JSON 经常不闭合
- 字段缺失率很高
- 输出开始变长、变乱、格式漂移
这类情况通常说明:
- 模型表面上更会生成了,但没有真正学会按要求输出
4.4 客服回复质量抽样¶
本方案要求每个 checkpoint 固定抽样同一批验证样本,人工检查:
- 回复是否礼貌
- 是否答非所问
- 是否出现明显幻觉
- 是否与邮政场景匹配
原因也很直接:
- 纯 loss 指标很难完全反映客服体验
- 报告材料中也需要能展示“人工质检结果”
4.5 通用能力退化信号¶
本方案保留一小批通用样本用于观察:
- 常识问答
- 一般对话
- 简单结构化输出
风险信号:
- 客服领域内效果提升了
- 但通用输出明显退化,甚至基础表达能力下降
这通常意味着模型已经出现明显的灾难性遗忘。
5. 重点防崩指标¶
若只保留最关键的监控项,本方案重点采用以下 5 个:
- 训练 loss 是否突然暴涨
- 验证 loss 是否在训练 loss 继续下降时反向上升
- JSON 可解析率是否下降
- 固定验证样本输出是否出现明显格式漂移
- 同一 checkpoint 的人工抽样质量是否突然恶化
和只盯着一个总 loss 相比,这几项更能看出模型是不是已经开始往坏的方向走。
6. 为什么会训崩¶
常见原因包括:
6.1 学习率过高¶
最常见。
表现:
- loss 抖动大
- 输出开始乱
- 验证波动明显
6.2 数据质量不稳定¶
当前数据本身就不算特别规整,存在:
- summary / intent / 对话粒度混杂
- 样本风格不统一
- 部分样本噪声较大
若不完成必要清洗,模型就容易学到不稳定模式。
6.3 模板设计不一致¶
若训练样本的输入输出模板不统一,比如:
- 有的样本像对话
- 有的样本像摘要
- 有的样本像 JSON 生成
但又没有清楚区分任务头,模型会学得很乱。
6.4 小数据下训练太久¶
k 级别数据很容易过拟合。
所以在这类数据上:
- 训练步数过多
- checkpoint 选得太晚
都可能让模型“越训越差”。
7. 如何降低训崩概率¶
7.1 保守超参数起步¶
起步策略定为:
- 先用保守学习率
- 小步试跑
- 先看 1 个 epoch 内的趋势
一开始不把训练强度拉满,先看趋势,再决定是否继续加。
7.2 固定频率保存 checkpoint¶
本方案要求:
- 按固定
step保存 checkpoint - 不默认最后一个就是最好
这样后面如果开始退化,还能回退到更稳的中间 checkpoint。
7.3 每个 checkpoint 做同一套验证¶
固定验证内容包括:
- 验证集 loss
- JSON 可解析率
- 字段完整率
- 客服回复人工抽样
这样不同 checkpoint 才有横向可比性。
7.4 单独监控 JSON 任务¶
这个项目里,JSON 输出能力是单独的核心能力。
本方案不将其混入总评价,而是单独列成一项核心指标。
7.5 先做 3B,再做 7B¶
原因很现实:
- 3B 更快出结果
- 更快暴露数据 / 模板问题
- 先把方案跑稳,再迁移到 7B,成功率更高
8. 报告中采用的训练流程表述¶
成稿里,训练流程按下面这套写法展开:
- 先对原始客服数据做清洗、筛选和 EDA
- 统一训练模板,区分客服对话任务与工单总结 / JSON 任务
- 先使用
Qwen2.5-3B做 LoRA 微调,验证训练流程和指标体系 - 固定 step 保存 checkpoint,并持续监控训练 loss、验证 loss、JSON 可解析率和人工抽样效果
- 在训练稳定后,再迁移到
Qwen2.5-7B获取更强效果 - 以
gpt-oss:20b作为更大模型基线或补充对照,不纳入第一阶段 SFT 主力路线
9. 最终实施结论¶
最后把训练方案收束成一句话,就是:
- 主力模型:Qwen2.5-3B / 7B
- 训练方式:LoRA
- 关键监控:训练 loss + 验证 loss + JSON 可解析率 + 人工抽样
- checkpoint 策略:固定 step 保存,中途选优,不迷信最后一个
归纳来看:
这套 SFT 方案的重点,不是继续把模型做大,而是先把训练跑稳、把输出格式管住、把结果做成可复现的完整闭环。