• 欢迎关注我的微信公众号“ Falost ” 右边扫描关注 --->>

模型评测工具箱:微调后怎么知道模型变好了还是变差了

AI / 大模型 神棍 147℃ 0评论

开篇:微调一时爽,评测火葬场

前两篇文章我们学会了 LoRA 和 QLoRA 微调,把通用大模型变成了”专属小助手”。但有一个灵魂拷问始终绕不过去——微调完之后,怎么知道它真的变好了?

只看 Loss 曲线下降就高兴得太早了。我见过很多人微调后模型反而变笨了——原来会的问题不会了,原来能写的代码写不出来了。这种现象叫灾难性遗忘(Catastrophic Forgetting)

所以,评估不是微调的锦上添花,而是验收标准。这篇给你一套完整的评估工具箱,从自动指标到人工评测,每一步都能落地。


1. 第一道防线:Loss 和 Perplexity

最基础的评估看两个数字:

  • Loss(损失值)——训练过程中持续下降就说明模型在学习。但 Loss 低≠效果好,因为模型可能只是死记硬背了训练数据。
  • Perplexity(困惑度,PPL)——模型对文本的”困惑程度”,越低越好。公式是 exp(Loss),直观理解:PPL=10 意味着模型平均每次预测在 10 个词里猜。

这两个指标只在同一个模型的同一份测试集上做对比才有意义。不同模型的 PPL 不能直接比。

from transformers import AutoModelForCausalLM, AutoTokenizer
import torch

model_name = "Qwen/Qwen2.5-7B-Instruct"
model = AutoModelForCausalLM.from_pretrained(model_name)
tokenizer = AutoTokenizer.from_pretrained(model_name)

test_text = "今天天气真不错,我们去公园"
inputs = tokenizer(test_text, return_tensors="pt")

with torch.no_grad():
    outputs = model(**inputs, labels=inputs["input_ids"])
    loss = outputs.loss
    ppl = torch.exp(loss)

print(f"Loss: {loss.item():.4f}")
print(f"Perplexity: {ppl.item():.2f}")

2. 基准评测:用标准化考试打分

更可靠的方式是用公开基准(Benchmark)——就像给模型做标准化考试。

主流 Benchmarks

Benchmark 测什么 题型 适用场景
MMLU 57 个学科的知识广度 四选一 通用知识评测
C-Eval 中文综合知识 选择题 中文模型必测
GSM8K 小学数学推理 问答题 推理能力评测
HumanEval Python 代码生成 编程题 代码能力评测
CMMLU 中文多领域知识 选择题 中文模型必测

用 lm-eval-harness 一键评测

EleutherAI 开发的 lm-eval-harness 是目前最主流的评测框架,一条命令跑完:

# 安装
pip install lm-eval

# 评测 HuggingFace 模型
lm_eval --model hf \
    --model_args pretrained=Qwen/Qwen2.5-7B-Instruct \
    --tasks mmlu,ceval-valid \
    --device cuda:0 \
    --batch_size auto \
    --output_path ./eval_results

还可以评测微调后的 adapter:

lm_eval --model hf \
    --model_args pretrained=Qwen/Qwen2.5-7B-Instruct,peft=./qwen-lora-adapter \
    --tasks mmlu \
    --device cuda:0 \
    --batch_size auto

跑完后会自动生成 JSON 报告,对比微调前后的分数变化,一目了然。


3. 业务评估:针对你的真实场景

公开 Benchmarks 测的是”通识能力”,但你的业务场景可能需要定制化评估

3.1 对比评测(A/B Test)

准备 50-100 条你真实业务场景的问题,让微调前和微调后的模型分别回答:

# 对比评测模板
test_cases = [
    {"question": "我们的退货政策是多久?", "expected_keywords": ["30天", "无条件"]},
    {"question": "如何重置密码?", "expected_keywords": ["邮箱", "验证码", "链接"]},
]

