第3章:模型评估体系 (Evaluation)#

本章定位:没有评估及格,模型绝不上线。本章将从传统的 BLEU 分数讲起,深入到 RAG 专属的 RAGAS 框架,并最终掌握目前业界最主流的 LLM-as-a-Judge 模式。


目录#


1. 为什么评估这么难?#

在判别式 AI 时代(如分类、推荐),评估很简单:PrecisionRecallF1,答案是确定的。

生成式 AI (GenAI) 时代,评估变成了玄学:

  1. 没有标准答案:对于“请写一首诗”这个指令,有一千种正确答案。
  2. 幻觉难以检测:模型可能一本正经地胡说八道,传统的文本匹配指标无法识别逻辑错误。
  3. 对齐困难:模型可能回答得非常准确(Factually Correct),但语气极其粗鲁(Alignment Failed)。

2. 评估维度的层级#

2.1 传统的 N-gram 指标 (BLEU/ROUGE)#

  • BLEU: 翻译任务常用。计算生成文本和参考文本的 N-gram 重叠率。
  • ROUGE: 摘要任务常用。关注召回率(Reference 中的词有多少被涵盖了)。

结论:在 LLM 时代,这俩指标基本已死。因为它们只看字面重叠,不懂语义。

2.2 任务型指标 (Acc/F1)#

对于选择题(如 GSM8K 数学题,MMLU 知识问答),我们可以强制模型输出选项(A/B/C/D),然后计算准确率(Accuracy)。这是目前刷榜的主要方式。

2.3 语义型指标 (BERTScore)#

利用 BERT 向量计算生成文本和参考文本的 Cosine 相似度。比 BLEU 强,但也仅限于句子级别的相似,懂不了复杂的逻辑。


3. RAG 专项评估:RAGAS 框架#

在企业级应用中,最常见的是 RAG 系统。我们只关心:检索准不准?回答对不对? RAGAS (Retrieval Augmented Generation Assessment) 是这方面的标准框架。

3.1 核心三元组:Query, Context, Answer#

RAGAS 需要三个输入:

  • Question: 用户的问题。
  • Context: 检索到的文档片段。
  • Answer: 模型生成的答案。
  • (Ground Truth 是可选的)

3.2 忠实度 (Faithfulness)#

定义:生成的 Answer 是否完全忠实于 Context?有没有凭空捏造(幻觉)? 计算逻辑

  1. 用 LLM 从 Answer 中拆解出多个 Claim(陈述原子)。
  2. 用 LLM 判断每个 Claim 能否从 Context 中推导出来。
  3. Faithfulness = 可推导的 Claims / 总 Claims。

3.3 答案相关性 (Answer Relevancy)#

定义:Answer 是否回答了 Question?(不关心对错,只关心是否答非所问)。 计算逻辑

  1. 用 LLM 根据生成的 Answer 反推 Question’。
  2. 计算原 Question 和 Question’ 的向量相似度。

3.4 实战代码:使用 RAGAS 评估本地 RAG 系统#

from ragas import evaluate
from ragas.metrics import faithfulness, answer_relevancy, context_precision
from datasets import Dataset
import os

# 配置 OpenAI Key (作为裁判)
os.environ["OPENAI_API_KEY"] = "sk-..."

# 1. 准备评估数据 (Dict 格式)
data = {
    'question': ['如何重置 Linux 密码?', 'Transformer 的作者是谁?'],
    'answer': ['使用 passwd 命令...', 'Vaswani 等人'],
    'contexts': [['passwd 命令用于修改用户密码...'], ['Attention is All You Need 论文作者...']],
    # 'ground_truth': Optional
}

dataset = Dataset.from_dict(data)

# 2. 运行评估
results = evaluate(
    dataset,
    metrics=[
        faithfulness,
        answer_relevancy,
        context_precision,
    ],
)

print(results)
# 输出: {'faithfulness': 0.95, 'answer_relevancy': 0.88, 'context_precision': 0.92}

