跳到主要内容

无需标注的评估:在拥有标准答案前衡量 LLM 质量

· 阅读需 13 分钟
Tian Pan
Software Engineer

大多数团队在发布 LLM 功能后,会花费数周时间争论该功能是否真的好用。由于构建标注数据集感觉像是一个独立的项目,评估问题往往被推迟。当你有了标准答案(ground truth)时,你也积累了两个月无法诊断的沉默回归。这本末倒置了。如果你知道该采用哪些技术以及每种技术的局限性,你可以在第一周——在完成任何标注之前——就获得有意义的质量信号。

这篇文章是无标注评估的实战指南:涵盖了有效的无引用方法、所需条件,以及如果不小心就会误导你的特定失败模式。

为什么“稍后评估”是一个 Bug,而不是一个计划

推迟评估的常规理由是:良好的评估需要标准答案,标准答案需要标注,而标注需要时间和预算。对于某些评估技术来说,这是事实。但并非对所有技术都如此。

推迟的真实代价是你会失去进行因果推论的能力。当你三个月后发现质量问题时,你不知道它是由最新的提示词(prompt)更改、模型 API 更新、用户查询分布的变化,还是预处理中的 Bug 引起的。如果没有尽早建立基准——即使是不完善的基准——你的回顾式调试就只能靠猜测。

无标注评估并不是标准答案的永久替代品。它是在你拥有标签之前建立信号的一种方式,这样当你确实获得标签时,你可以利用它们来进行校准和扩展,而不是从头开始构建一切。

自我一致性:来自你自备模型的免费信号

自我一致性(Self-consistency)是最容易实现的无标注技术。你不是针对一个查询生成一个响应,而是生成多个响应——通常使用温度采样(temperature sampling)——然后衡量它们的一致程度。

核心见解是:不确定性表现为方差。一个真正“知道”事实性问题答案的模型会在多次采样中重复产生相同的答案。一个在猜测的模型会产生一系列不同的答案。衡量这种分布可以让你在没有任何外部引用的情况下获得事实性的代理指标。

在实践中,你对输出进行哈希处理或归一化,并计算多数一致性(majority agreement)。如果你问一个模型一个事实性问题十次,它给出相同答案八次,这比它给出五个不同答案的信号更强。这项技术最初是为推理任务正式提出的——在数学基准测试中显示出 4–18% 的准确率提升——但其基本原理广泛适用于任何存在正确答案的任务。

局限性非常重要:

  • 一致的幻觉会使其失效。 如果模型一致地编造同一个虚假声明——“该条约签署于 1847 年”——高自我一致性会让你对错误答案产生高度信心。该方法假设错误是随机的;系统性错误是不可见的。
  • 开放式任务有许多正确答案。 对于创意写作、摘要或对话响应,样本之间的差异不是 Bug——它是预期的,甚至是理想的。在这些任务上衡量一致性会惩罚优秀的输出。
  • 成本随样本量增加。 每个查询生成十个响应是推理成本的十倍。对于高流量的生产环境,你需要有策略地进行采样,而不是评估所有内容。

对有确定答案的任务使用自我一致性:事实性问答、分类、结构化提取、算术。对于多样性更合适的生成式任务,请跳过它。

约束满足:无需标签的结构正确性

对于许多 LLM 使用场景,正确性包含一个结构化组件,可以在不参考“正确”答案的情况下进行检查。这就是约束满足(constraint satisfaction)评估,它通常是现有最高信号、最低成本的技术。

你可以通过编程方式验证的约束示例:

  • 格式约束: 输出是否为有效的 JSON?它是否符合所需的 Schema?它是否包含预期的字段?
  • 长度约束: 摘要是否在 150 字以内?生成的代码是否在预期范围内?
  • 引用完整性: 每一项声明是否都引用了存在的来源?所有 URL 是否都返回 200?
  • 特定领域的不变量: 生成的 SQL 是否可解析?代码是否可编译?正则表达式在测试用例上是否产生有效的输出?

这里的价值在于这些检查是二进制的、快速的,且完全确定。你不需要模型来评估它们。它们捕获了一类特定的、高影响的失败——模型产生的输出在形式上是损坏的——而没有任何标注负担。

