做过 SFT 的人都有体会:微调前模型啥都会一点,微调后某个领域变强了,但写文章、做推理、聊天的能力明显变菜了。
这叫灾难性遗忘。学了新东西,把老东西覆盖了。
最近用 Amazon Nova Forge 试了一下它的数据混合方案,效果不错------领域分类准确率上去了,MMLU 分数几乎没掉。
任务背景
客户评论分类,1420 个细分类别,四级标签体系,14000+ 训练样本。典型的企业级分类任务。
基础模型 zero-shot 不够准(类别太细),普通 SFT 之后分类好了但通用能力废了。
Nova Forge 做了什么
核心思路:微调时不只用你的领域数据,自动混入 Nova 的精选通用数据。
你提供领域训练集,Nova Forge 自动:
- 从 Nova 训练语料中选互补子集
- 动态调整混合比例
- 联合优化领域损失和通用损失
不需要你手动找通用数据、试混合比例。
效果
| 指标 | 基础模型 | 普通SFT | Nova Forge |
|---|---|---|---|
| VOC分类 | 低 | 高 | 高 |
| MMLU通用 | 正常 | 明显下降 | 基本持平 |
关键:领域能力和通用能力不再是二选一。
代码长什么样
python
import boto3, json
bedrock = boto3.client('bedrock', region_name='cn-northwest-1')
# 创建微调任务
response = bedrock.create_model_customization_job(
jobName='voc-classifier',
customModelName='nova-voc',
roleArn='arn:aws-cn:iam::123456789012:role/BedrockRole',
baseModelIdentifier='amazon.nova-pro-v1:0',
trainingDataConfig={
's3Uri': 's3://bucket/training_data.jsonl'
},
outputDataConfig={
's3Uri': 's3://bucket/output/'
},
customizationType='FINE_TUNING',
hyperParameters={
'epochCount': '3',
'batchSize': '8',
'learningRate': '0.00001'
}
)
训练数据是标准 JSONL,messages 格式:
json
{
"messages": [
{"role": "system", "content": "分类系统 prompt..."},
{"role": "user", "content": "这个摄像头安装很简单"},
{"role": "assistant", "content": "{\\\"level_1\\\":\\\"安装与配置\\\",...}"}
]
}
什么时候用
- 领域分类/工单路由 → 用 Nova Forge
- 特定格式输出 → 用 Nova Forge
- 数据很少(<100条)→ 用 PEFT 或 few-shot
- 只是调 prompt 能搞定 → 不需要微调
如果你遇到了"微调后通用能力退化"的问题,数据混合是目前比较靠谱的解法。
🔗 Amazon Nova Forge:aws.amazon.com/cn/nova/for...