Skip to content

📏 模型评估与测试

微调完了怎么知道好不好?——科学的评估方法让结果有说服力

为什么要评估

微调后的模型可能:

  • 背下了训练数据但遇到新问题就崩(过拟合)
  • 在某个方面变好了但其他能力退化了(灾难性遗忘)
  • 看起来输出变好了但用评估指标一测其实是幻觉

不评估的微调等于盲调。


评估方法

1. 自动评估(量化指标)

python
from evaluate import load

# BLEU(翻译质量)
bleu = load("bleu")
predictions = ["审查结果显示该条款存在三项风险"]
references = [["该条款存在三项风险需要修改"]]
print(bleu.compute(predictions=predictions, references=references))

# ROUGE(摘要质量)
rouge = load("rouge")
print(rouge.compute(predictions=predictions, references=references))
指标用途范围
BLEU翻译/生成质量0-1,越高越好
ROUGE-L摘要/生成覆盖度0-1,越高越好
Perplexity语言流畅度越低越好
Accuracy分类/判断准确率0-1,越高越好

自动评估有局限——同样的语义不同措辞可能得分低。所以不能全靠自动指标。


2. 人工评估

构建 50-100 条测试样本,每条对比微调前后的输出:

测试样本 #1:
输入:审查:合同约定违约金为日千分之五

微调前:每日千分之五的违约金比例...
微调后:[风险等级] 高 | 日千分之五折合年化 182.5%,超出法定 24% 上限...

人工判断维度:

  • 准确性:答案对吗
  • 完整性:漏了关键信息吗
  • 格式:输出结构符合要求吗
  • 流畅度:读起来通顺吗

3. 基准测试

用公开数据集做标准化对比:

python
# 用 MMLU 测通用知识
# 用 C-Eval 测中文能力
# 用 HumanEval 测代码能力

# 或用 lm-evaluation-harness 一键评测
# pip install lm-eval
lm_eval --model hf \
  --model_args pretrained=./qwen-contract-merged \
  --tasks mmlu,ceval-valid \
  --batch_size auto

微调效果检查清单

  • [ ] 训练 loss 稳定下降
  • [ ] 验证 loss 不反弹(不反弹 = 不过拟合)
  • [ ] 测试集自动指标不低于微调前
  • [ ] 人工评估 50 条通过率 >80%
  • [ ] 通用能力没有明显退化(随便问几个微调领域外的问题)
  • [ ] 没有生成重复/乱码(检查 20 条输出)
  • [ ] 输出格式符合要求(如包含"风险等级""建议"等字段)

常见问题

验证 loss 一直涨

过拟合了。解法:

  • 减少 epoch 数
  • 加大 lora_dropout
  • 增加训练数据

微调后通用能力严重退化

灾难性遗忘。解法:

  • 训练数据里混入 10% 通用数据
  • 降低学习率
  • 减少 epoch 数

输出格式化不稳定

模型没学会固定输出格式。解法:

  • 训练数据里 format 要高度一致
  • instruction 里加上格式要求:"请按【风险等级】【分析】【建议】三段式输出"

法眼场景评估示例

构建 50 份合同审查测试集:

能力维度测试样本数通过标准
违约金识别15正确识别异常比例
免责条款分析10指出不公平条款
保密协议审查10识别范围过宽
格式规范性15输出含三段式结构

目标:通过率 85% 以上才算达标。


🎯 本章要点

  • 评估三件套:自动指标(BLEU/ROUGE)+ 人工评估 + 基准测试
  • 验证 loss 不反弹是最基本的过拟合检测
  • 灾难性遗忘解法:混 10% 通用数据、降学习率、减 epoch
  • 格式稳定靠统一训练数据格式 + instruction 里明确输出要求
加载练习题中...

有问题或补充?欢迎留言