局限性也同样清晰:约束满足无法告诉你语义质量。一个输出可以穿过所有结构检查,但仍然在事实性上是错误的、逻辑不连贯的,或者对用户的实际目标完全无用。约束满足是必要的,但不是充分的。将其视为你的第一道过滤器,而不是唯一的过滤器。

在实践中,正确的方法是枚举正确输出必须具备的每个结构属性,将这些属性编码为自动化检查,并在每个评估候选对象上运行它们。这只需要一个下午的时间来设置,并能立即为你提供底线信号。

行为不变性:测试那些不应改变的内容

行为不变性(Behavioral invariants)是一种更高级的技术,用于测试模型在输入转换下的内部一致性。其核心直觉是:如果你改变了输入中某些不应影响输出的部分,但输出却发生了剧烈变化,那么你就发现了一个脆弱点。

一些值得测试的不变性示例:

  • 语义改写不变性:“法国的首都是哪里?”和“你能告诉我哪座城市是法国的首都吗?”应该产生相同的答案。巨大的差异表明模型是在对表面形式而非语义做出反应。
  • 否定一致性:如果你分别询问“X 是正确的吗?”和“X 是错误的吗?”,模型的回答应该在逻辑上保持一致。许多模型在这方面都会失败。
  • 指令鲁棒性:在保持语义不变的情况下,更改系统提示词中的格式细节(换行符、大小写、标签措辞),对于事实性任务不应显著改变输出。
  • 适用场景下的顺序不变性:对于检索增强(RAG)任务,问题的答案不应因为支持性证据出现在长上下文的开头还是结尾而发生翻转。

行为不变性测试的目的与事实性检查不同。它衡量的是鲁棒性和可靠性,而非正确性。如果一个模型对语义相同的提问给出不同的回答,这不仅说明它不可靠,而且意味着随着用户查询表述的多样化,它在生产环境中的表现很可能会下降。

实际的限制在于你需要自己生成这些不变性测试对,而且哪些不变性对你的特定任务至关重要并不总是显而易见的。不变性测试也不会告诉你哪个答案是正确的,只能说明模型不一致。对于事实性任务,你需要额外的信号来区分“不一致且错误”与“不一致但偶尔正确”。

模型评分准则:无黄金标签的 LLM-as-Judge

最灵活的无标注技术是使用一个强大的 LLM 根据自定义准则来评估生产模型的输出。这通常被称为 “LLM-as-judge”,并已成为评估流水线中的标准组件。

G-Eval 框架提供了一个实用的模板:

  1. 编写一份评分准则,规定任务中高质量输出的标准(连贯性、与提供上下文的事实一致性、与查询的相关性、指令遵循情况)。
  2. 要求裁判 LLM 根据这些标准生成思维链(Chain-of-thought)评估。
  3. 按数字量表评分(通常为 1–5 分),使用 Token 概率加权进行连续评分,而非分类输出。

如果做得好,LLM 裁判在许多任务上与人类判断高度相关。它们在评估那些没有正式定义的特质时特别有用,例如回答是否乐于助人、摘要是否抓住了重点、语气是否得体。

然而,其失效模式非常严重,你不应盲目使用这种技术:

长度偏见普遍存在。 在大多数裁判模型中,较长的输出通常得分更高,即使长度并没有增加价值。一个长度增加一倍的输出,尽管语义等价甚至更糟,得分却可能高出 20–30%。务必在你的评分准则和提示词设计中控制长度因素。

位置偏见影响成对比较。 当要求裁判比较两个输出时,出现在第一个的输出获胜的概率往往高于随机概率。如果你在进行 A/B 比较,你需要随机化顺序,并对两种顺序的得分进行平均。

领域专业知识差距显著。 研究表明,在医学、法律和心理健康等专业领域,LLM 裁判与领域专家的达成一致的比例仅为 64–68%。对于通用任务,一致性会更高,但差距依然存在。在涉及高风险或专业领域的场景下,不要将 LLM 裁判作为唯一的评估信号。

没有参考资料就无法进行事实核查。 裁判模型无法可靠地区分一个自信的幻觉和一个正确的声明。表述流利、结构合理错误声明往往比表述生硬但正确的输出得分更高。LLM 裁判衡量表达质量比衡量事实准确性更可靠。

