10. 微调效果应该怎么评估?

整理微调效果评估的任务指标、通用能力与人工评估方法。

简单回答

微调效果评估要分三个层面:任务维度看微调目标是否达成(如准确率、BLEU、Rouge 等),通用维度看模型原有能力是否保持(跑通用 benchmark),体验维度看真实场景下的输出质量(人工评估或 LLM-as-Judge)。只看某一个维度都是片面的。

详细解释

第一层:任务指标

这是最直接的评估维度——你微调的目标是什么,就看什么。如果是做分类任务,看 accuracy、F1;如果是做摘要,看 Rouge-L;如果是做翻译,看 BLEU。如果是做通用对话,任务指标本身就不太好定义,需要更多依赖后面两个维度。

需要注意的是,训练集上的 loss 下降不等于效果变好。一定要有独立的验证集和测试集。验证集用于调超参和决定 early stopping,测试集用于最终评估,不能混用。

第二层:通用 benchmark

前面灾难性遗忘那道题也提到了,微调后必须检查通用能力有没有退化。常用的 benchmark 包括:MMLU(综合知识)、HumanEval(代码)、GSM8K(数学推理)、C-Eval / CMMLU(中文能力)、TruthfulQA(真实性)等。

一个好的微调结果应该是:任务指标明显提升,通用 benchmark 基本持平或小幅下降(可接受范围内)。如果通用 benchmark 大幅下降,说明过拟合或遗忘严重,需要调整策略。

第三层:人工评估 / LLM-as-Judge

在对话、写作等开放式任务上,自动指标往往和人类感知相关性不强。这时候需要人工评估或用强模型(如 GPT-4)做 judge。

LLM-as-Judge 的具体做法是:给评估模型一个 prompt,让它比较两个模型的回答(A vs B),或者给单个回答在多个维度上打分(准确性、完整性、流畅度、有用性等)。MT-Bench 和 AlpacaEval 就是典型的 LLM-as-Judge benchmark。

LLM-as-Judge 的问题也要注意:存在位置偏差(倾向于选第一个回答)、长度偏差(倾向于选更长的回答)、自我偏好(GPT-4 可能偏好 GPT-4 风格的回答)。缓解方式包括交换 AB 顺序做两次、控制回答长度、用多个 judge 模型取平均等。

评估的实用建议

不要只依赖单一评估手段。一个比较完整的评估流程是:先跑自动指标看有没有明显的数值变化 → 跑通用 benchmark 检查遗忘 → 对核心场景做 case study(看 10~20 个典型 case 的输出质量) → 有条件的话做 LLM-as-Judge 或人工评测。case study 虽然不"科学",但在实际项目中非常有用——很多时候你看几个 case 就能发现模型的典型问题在哪。

还有一个容易被忽略的评估维度:模型拒绝能力。微调后模型应该仍然能拒绝不应该回答的问题(如有害请求),如果微调破坏了拒绝能力,上线是有安全风险的。

面试时可以这样答

微调效果评估我一般会从三个维度来看。第一是任务指标,你微调的目标是什么就看什么,分类看 F1,摘要看 Rouge,但注意一定要用独立测试集。第二是通用 benchmark,MMLU、HumanEval、GSM8K 这些,确认通用能力没有明显退化。第三是人工评估或 LLM-as-Judge,特别是对话类的开放式任务,自动指标和人类感知相关性不强,必须看实际输出。

实际操作中我还会加一步 case study——拿 10~20 个典型场景的 case 看模型输出,虽然不"科学",但效率很高,能快速发现问题。还有一个容易忽略的点是拒绝能力——微调后模型还能不能正确拒绝不该回答的问题,这关系到上线的安全性。

LLM-as-Judge 要注意它本身有偏差,比如位置偏差和长度偏差,需要做去偏处理。

常见追问

  1. LLM-as-Judge 的位置偏差和长度偏差怎么缓解?
  2. 如果自动指标提升了但人工感觉变差了,怎么分析原因?
  3. 微调过程中什么时候该 early stopping?只看 loss 够吗?