怎么评测你微调的模型到底有没有用
经验驱动。微调完如果只盯着 training loss 下降,很容易自我感动。本文用我本机真跑的一个评测脚本讲清楚:该看哪些指标、以及指标会怎么骗你。下方数字来自真实运行,含一个教科书级的”指标失真”案例。
评测前先想清楚:你的任务是什么
不同任务的”好”定义完全不一样,指标选错等于没评:
- 分类 / 抽取:accuracy、F1(macro / weighted)、实体级 P/R/F1(
seqeval)。 - 生成 / 摘要 / 翻译:BLEU、ROUGE(ROUGE-L 最常用)、BERTScore、人工评测。
- 对话 / 开放生成:自动指标相关性弱,必须上人工评测或 LLM-as-judge。
真跑一个评测脚本
我写了个最小可用的评测,对”微调后模型”在几个验证样本上的预测和人工标注对比,算 EM(完全匹配)、token-F1、ROUGE-L。本机真实输出:
1 | [样本1] 概括任务 |
真实教训:样本3 暴露了”指标失真”
样本3 里,预测和参考语义完全一致(马云是人、阿里巴巴是公司),只是标注口径不同(”人物/组织” vs “人名/公司”)。结果 EM=0(要求逐字一致),但 F1/ROUGE-L 还有 0.75。
这说明:
- EM 太严,对标注口径零容忍——一个同义别名就能把分打到 0,不适合开放抽取。
- F1/ROUGE-L 更宽容,能部分反映”对了但写得不一样”,但也会高估。
- 根本问题在标注规范不统一:评测之前,必须先和标注团队对齐”人名 vs 人物、公司 vs 组织”算不算对。规范不统一,指标再花哨也是失真。
样本4 同理:差一个 “really”,EM=0 但 ROUGE-L=0.88——翻译这种任务就不该用 EM,BLEU/ROUGE 才是合适口径。
评测体系的三个真实踩坑
- 别用训练集自欺。loss 在训练集上掉得漂亮没意义,必须在预留的验证/测试集上看;最好做 k 折或多次随机切分,避免单次切分的偶然性。
- 小样本指标波动大。上面只有 4 个样本,单个样本就能让均分跳 0.25。真实评测要足够样本量,或用 bootstrap 报告置信区间。
- 离线指标高 ≠ 线上好。ROUGE 高不代表用户满意、不代表没有幻觉或安全风险。生成类任务一定要补人工评测 / LLM-as-judge,抽样看相关性、事实性、安全性。
面试常考点
- 过拟合怎么判断:训练 loss 持续降、验证 loss 拐头升,就是过拟合信号;早停(early stopping)在验证指标开始变差时停。
- 评估指标怎么选:任务决定指标;抽取类用实体级 P/R/F1,生成类用 ROUGE/BLEU/BERTScore,开放类必须人工。
- 为什么实体级而不是 token 级:token 级会把”标错一个字但整体对”重罚,且看不出边界错;
seqeval要求类型和边界都对齐才算对,更接近真实抽取质量。 - human eval 为什么不可替代:自动指标和人工判断相关性有限,尤其涉及”有用、安全、不胡说”这些维度。
小结
评测微调效果,第一步是选对和你任务匹配的指标,第二步是统一标注规范——样本3 那个”语义对但 EM=0”的案例就是规范没对齐的典型。再小的评测集也要区分训练/验证,再高的离线分也要补人工抽检。loss 下降只是开始,指标不骗人(前提是规范先对齐)。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 河岳日星的博客!