讨好偏见会导致评分虚高。 大多数裁判模型倾向于认可而非批评。随着时间的推移,评分会向上漂移,特别是当被评估的输出看起来与裁判模型的训练分布相似时。

为了在实践中减轻这些偏见:在准则中加入明确的语言来惩罚不必要的冗长;始终以两种顺序运行成对比较;在规模化应用之前,先针对一小组人工标注的示例对裁判模型进行校准;在涉及事实准确性的领域,切勿将其作为唯一的评估信号。

技术组合:第一周的评估技术栈

没有任何一种无标注技术是万能的。实际的方法是将它们分层组合,每一层捕捉不同类型的失败:

第 1 层 —— 确定性检查(约束满足): 对每个输出都运行。捕捉格式错误、Schema 违规和结构性错误。除了生产环境调用外,推理成本几乎为零。请首先建立这一层。

第 2 层 —— 一致性采样(自洽性): 对于事实性任务,针对 5–10% 的随机流量运行。生成三到五个额外的输出,并将高变异性的查询标记出来供人工审核。利用变异分布来追踪随时间推移的变化。

第 3 层 —— 行为回归测试(不变性): 一个包含 50–100 个不变性测试对的固定测试集,在每次模型或提示词变更部署前运行。这是你的变更检测层。

第 4 层 —— LLM 裁判评分(准则评估): 针对随机抽样的输出运行,或者在低流量场景下针对所有输出运行。使用带有校准准则的强力裁判模型。每周手动检查裁判的输出,直到你信任其校准结果。

这个技术栈为你提供了四个独立的失败探测器,每个探测器都有不同的敏感度和失效模式。当多个层都标记同一个输出时,对质量信号的信心会大幅增强。当各层出现分歧时,则是一个值得人工调查的信号。

当所有方法共同失效时

即使是组合后的技术栈也有一个值得明确指出的共同盲点:它无法检测出模型持续产生这种看起来高质量但实际上错误的答案的失败模式。

自洽性(Self-consistency)给了你很高的信心。约束满足(Constraint satisfaction)通过了。行为不变性(Behavioral invariants)没有显示出差异。LLM judge 给出了高分。然而,输出在事实层面仍然是错误的——而且是持续地、有说服力地、大规模地出错。

这种类型的失败——自信且持续的幻觉(hallucination)——最终只能依靠地面真值(ground truth)来捕捉。无标注评估方法可以告诉你什么时候某些内容不一致、结构损坏或根据某些正式标准明显错误。但它们无法告诉你模型何时学到了一个虚假信念,并以极高的自信表达出来。

这是无标注评估真实存在的上限:它衡量的是可靠性和形式上的正确性,而不是真理。对于真理至关重要的应用——医疗信息、法律文件、财务数据、科学主张——你最终将需要人类专家标注、外部知识库比对或基于执行的验证。无标注技术栈为你赢得了时间,并捕捉到了大部分问题。但它并不能消除对地面真值的需求。

在拥有完美基础设施之前就开始

在阅读有关评估框架的内容时,人们很容易产生一种诱惑,觉得必须先构建好一切才能开始学习。这是错误的。从一层开始。

选择与你的任务最相关的约束满足检查——输出是否按预期解析、是否包含所需字段、是否在预期的长度范围内——并从今天开始实施。跟踪通过率随时间的变化。那个单一的数字,即使不完美,也比零评估更有用,而这正是大多数团队在第一周时的状态。

随着规模的扩大,添加其他层。重要的是养成早期测量的习惯,此时你仍然有能力调查所发现的情况,并将其与你对质量的直觉联系起来。地面真值不会在第一天就出现。但你的直觉、你的任务规范以及你运行廉价自动化检查的能力会。

无标注评估不是评估作秀(evaluation theater)。它是一种诚实标记的初步近似,能够防止最糟糕的一种失败:在不知道质量是上升还是下降的情况下发布变更。


正在构建 LLM 评估流水线?另请参阅 AI 产品评估:为什么你的测试套件可能在对你撒谎评判模型独立性:避开评估盲点

References:Let's stay in touch and Follow me for more thoughts and updates