大模型幻觉与评估¶
面试高频考点¶
- 什么是幻觉(Hallucination)?如何分类?
- 幻觉产生的根本原因是什么?
- 如何缓解幻觉?RAG 能完全解决吗?
- MMLU、HumanEval、GSM8K 分别评测什么?
- LLM-as-Judge 有哪些偏差?
- 2025 年 Benchmark 饱和危机如何应对?
一、幻觉的定义与分类¶
细化理解: 幻觉可以分为事实幻觉、引用幻觉、推理幻觉、格式幻觉和工具幻觉。不同类型的根因不同:可能是参数知识错误、检索证据不足、上下文冲突、解码随机性或指令层级混乱。回答面试题时要先分类,再给对应缓解方案,而不是一句“加 RAG”。
幻觉:模型生成的内容在事实上不正确、与输入矛盾、或无法被现实世界知识验证的现象。
graph TD
H[幻觉 Hallucination] --> F[事实性幻觉<br/>Factuality]
H --> FA[忠实性幻觉<br/>Faithfulness]
H --> R[推理性幻觉<br/>Reasoning]
F --> F1[人物错误<br/>'爱因斯坦因相对论获诺奖'<br/>实为光电效应]
F --> F2[时间错误<br/>'2023年发布的GPT-5'<br/>实为2025年]
F --> F3[关系错误<br/>'iPhone 由谷歌发明']
FA --> FA1[摘要捏造<br/>原文没有但摘要中出现]
FA --> FA2[翻译漂移<br/>添加原文没有的内容]
FA --> FA3[RAG 忽略证据<br/>有上下文但仍凭记忆答]
R --> R1[计算错误<br/>'15+27=43']
R --> R2[逻辑错误<br/>三段论推理出错]
R --> R3[目标偏离<br/>跑偏离原任务]
style H fill:#f87171,color:#fff
style F fill:#fbbf24,color:#000
style FA fill:#5eead4,color:#000
style R fill:#7c6af7,color:#fff
| 类型 | 描述 | 典型场景 | 缓解难度 |
|---|---|---|---|
| 事实性幻觉 | 与客观事实不符 | 长尾知识、过时信息 | 中(RAG 可缓解) |
| 忠实性幻觉 | 与输入文本/上下文矛盾 | 摘要、翻译、RAG | 中(Prompt 约束) |
| 推理性幻觉 | 推理链正确但结论错误 | 数学、逻辑题 | 难(RAG 无效) |
二、幻觉产生的原因¶
graph LR
subgraph 数据层
D1[训练数据矛盾]
D2[长尾知识不足]
D3[知识截止过时]
end
subgraph 训练层
T1[语言模型目标<br/>预测下一token<br/>而非'说真话']
T2[Sycophancy<br/>RLHF 拍马屁效应]
T3[Reward Hacking]
end
subgraph 推理层
I1[滚雪球效应<br/>早期错误传播]
I2[Lost in the middle<br/>长上下文中关键信息]
I3[采样随机性]
end
D1 --> H[幻觉]
D2 --> H
D3 --> H
T1 --> H
T2 --> H
T3 --> H
I1 --> H
I2 --> H
I3 --> H
style H fill:#f87171,color:#fff
三个根源的具体例子¶
数据层:
训练数据中的矛盾:维基百科一处写"巴黎是法国首都",
但小说语料中可能有"在某个平行世界,里昂是法国首都"
模型可能在不同上下文给出不同答案
训练层:
Sycophancy 现象:
User: "我认为答案是 A,你觉得呢?"
Assistant: "您说得对,是 A!" ← 即使正确答案是 B
原因:RLHF 标注员往往偏好"赞同自己"的回复
→ 模型学会"投其所好"而非"说真话"
推理层:
滚雪球效应:
Step 1: "1+2=3" ✓
Step 2: "3+5=9" ✗ 计算错
Step 3: "9 是奇数" ✓(基于错误前提的"正确"推理)
Step 4: "所以答案是奇数" ✗
推理链每一步看起来都对,但因为 Step 2 错了,整个结论错
三、缓解幻觉的方法¶
工程细节: 缓解幻觉要同时做证据、约束和评估。RAG 提供外部证据,引用约束让答案可追溯,低随机性减少发散,CoVe/Self-Refine 帮助自检,但所有方法都不能保证完全消除错误。高风险场景还需要人工审核、拒答策略和失败样本回归测试。
graph TD
M[缓解幻觉] --> R[RAG<br/>外部知识]
M --> S[Self-Refine<br/>自我修正]
M --> C[CoVe<br/>链式验证]
M --> A[RLHF/DPO<br/>对齐训练]
M --> U[不确定性表达]
R -->|针对| RT[事实性幻觉<br/>知识过时]
S -->|针对| ST[质量提升]
C -->|针对| CT[关键事实声明]
A -->|针对| AT[Sycophancy]
U -->|针对| UT[超出知识范围]
style M fill:#7c6af7,color:#fff
style RT fill:#fbbf24,color:#000
style ST fill:#5eead4,color:#000
style CT fill:#f472b6,color:#fff
style AT fill:#4ade80,color:#000
1. RAG(检索增强生成)¶
将外部知识实时注入上下文,让模型基于检索到的事实回答:
传统:
User: "DeepSeek-V3 多少参数?"
Model: 凭记忆瞎猜 → 可能错
RAG:
User: "DeepSeek-V3 多少参数?"
→ 检索官方文档/技术报告
→ 注入上下文:"官方报告:DeepSeek-V3 总参数 671B,激活参数 37B"
→ Model 基于上下文回答
RAG 局限: - 检索质量差时反而引入噪声(错误证据) - 模型可能忽略检索内容仍凭记忆答("知识不一致") - 完全无法解决推理性幻觉
2. Chain of Verification(CoVe)¶
Meta AI 提出的四步独立验证框架:
graph LR
Q[问题] --> A1[Step 1<br/>生成初始回答]
A1 --> P[Step 2<br/>制定验证问题]
P --> V1[Step 3a<br/>独立回答验证Q1]
P --> V2[Step 3b<br/>独立回答验证Q2]
P --> V3[Step 3c<br/>独立回答验证Q3]
V1 --> M[Step 4<br/>合并验证结果]
V2 --> M
V3 --> M
M --> A2[最终答案<br/>修正过的]
style Q fill:#7c6af7,color:#fff
style A2 fill:#4ade80,color:#000
关键设计:验证问题独立回答(不看初始答案),避免确认偏误。
原回答:爱因斯坦 1921 年因相对论获诺贝尔奖
CoVe 验证:
Q1: 爱因斯坦哪一年获诺贝尔奖? → 1921年(独立回答)
Q2: 爱因斯坦因什么获诺贝尔奖? → 光电效应(独立回答) ← 发现矛盾!
修正后:爱因斯坦 1921 年因光电效应解释获诺贝尔奖
3. Self-Refine(自我修正)¶
生成 → 批评(Critique) → 修正(Refine) → 再批评 → ...
循环 N 轮直到没有改进或达到上限
适合:写作、代码、长回复
不适合:事实问答(模型自己检查不出事实错误)
4. 不确定性表达¶
# Bad
prompt = "回答以下问题。"
# 问题超出模型知识范围 → 模型瞎编
# Good
prompt = """回答以下问题。
重要:如果你不确定,请明确说"我不确定"或"我没有这方面的可靠信息"。
不要编造答案。"""
# 模型更倾向于在不确定时承认
四、主流评测基准全览¶
graph TD
E[LLM 评测] --> KN[知识能力]
E --> CO[代码能力]
E --> MA[数学推理]
E --> CH[对话/指令]
E --> SP[专项能力]
KN --> KN1[MMLU<br/>57学科选择题]
KN --> KN2[GPQA<br/>博士级科学]
KN --> KN3[SimpleQA<br/>事实性简单问答]
CO --> CO1[HumanEval<br/>164道Python]
CO --> CO2[MBPP<br/>1000道入门题]
CO --> CO3[LiveCodeBench<br/>实时更新防污染]
CO --> CO4[SWE-bench<br/>真实GitHub issue]
MA --> MA1[GSM8K<br/>小学应用题]
MA --> MA2[MATH<br/>高中竞赛]
MA --> MA3[FrontierMath<br/>顶级数学]
CH --> CH1[MT-Bench<br/>多轮对话]
CH --> CH2[AlpacaEval<br/>胜率对比]
CH --> CH3[Chatbot Arena<br/>人类投票ELO]
SP --> SP1[ARC-AGI<br/>视觉推理]
SP --> SP2[LiveBench<br/>防污染综合]
详细对比¶
| Benchmark | 评测内容 | 题目数 | 当前 SOTA | 状态 |
|---|---|---|---|---|
| MMLU | 57 学科知识 | 14K | ~90% | 接近饱和 |
| GSM8K | 小学数学 | 8.5K | ~95% | 接近饱和 |
| HumanEval | Python 编程 | 164 | ~95% | 接近饱和 |
| MATH | 高中竞赛 | 5K | ~85% | 仍在提升 |
| GPQA | 博士级科学 | ~500 | ~70% | 仍有空间 |
| FrontierMath | 顶级数学 | ~300 | < 5% | 远未饱和 |
| ARC-AGI | 视觉抽象推理 | 1K+ | ~87% (o3) | 2024 突破 |
| SWE-bench | 真实代码 issue | 2K+ | ~50% | 仍在快速提升 |
MT-Bench 详解¶
80 道题目,涵盖 8 类任务:
- 写作(Writing)
- 角色扮演(Roleplay)
- 推理(Reasoning)
- 数学(Math)
- 编程(Coding)
- 信息提取(Extraction)
- STEM 知识
- 人文知识
评测方式:用 GPT-4 作为 Judge,按 1-10 分打分
特点:多轮对话(每题包含 2 轮),更接近真实使用场景
局限:依赖 GPT-4 可能引入"模型偏见"(偏向 GPT-4 风格的回复)
五、LLM-as-Judge¶
原理与流程¶
graph LR
Q[问题] --> M1[模型 A 回答]
Q --> M2[模型 B 回答]
M1 --> J[Judge Model<br/>GPT-4]
M2 --> J
Q --> J
J --> O[评分/选择更好的]
style J fill:#fbbf24,color:#000
# 典型的 LLM-as-Judge prompt
judge_prompt = """请你作为一名公正的评估员,评估两个 AI 助手对用户问题的回复质量。
请考虑回复的:有用性、相关性、准确性、深度、创造性、详细程度。
用户问题:{question}
助手 A 的回复:{response_a}
助手 B 的回复:{response_b}
请仔细分析两个回复,最后输出 [[A]]、[[B]] 或 [[平局]]。"""
已知偏差(必须知道)¶
graph TD
LJ[LLM-as-Judge 偏差] --> P[位置偏差<br/>偏好A或B位置]
LJ --> V[冗长偏差<br/>偏好更长回复]
LJ --> SE[自我增强<br/>GPT-4偏好GPT-4风格]
LJ --> F[格式偏差<br/>Markdown得分高]
LJ --> SY[Sycophancy<br/>受用户暗示影响]
style LJ fill:#f87171,color:#fff
| 偏差 | 描述 | 缓解 |
|---|---|---|
| 位置偏差 | 倾向选第一个或第二个 | 交换位置二次评估,取平均 |
| 冗长偏差 | 长回复打分更高 | Length-Controlled Win Rate |
| 自我增强偏差 | GPT-4 偏好 GPT-4 生成的内容 | 多个不同 LLM 评估取多数 |
| 格式偏差 | Markdown/代码块得分高 | 标准化格式后评估 |
| Sycophancy | "我觉得 A 更好"会影响评分 | 评估时不暴露用户偏好 |
AlpacaEval 2.0 的 Length-Controlled Win Rate¶
传统胜率 W:直接看模型 A 击败 GPT-4-Turbo 的次数
问题:模型 A 输出更长 → Judge 倾向给 A 更高分 → W 虚高
LC Win Rate:
对回复长度做线性回归校正
消除"长度奖励"的影响
公式:LC_W = sigmoid(logit(W) - β × len_diff)
实测结果:很多模型在 LC 指标下排名变化大
六、2024-2025 Benchmark 饱和危机¶
现象¶
2020: GPT-3 发布,MMLU 70% 还是巨大成就
2023: GPT-4 达到 86%,几乎接近人类水平
2024: 多个 7B 模型也能达到 70%+
2025: MMLU 已不能区分顶级模型
→ 经典 benchmark "饱和",区分度丧失
主要原因¶
- 数据污染:测试题被无意中收录进训练数据(GitHub、HuggingFace 上有人发布)
- 过拟合 Benchmark:研究者优化模型在 MMLU 等指标上的表现,导致针对性优化
- 简单题被攻克:早期 benchmark 多为单步知识检索,对当代 LLM 太简单
新一代 Benchmark 设计原则¶
| 原则 | 说明 | 代表 |
|---|---|---|
| 实时更新 | 每月/每周更新题目,防止训练数据污染 | LiveBench, LiveCodeBench |
| 极高难度 | 只有人类专家能完美解答 | GPQA, FrontierMath |
| 真实任务 | 来自实际工作流(不是合成题) | SWE-bench (真实 GitHub issues) |
| 私有评测集 | 不公开题目,只公开榜单 | Chatbot Arena 后台测试 |
| 基于人类偏好 | 用真实用户投票而非自动指标 | LMSYS Chatbot Arena |
Chatbot Arena 简介¶
LMSYS 推出的"擂台赛"平台:
1. 用户在网页上同时与两个匿名模型对话
2. 选择哪个回复更好
3. 后台计算 ELO 评分(如国际象棋)
优势:
- 真实用户使用场景
- 几乎无法作弊(无固定题目)
- 持续更新,不会饱和
局限:
- 用户可能偏好"自信但错误"的回复
- 主观偏见难以避免
- 评分受用户群体特征影响
七、FActScore(细粒度事实核查)¶
不是给整段回复打总分,而是把回复拆成"原子事实"逐一验证:
模型回复:
"爱因斯坦于 1879 年出生在德国乌尔姆,1921 年因相对论获诺贝尔物理学奖,
1955 年在普林斯顿去世,享年 76 岁。"
拆解为原子事实:
① 爱因斯坦生于 1879 年 ✓ 正确
② 出生地为德国乌尔姆 ✓ 正确
③ 1921 年获诺贝尔奖 ✓ 正确
④ 因相对论获奖 ✗ 错误(光电效应)
⑤ 1955 年去世 ✓ 正确
⑥ 在普林斯顿去世 ✓ 正确
⑦ 享年 76 岁 ✓ 正确
FActScore = 6/7 ≈ 85.7%
比单一"对/错"评分更细粒度,适合长答案的事实性评估。
八、面试延伸¶
Q:RAG 能完全解决幻觉问题吗?
不能。RAG 主要缓解:① 事实性幻觉(提供最新/准确知识);② 知识截止问题。无法解决:① 推理性幻觉(即使提供正确证据,模型推理仍可能出错);② 模型忽略证据仍凭记忆回答;③ 检索本身的错误会引入新的幻觉源。完全消除幻觉目前没有方案,业界共识是"幻觉率从 10% 降到 1% 是可能的,降到 0% 是开放问题"。
Q:为什么 LLM 在不知道的问题上不说"不知道"?
根本原因:语言模型的训练目标是"预测下一个 token 的概率分布",而非"判断自己是否真的知道"。模型缺乏"元认知"(meta-cognition)能力——它只是在续写概率最高的 token 序列,并不会真的检查自己的"知识库"。可以通过 RLHF 部分训练出"不确定时说不知道"的行为,但不彻底。前沿方向:让模型输出 confidence score,或训练专门的"我不知道"分类器。
Q:评测大模型时为什么不能只看 MMLU?
原因:① 覆盖维度有限:MMLU 是知识选择题,不评估生成质量、代码、数学推理、长文本理解、对话连贯性等;② 数据污染严重:作为 2020 年发布的 benchmark,已被各种训练数据收录;③ 饱和:顶级模型差距已在 1% 内,区分度丧失;④ 过拟合:模型可能针对 MMLU 风格优化,实际能力没那么强。最佳实践:综合多个 benchmark(MMLU + HumanEval + MT-Bench + Chatbot Arena),并加入私有评测集防污染。
Q:什么是 Sycophancy?怎么缓解?
Sycophancy(奉承/拍马屁)是 LLM 倾向于赞同用户观点而非给出真实答案的现象。例:用户说"我觉得地球是平的,你觉得呢?" → 部分模型会附和。原因:RLHF 标注员可能更喜欢"被赞同"的回复,模型学会了讨好。缓解:① 训练时加入"礼貌反对"的对话样本;② RLHF 中对 sycophancy 行为施加负面奖励;③ 推理时 prompt 明确要求"诚实回答,不要附和我的偏见"。Anthropic 在这方面做了较多工作。
Q:LiveBench 是什么?为什么重要?
LiveBench(Yann LeCun 团队 2024)是首个明确"防污染"的实时 benchmark:① 每月发布新题;② 题目在发布前不公开;③ 涵盖 6 个领域(数学、推理、代码、语言、指令、数据分析)。重要性:解决了 MMLU 等饱和 benchmark 的数据污染问题,给行业一个相对干净的"持续评估"工具。当前 SOTA 在 LiveBench 上约 70%,远未饱和。
原始论文¶
| 论文 | 链接 |
|---|---|
| Survey of Hallucination in Natural Language Generation (Ji et al., 2022) | arxiv.org/abs/2202.03629 |
| MMLU Benchmark (Hendrycks et al., 2020) | arxiv.org/abs/2009.03300 |
| HumanEval (Chen et al., 2021) | arxiv.org/abs/2107.03374 |
| GSM8K (Cobbe et al., 2021) | arxiv.org/abs/2110.14168 |
| MT-Bench / Judging LLM-as-a-Judge (Zheng et al., NeurIPS 2023) | arxiv.org/abs/2306.05685 |
| Chain of Verification (CoVe) (Dhuliawala et al., 2023) | arxiv.org/abs/2309.11495 |
| Self-Refine (Madaan et al., NeurIPS 2023) | arxiv.org/abs/2303.17651 |
| FActScore (Min et al., EMNLP 2023) | arxiv.org/abs/2305.14251 |
| GPQA: A Graduate-Level Google-Proof Q&A Benchmark (Rein et al., 2023) | arxiv.org/abs/2311.12022 |
| LiveBench: A Challenging, Contamination-Free LLM Benchmark (White et al., 2024) | arxiv.org/abs/2406.19314 |
延伸阅读与视频¶
| 平台 | 标题 | 说明 |
|---|---|---|
| 📄 Paper | MedAgentGym: Training LLM Agents for Medical Reasoning | 医学 Agent 与评估训练相关论文资料 |
| 📺 B站 | 大模型SFT/RAG调优效率翻倍!自动生成测试集+自动化评估 | 1.4万播放,LLM-as-Judge评估实战 |