Skip to content

模型评估

科学度量模型能力与训练效果

🎯 评估维度

评估目标

维度评估内容关键指标
语言能力理解、生成、推理Perplexity、BLEU
知识水平事实准确性基准测试得分
指令遵循按要求完成任务任务完成率
安全性有害内容、偏见安全评分
实用性人类满意度人工评估

📊 自动评估指标

语言质量

python
from evaluate import load

# 1. Perplexity - 困惑度
perplexity = load("perplexity")
results = perplexity.compute(
    predictions=["生成的文本"],
    model_id="gpt2"
)
print(f"Perplexity: {results['mean_perplexity']}")

# 2. BLEU - 机器翻译质量
bleu = load("bleu")
results = bleu.compute(
    predictions=["生成的翻译"],
    references=[["参考翻译1", "参考翻译2"]]
)
print(f"BLEU: {results['bleu']}")

# 3. ROUGE - 摘要质量
rouge = load("rouge")
results = rouge.compute(
    predictions=["生成的摘要"],
    references=["参考摘要"]
)
print(f"ROUGE-L: {results['rougeL']}")

生成质量

指标评估内容适用场景
Perplexity语言模型困惑度语言流畅性
BLEUn-gram精确匹配翻译、问答
ROUGE召回率导向摘要
BERTScore语义相似度通用文本生成
METEOR词干匹配+同义词翻译
python
# BERTScore - 语义相似度
from bert_score import score

P, R, F1 = score(
    cands=["生成的文本"],
    refs=["参考文本"],
    lang="zh"
)
print(f"BERTScore F1: {F1.mean()}")

🏆 基准测试

中文基准

基准评估内容说明
C-Eval中文综合能力52个学科,1.4万题
CMMLU中文多任务67个主题
GAOKAO高考题目真实考试场景

英文基准

基准评估内容说明
MMLU多任务理解57个学科
HellaSwag常识推理完成句子
ARC科学推理小学科学题
TruthfulQA真实性抗幻觉能力
GSM8K数学推理小学数学题

使用lm-evaluation-harness

bash
# 安装
pip install lm-eval

# 运行评估
lm_eval --model hf \
    --model_args pretrained=meta-llama/Llama-2-7b-hf \
    --tasks mmlu,hellaswag,arc_easy \
    --batch_size 8 \
    --output_path ./results
python
# Python API
from lm_eval import evaluator

results = evaluator.simple_evaluate(
    model="hf",
    model_args="pretrained=meta-llama/Llama-2-7b-hf",
    tasks=["mmlu", "hellaswag"],
    batch_size=8
)

print(results["results"])

👥 人工评估

评估维度

维度评分标准
相关性回答是否切题(1-5分)
准确性信息是否正确(1-5分)
流畅性表达是否自然(1-5分)
有帮助性是否解决问题(1-5分)
安全性是否存在有害内容(是/否)

对比评估(A/B Test)

python
def pairwise_comparison(response_a: str, response_b: str, prompt: str):
    """让评估者选择更好的回答"""
    evaluation_prompt = f"""
请比较以下两个回答,选择更好的一个:

问题:{prompt}

回答A:{response_a}

回答B:{response_b}

请输出 "A" 或 "B" 或 "平手",并说明理由。
"""
    return evaluation_prompt

使用LLM作为评估者

python
def llm_as_judge(response: str, reference: str, criteria: str):
    """使用LLM评估响应质量"""
    prompt = f"""请根据以下标准评估回答质量,给出1-10分:

评估标准:{criteria}

参考答案:{reference}

待评估回答:{response}

请输出:
分数:[1-10]
理由:[简要说明]
"""
    return llm.generate(prompt)

📈 训练监控指标

训练曲线

python
# 关键监控指标
training_metrics = {
    "train_loss": "训练损失,应持续下降",
    "eval_loss": "验证损失,关注是否过拟合",
    "learning_rate": "学习率变化",
    "grad_norm": "梯度范数,检测梯度爆炸",
}

# TensorBoard可视化
from torch.utils.tensorboard import SummaryWriter

writer = SummaryWriter("./logs")
writer.add_scalar("train/loss", loss, step)
writer.add_scalar("eval/loss", eval_loss, step)

过拟合检测

训练损失↓ + 验证损失↓ = 正常学习
训练损失↓ + 验证损失↑ = 过拟合!
训练损失→ + 验证损失→ = 学习停滞

🔄 评估流程

┌─────────────────────────────────────────────────────┐
│                  评估流程                            │
├─────────────────┬─────────────────┬─────────────────┤
│   自动评估       │   基准测试       │   人工评估       │
├─────────────────┼─────────────────┼─────────────────┤
│  BLEU/ROUGE     │  MMLU/C-Eval    │  A/B对比        │
│  BERTScore      │  GSM8K          │  多维度打分      │
│  Perplexity     │  HellaSwag      │  LLM-as-Judge   │
└─────────────────┴─────────────────┴─────────────────┘

🔗 相关阅读

外部资源

基于 VitePress 构建