评估 — 靠数字判断,不靠体感
一句话总结
没有评估集,就无法判断 LLM 应用是否得到改进;幻觉不是可以彻底消除的缺陷,而是必须管理的风险。
为什么需要这些知识
修改提示词后,感觉效果变好了。真的如此吗?如果只运行十次就作出判断,那只是样本量为十的实验,也无法知道修改后的提示词是否破坏了其他类型的输入。
传统软件拥有测试。输入对应的预期输出是确定的,只需比较是否一致。LLM 每次的输出都会略有不同,“正确”的标准也不止一个,因此必须设计评估方法本身。
它是如何运作的
把评估分成三个层级,就容易理清。
第一层:能够确定性检查的事项。 输出是否为有效 JSON、是否包含必填字段、数字是否在规定范围内、是否出现禁用词。这类检查成本低且结果明确,应最先自动化。大量格式错误都能在这一层被发现。
第二层:存在标准答案的事项。 分类、提取等预期输出明确的任务,可以用准确率和 F1 衡量。RAG 的检索阶段也属于这一层。只要有标准文档列表,就能计算 Recall@K 和 MRR。这是成本最低、最容易找到改进空间的一层。
第三层:需要判断的事项。 回答是否忠实、是否有帮助、语气是否恰当。人工评估是基准,但成本高、速度慢,因此使用模型作为评判者的方法已被广泛采用。需要注意的是,模型评判存在偏爱较长回答的倾向,也有研究发现模型往往更宽容自己生成的答案。因此,至少要验证一次它与人工评估的相关性,并把评判标准拆成具体检查清单,这样会更稳定。
把幻觉分成两类后,应对方式也会不同。
- 外在幻觉——编造上下文中不存在的内容。可以通过忠实度检查发现,也可以要求标注依据句,或在置信度低于阈值时拒绝回答,以减少此类问题。
- 内在幻觉——错误概括或颠倒上下文中已有的内容。这一类更危险,因为附有出处,反而更容易获得信任。
在实际工作中会是什么样
评估集不必完美。哪怕只有 50 条,也远胜于完全没有。 可以从收集真实用户提问中失败的案例开始。每次发生事故,就把对应案例加入评估集;随着时间推移,它作为回归测试的价值会不断提高。
成本同样需要管理。如果每次提交都运行全部评估,费用会很高。可以始终运行低成本的第一层检查,而把昂贵的第三层评估只安排在部署之前。
最后还要谈到温度设置。评估时降低温度、减少波动,更有利于比较。但如果评估设置与生产设置不同,就必须考虑这种差异;若生产环境使用较高温度,则应多次运行,并同时观察结果的方差。
减少幻觉的顺序
“请消除幻觉”这一要求无法通过更换模型解决,而要通过结构降低风险。
1. 提供依据(RAG)。 不要只依赖模型已有的知识,应同时放入文档。仅此一项就能显著减少事实错误。但如果检索结果错误,就会变成有依据的谎言,因此检索质量直接决定回答质量。
2. 要求引用依据。 要求每句话标注来源片段编号,就能筛除没有引用的句子,也更便于人工验证。
{"answer": "환불은 7영업일 안에 가능합니다 [2].",
"citations": [{"id": 2, "quote": "환불 요청은 결제일로부터 7영업일…"}]}
3. 不知道时明确说不知道。 在系统提示词中明确规定:“如果提供的文档中没有答案,请回答‘无法从文档中确认’。”如果不加入这条要求,模型总会尝试编造某些内容。
4. 接入验证器。 用程序确认回答中的引用是否真实存在于文档。不存在的引用本身就是幻觉证据。
如何衡量幻觉
| 指标 | 衡量方法 | 自动化 |
|---|---|---|
| 引用准确度 | 引用的句子是否存在于原文 | 可通过字符串比对实现 |
| 依据忠实度 | 回答中的主张是否得到文档支持 | LLM 评判 |
| 拒答率 | 回答不知道的比例 | 自动 |
| 错误拒答 | 明明能够回答却说不知道的比例 | 评估集有标准答案,因此可自动计算 |
最后一行非常重要。如果过度强调回答不知道,模型连能够回答的问题也会回避。必须同时观察两个指标,才能取得平衡。
评估集中必须包含的内容
- 文档中存在答案的问题——能否准确回答。
- 文档中不存在答案的问题——会回答不知道,还是会编造。
- 前提错误的问题——例如“说说去年已经废除的那项政策”。模型是否会反问并纠正前提。
- 需要综合多份文档的问题——是否会只看一个片段就作答。
- 需要最新信息的问题——是否会依据旧文档自信作答。
第二类和第三类最能暴露幻觉。如果评估集只收集模型擅长的问题,分数会很高,实际系统却仍然不断编造内容。
在后续测验中要确认什么
你将确认自己能否判断哪些事项应在哪一层衡量,以及如何处理模型评判的偏差。