4. 通用能力评估:OpenCompass 实战#

如果你微调了一个基座模型,想知道它的综合智商有没有下降(灾难性遗忘),需要跑一遍通用榜单。OpenCompass 是最方便的工具。

4.1 核心榜单解读 (C-Eval / CMMLU / MMLU)#

  • MMLU: 英文综合能力(STEM、人文、社科)。
  • C-Eval / CMMLU: 中文综合能力(高考题、公务员考试题)。
  • GSM8K: 小学数学应用题(考察推理能力)。
  • HumanEval: 代码生成能力。

4.2 一键跑分脚本#

# 1. 安装 OpenCompass
git clone https://github.com/open-compass/opencompass
cd opencompass
pip install -e .

# 2. 运行评测 (以 C-Eval 为例,评测 hf_model)
python run.py \
    --datasets ceval_gen \
    --hf-path /path/to/your/finetuned/model \
    --tokenizer-path /path/to/your/tokenizer \
    --max-seq-len 2048 \
    --debug

虽然跑分很爽,但切记:刷榜不代表业务能力强。业务能力必须靠业务测试集(Golden Set)来测。


5. 终极方案:LLM-as-a-Judge#

对于复杂的业务逻辑(如“这篇周报写得是否得体?”),没有任何数学公式能计算出来。 最有效的办法是:用更强的模型(GPT-4)去评价小模型(Llama-3-8B)的表现

5.1 原理:用魔法打败魔法#

构建一个 Judge Agent,给它极其详细的打分标准(Rubric),让它充当人类标注员。 研究表明,GPT-4 作为裁判的一致性已经超过了普通人类众包工。

5.2 编写 Judge Prompt#

一个好的裁判提示词必须包含:评价维度评分标准 (1-5分)Step-by-step 分析要求

JUDGE_PROMPT = """
你是一个公正的评判者。请根据以下维度对 AI 助手的回答进行打分(1-5分)。

### 评价维度
1. **有用性**:是否直接解决了用户问题?
2. **安全性**:是否包含有害信息?
3. **连贯性**:逻辑是否通顺?

### 评分标准
- 1分:完全错误或有害。
- 3分:回答了问题,但啰嗦或有小错误。
- 5分:完美,简洁,切中要害。

### 输入数据
[用户问题]: {question}
[AI 回答]: {answer}

### 你的输出
请先进行简短分析,然后给出 JSON 格式的分数:
{
    "analysis": "...",
    "score": 3
}
"""

5.3 实战:使用 Prometheus-Eval(开源裁判模型)#

如果你不想花钱用 GPT-4 做裁判,可以使用专门微调来做裁判的开源模型:Prometheus (基于 Llama-2/Mistral)

它在打分能力上逼近 GPT-4,但完全免费且可本地部署。

from transformers import AutoTokenizer, AutoModelForCausalLM

judge_model = "prometheus-eval/prometheus-7b-v2.0"
tokenizer = AutoTokenizer.from_pretrained(judge_model)
model = AutoModelForCausalLM.from_pretrained(judge_model, device_map="auto")

input_text = f"###Task Description: ... ###Response: ... ###Score:"
# ... (标准推理流程)

本章小结#

模型评估的不可能三角低成本自动化高准确

  1. 低成本 + 自动化 = N-gram / BERTScore (但准确度低,几乎不可用)。
  2. 高准确 + 自动化 = LLM-as-a-Judge (但成本高,需调用 GPT-4)。
  3. 高准确 + 低成本 = 人工评估 (无法自动化,速度慢)。

生产环境最佳实践

  • 日常 CI/CD 流水线:使用 RAGAS 监控 RAG 质量。
  • 模型迭代版本对比:使用 OpenCompass 跑几项核心榜单防退化。
  • 上线前验收:构建 Golden Set(金标准数据集),使用 LLM-as-a-Judge (GPT-4) 进行最终打分。
[统计组件仅在生产环境显示]