生成输出的质量,不是靠有人喜欢它来衡量;而是靠一套可以用相同问题、相同标准反复运行的评估集来衡量。在该领域,这门学科简称eval:把对系统所产出之物的信任,从主观印象中抽离出来,并绑定到一个可测数字上的实践。“看起来不错”是一种印象;“一百个样本中有九十三个通过”是一次测量。差别在于信任建立在何处。
- Eval 是以可重复方式衡量生成输出质量的评估学科。
- 主观印象随人和日子而变;测量用固定集合,每次都相同。
- 评估集是一项资产:刻意积累能代表期望行为的样本。
- 跟踪的不是单一数字,而是分布:重要的不是平均值,而是在哪里出错。
- 当一次改动拉低质量时,发现它的是回归测试,而不是用户。
- 可测的信任可以分享;直觉无法分享,只能试图传递。
Eval 是什么,解决什么问题
Eval 是对照预先定义的标准、以可重复方式检验生成式系统输出的评估学科。名称来自英文evaluation,并在领域中以这一缩写固定下来。它解决的问题简单却深刻:当输出质量是主观的时,谁也无法有把握地说质量是否真的变好了。
在传统软件里,正确答案大多唯一。两个数相加,结果要么对要么不对。生成输出则有多种可接受答案,糟糕的答案也可能看起来合理,同一输入在不同时间可能给出不同结果。在这种地基上,“能不能用”不够;它让位于“有多频繁、有多好”。
Eval 所做的,是把这个柔软的问题变成可计数的形式。收集代表期望行为的样本,为每个样本定义何为成功,在整个集合上运行系统,结果收敛为一个比率。单次出色的试验是轶事。数百样本上一致的比率是证据。整门学科,就是把轶事变成证据的努力。
这里有一个容易被忽略的区分。Eval 的存在不是为了打分,而是为了跟踪变化。单次运行的绝对值往往说明不了多少;真正的信息在两次运行之间的差异里。做了改动后,比率是降了、升了,还是不变——决策建立在这三种可能上。因此 eval 不是一次性考试,而是持续维护的观察工具。
从“看起来不错”到可测信任
直觉式评估,是一个人看几个输出并形成总体印象。它快、便宜,第一天有用。问题是它无法扩展。审阅人变了,标准就变;疲惫时与清醒时决策不同;也没人能声称昨天被喜欢的输出今天仍是同样质量。
可测信任与此相反。同一集合、同一标准、人人可见的结果。它不依赖某个人的心情,而依赖共享的定义。团队中每个人看着同一个数字,理解同一件事。可测信任,是关于输出质量的、建立在可重复测量之上、且可独立于个人加以验证的信念。
这一转变通常发生在危机时刻。做了改动,有些东西悄悄变差,几天后才因外部告警被发现。那一刻,“看起来不错”的代价变得可见。在直觉单独不够用的点之后,测量不是奢侈;而是必需。完成这一转变的团队,往往曾为此付出昂贵的一次学费。
完全抛弃直觉也不对。有经验的眼睛,常常最先发现集合抓不住的怪异之处。正确关系不是把直觉与测量对立,而是把直觉发现的东西变成测量。有人觉得某个输出不好,那种感觉变成一个样本,样本进入集合,便不再悄悄溜走。于是主观印象变成持久、可分享的测量。直觉发现;测量固化。
为什么评估集必须当作资产对待
评估集是一份汇编:刻意选出的、代表系统期望行为的样本,与每个样本的成功标准一起保存。好的集合不是随机凑的。它均衡包含简单情况、边界情况、过去曾坏过的情况,以及故意很难的情况。
这个集合是与代码本身同等宝贵的资产,也必须如此保护。它随时间增长:每一个新失败都成为加入集合的新样本。于是同一错误更难第二次漏过。把集合弃置会慢慢贬值;因为世界在变而集合固定时,它所测的就不再对应现实。
集合的构成决定测量的诚实度。只有简单样本的集合会产生偏高却误导的比率。不代表真实使用的集合,会掩盖真实使用中的失败。一种取舍常会浮现:集合越大信号越强,但每次运行成本也上升。因此集合通常分层;小而快的核心经常跑,大而慢的全集很少跑。
另一种危险更隐蔽。集合可能过于贴近构建它的团队的看法。那时测量测的不是系统在真实世界有多好,而是团队以为什么是好。因此好的集合由真实使用喂养:发生过的失败、意外输入和边缘情况被定期纳入。集合不是照片,而是活的记录。保持更新,是让测量贴近现实的唯一方式;因为世界继续变化,集合只在被照料的程度上变化。
没有唯一正确答案的输出如何打分
生成输出最难的一面,是正确答案往往不唯一。一段文字可以用三种不同方式写得都很好。这时打分不再是简单的相等检查,而分成几种不同方法。每种方法都有强弱。
| 打分方法 | 优势 | 弱点 |
|---|---|---|
| 精确匹配 | 无歧义,结果可重复 | 只适用于唯一正确答案的任务 |
| 基于规则的检查 | 快、可解释、便宜 | 抓不住灵活语言与意图 |
| 参考对照 | 衡量相似度,能看到部分成功 | 阈值选择是主观的 |
| 人工评估 | 把握细微差别与语境 | 慢、贵、因人而异 |
实践中单一方法不够。适合精确匹配处就用它;其余地方结合规则检查与参考对照;在最模糊的情况下用小规模人工样本验证测量。重要的是知道哪种方法适合哪个问题。为错误任务选的打分器,会报告并不存在的信心。
常被忘记的是,自动打分器本身也会错。用另一个系统评估输出很快,但那个评估者也出错;有时给糟糕答案打高分。因此成熟做法会偶尔把打分器的决定与人工判断对照。目的是衡量自动分数与人工分数重叠多少。重叠弱时,我们测的不是质量;只是另一个系统的任性。信任打分器之前,先要评估打分器本身。
让评估可重复、成体系的步骤
可重复性不是偶然;是秩序的结果。要让评估每次测同一件事,必须保持一定的操作顺序。下面的顺序在原则层面描述这种秩序。
- 先以书面、独立于个人的方式定义何为成功、何为失败。
- 收集代表期望行为的样本,并为每一个附上明确标准。
- 运行集合,把结果记为分布,而不只是单一比率。
- 与上次运行比较;下降标为回归,上升标为改进。
- 把每一个新失败作为新样本加入集合,使其不再悄悄溜走。
- 让这个循环成为每次有意义改动的一部分;不是单独仪式,而是例行步骤。
这些步骤的核心有几个概念。把它们分开,讨论会更清晰。
- 回归测试
- 对照固定集合运行的评估,衡量先前可用的行为在改动后是否被破坏。
- 基线
- 后续测量与之对照的、已被接受的先前结果;改进与回归据以衡量的零点。
- 盲点
- 集合未代表、因而未测量、只在真实使用中出现的失败类型。
这一顺序的力量在于简单与不变。步骤每次以相同秩序进行;这样两次运行才真正可比较。顺序一乱,测量便悄悄失去意义:用不同标准、不同样本得到的两个结果无法互相对照。可重复性的真正代价是纪律;每次改动都执行相同步骤,即便无聊也不跳过。那种无聊不是缺陷,而是保障。规律且不变的测量,正因为可预期才可靠。
当测量变成文化时,什么会变难
建一个评估工具容易;把评估变成文化很难。工具是以一次运行为终点的事件。文化是任何有意义的改动都不会未经测量就通过的习惯。后者比前者要求多得多:共享的质量定义、对集合负责的所有权,以及拒绝忽视低数字的纪律。
随着领域成熟,测量的重心在转移。起初问题是“系统能不能用”。现在越来越是“从哪里知道它有多好”。这是更深、也更令人不适的问题,因为答案不能靠直觉给出。变难的是把质量定义本身写清楚;因为多数团队感觉到什么是好,却描述不出来。
这种必须描述的义务带来意外副作用。要建集合就必须写下何为好;写下这一点往往第一次迫使团队就共同的质量定义达成一致。测量的真正价值有时不在数字本身,而在为到达那个数字必须进行的对话。建立评估会把沉默的假设暴露出来。
第二个难点关乎测量范围。集合只测想过的情况;测不了没想过的。因此一种隐蔽危险是:信任测得的高数字,却忘记盲点的存在。成熟的评估文化在信任数字的同时,也持续追问数字未覆盖什么。方向明确:信任不再是印象,而正在变成需要维护的资产。建造它是一次;维持它是每天的工作。
F.A.Q.