def evaluate(model, tokenizer, test_cases):
    total, passed = 0, 0
    for case in test_cases:
        inputs = tokenizer(case["question"], return_tensors="pt")
        outputs = model.generate(**inputs, max_new_tokens=128)
        answer = tokenizer.decode(outputs[0], skip_special_tokens=True)
        # 检查关键词
        if all(kw in answer for kw in case["expected_keywords"]):
            passed += 1
        total += 1
    return passed / total

3.2 多维度评分卡

单一指标不够用。建议至少从以下维度打分(每项 1-5 分):

维度 说明 评分方法
准确性 回答是否事实正确 人工核对(或让强模型做裁判)
相关性 回答是否切题 检查与问题的语义匹配度
完整性 是否遗漏关键信息 检查预设信息点的覆盖度
安全性 是否输出有害内容 用安全分类器筛查
风格匹配 语气是否符合预期 人工判断(主观但重要)

4. 进阶:用 LLM 做裁判(LLM-as-a-Judge)

人工评分太慢,纯规则太死板。一个流行的折中方案是用 GPT-4 或 DeepSeek 等高阶模型做打分裁判

import openai

def judge(response, expected, criteria):
    prompt = f"""
你是一个公正的 AI 评分员。请根据以下标准对模型回答评分(1-5分)。

标准:{criteria}

预期回答:{expected}
模型回答:{response}

请只输出分数,不要解释。
"""
    client = openai.OpenAI()
    result = client.chat.completions.create(
        model="deepseek-v4-flash",
        messages=[{"role": "user", "content": prompt}]
    )
    return int(result.choices[0].message.content.strip())

这种方法的好处是可批量、可复现,200 条测试用例 5 分钟跑完。开源的裁判 LLM 方案包括 Prometheus(来自韩国科学技术院 KAIST)和 JudgeLM(来自清华大学),它们本身就是为打分任务训练的小模型。


5. 评估流程全景图

把上面的方法串成一个流程:

  1. 微调前:在公开 Benchmark(MMLU、C-Eval)上记录 baseline 分数
  2. 微调中:监控验证集 Loss 和 Perplexity,避免过拟合
  3. 微调后第一步:跑同样的 Benchmark,对比 baseline → 确认通识能力没下降
  4. 微调后第二步:跑业务场景 A/B 测试 → 确认专业能力有提升
  5. 最终决断:人工抽样 20-50 条做多维度评分卡

如果 Benchmark 分数下降但业务测试分数提升——说明模型更专精了,这是正常的。但如果 Benchmark 和业务测试都下降了,说明微调出了问题(数据质量、学习率、过拟合)。


结尾

评估是对微调最后的尊重。没有评估的微调就像闭着眼睛开车——你以为在前进,其实可能已经偏到沟里了。

这五步流程用起来:基准测试保底 → 业务测试看效果 → 自动化评分提效率 → 人工抽查保质量。不需要每次都跑全流程——常规迭代跑 Benchmarks + 业务测试就够了,只有关键节点才加人工评测。

下期预告:多轮对话与 Chat Template — 我们系列里所有微调样例都是单轮问答。但现实中的对话是多轮、有上下文的。下一篇教你如何构建多轮对话数据集,以及 HuggingFace Chat Template 的正确用法,让你的模型真正学会”聊天”。


参考资料

  1. EleutherAI lm-evaluation-harness:https://github.com/EleutherAI/lm-evaluation-harness
  2. MMLU 论文:Measuring Massive Multitask Language Understanding — Hendrycks et al., 2020
  3. C-Eval 中文评测:https://cevalbenchmark.com/
  4. CMMLU 中文多领域评测:https://github.com/haonan-li/CMMLU
  5. GSM8K:Training Verifiers to Solve Math Word Problems — Cobbe et al., 2021
  6. Prometheus 裁判 LLM:https://github.com/kaistAI/prometheus
  7. JudgeLM:https://github.com/THUDM/JudgeLM
  8. Qwen2.5 官方评测说明:https://huggingface.co/Qwen/Qwen2.5-7B-Instruct

转载请注明:Falost的小窝 » 模型评测工具箱:微调后怎么知道模型变好了还是变差了

如果你觉得这篇文章不错或者对你有帮助,想请我喝一杯咖啡,可以打赏
喜欢 (0)
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址