用稀疏标注构建 LLM 评估体系:你不需要一万个样本
构建 LLM 应用的团队总会犯同一个错误:他们等待积累足够的标注数据之后,才肯投入评估基础设施建设。他们告诉自己需要 5000 个样本,或者 10000 个。评估系统始终停留在待办事项清单上,而"感觉不错"的主观判断代替了真正的指标度量。ZenML 对 1200 个生产部署的分析发现,即便是成熟的部署,非正式的直觉判断依然普遍存在——许多团队从未真正建立起系统性的评估机制。
数据量直觉是从经典机器学习时代借来的——在那个时代,更多的标注样本确实能稳定提升模型性能。但对于 LLM 评估,这个直觉基本上是错的。对稀疏基准测试的研究表明,20–40 个精心挑选的样本就能可靠地估算完整基准的排名,而 100 个样本产生的平均绝对误差低于 1%,与使用数千个样本相比相差无几。问题不在于数据量,而在于大多数团队跳过了使小规模评估集值得信赖的结构化流程。
本文介绍这个流程的实际操作方式:如何通过主动学习选取合适的样本,如何用弱监督大规模生成噪声标签,如何借助 LLM 评判者进行冷启动,以及如何判断你的小型评估集何时可以正式使用。
为什么团队总是等待(以及为什么不该等)
延误并非出于懒惰,而是一个结构性陷阱。评估需要知道"失败长什么样",但失败模式只有在你开始标注之后才会变得清晰。团队陷入等待,等待那些在实证之前永远不会出现的稳定标准。
还有一个鸡生蛋蛋生鸡的时序问题。数据只有在系统上线后才会有意义地积累。在真实流量出现之前,评估系统显得过于超前。于是团队在没有评估的情况下上线,从用户投诉中发现质量问题,然后试图在未记录的失败模式之上构建事后的评估基础设施。
解决办法是比感觉合理的时间点更早开始——哪怕只有 30 个样本也要开始——并把评估集当作一个持续演进的产物,而不是使用前必须完成的前置条件。
Hamel Husain 和 Shreya Shankar 的研究指出了一种他们称为"标准漂移"的现象:标注标准并不稳定。随着标注者审查更多样本,他们对"好"的定义会不断细化,导致早期标签与后期标签不一致。这不是在标注之前需要解决的问题,它本身就是标注过程的一部分。由此推论:通过主动错误分析迭代构建的小型评估集,其一致性反而高于通过一次性批量标注构建的大型评估集。
主动学习:挑选能教会你东西的样本
构建评估集的传统方式是随机采样:从生产日志中抽取 500 个样本,交给标注者处理。只有当生产流量均匀地包含有价值的信息时,这种方法才是高效的——而实际上几乎从不如此。大多数应用中的绝大多数查询都是常规成功案例,对于系统在哪里失效没有任何信息量。
主动学习反转了这一逻辑。与其随机采样,不如选择模型(或评估者)最不确定、最不一致或最新颖的样本。
以下是按实用性排序的三种核心策略,用于构建 LLM 评估集:
不确定性采样:针对 LLM 评判者无法自信分类的输出。高不确定性——通过从评判者处多次采样并观察分歧来衡量——表明这是一个真正需要人工标注的案例。这些样本将对你的评分标准产生压力测试。
多样性采样:确保对输入空间的覆盖。单纯的不确定性采样往往会聚集在一小片边缘案例上,导致评估集过度代表某一类失败模式。将不确定性和多样性结合起来(选取既不确定、又在语义上与已选样本相距较远的样本),能更快地建立全面的覆盖。
委员会查询:运行多个评判者——来自不同模型家族,或使用不同提示——并找出它们产生分歧的样本。评判者之间的分歧是发现了难以处理的案例的强烈信号,值得人工标注。
实际操作看起来是这样的:从生产查询中抽取一个样本,通过系统运行,在多次 LLM 评判者运行中计算分歧,按不确定性排名,手动标注排名前 30–50 的样本。这个种子集的信息量将远超随机抽样的结果。一项关于低资源标注的主动学习研究发现,在主动学习循环中使用 前沿模型作为标注者,仅用 20% 的真值标注数据就达到了基线性能——比穷举人工标注便宜 42 到 53 倍。
弱监督:不靠人工标注也能生成标签
一旦你有了 30–50 个人工标注的种子集,就可以通过弱监督来扩展覆盖范围——使用多个噪声标注函数对未标注样本进行标注,然后将噪声标签聚合成更干净的信号。
标注函数是任何能生成标签的启发式方法。它可以是正则表达式(响应中包含"我无法"→ 可能是拒绝),可以是关键词检查(响应在不应包含数字时包含了数字→ 可能是幻觉),也可以是一个 LLM 提示(这个响应回答了问题吗?是/否)。单个标注函数不可靠。但一个生成式标签模型——基于各函数与其他函数的一致性和分歧模式来为每个函数加权——能产生比任何单个函数都准确得多的标签。
关键的实证发现:现成的 LLM 作为评判者的方法,与领域专家的一致性仅为 70–75%。而使用程序化标注构建的自定义评估器——将多个提示作为标注函数,在小型专家标注的种子集上聚合和校准——在同样的企业数据集上达到了 88–90% 的准确率。专家标签的种子集正是用于校准标签模型的关键,这也是为什么主动学习(构建最有信息量的种子集)和弱监督(低成本扩展覆盖范围)是互补而非替代的策略。
一个重要约束:弱监督仍然需要一个从不用于优化的真值测试集。标签模型通过观察标注函数的一致性模式来学习哪些函数可靠,而非直接拟合 标注样本。但你仍然需要人工标签来验证最终评估器确实在衡量你认为它在衡量的东西。
LLM 自动标注:LLM 评判者能做什么、不能做什么
LLM 作为评判者已经成为无需人工标注即可扩展评估的默认方式。GPT-4 在成对比较中与人类专家的一致性达到 85%——略高于两位人类专家在同一任务上 81% 的一致性。对于许多应用场景来说,这已经足够产生有用的信号。
失败模式已有充分记录,需要明确加以控制:
位置偏见:模型系统性地偏好排在第一位的响应。GPT-3.5 大约有一半情况如此;Claude 表现出高达 70% 的首位偏好。解决方法是将每次成对比较运行两次(调换顺序),只在两种顺序结果一致时才计入结果。
冗长偏见:无论质量如何,Claude 和 GPT-3.5 在 90% 以上的情况下都偏好更长的响应。缓解措施:使用基于参考答案的评估而非成对比较,或明确指示评判者评估内容而非长度。
自我强化偏见:GPT-4 对自己输出的评分约高出 10%;Claude 对自己输出的评分约高出 25%。不要使用同一模型家族既做生成又做评估。
评分量表效应:使用 0–5 量表产生的人机一致性(ICC=0.853)显著高于 0–10 量表(ICC=0.805)。二元通过/失败分类产生的标注者分歧更少,检测差异所需的样本量也更小。对于大多数实际评估集,二元分类是正确的选择。
实用架构:为每个你关心的 维度单独编写一个评估提示,而不是用一个"万能评估器"试图同时衡量所有事情。多维度的单一提示校准效果差,也难以调试。如果你需要评估事实准确性、有用性和格式合规性,就编写三个独立的评估提示。
对于合成样本生成,LLM 可以通过生成变体、边缘案例和对抗性样本来扩展种子集。风险在于合成样本往往比真实生产输入更整洁、格式更规范。合成缺陷通常超出分布范围——来自真实生产流量的真实失败案例更能代表你需要捕获的问题。用合成样本来增加你已识别的重要场景的覆盖范围,而非用它替代真实数据收集。
统计可信度:何时评估集可以正式使用
关于小型评估集最常见的问题是:它们是否有足够的统计功效来检测真实差异。答案取决于你试图检测的差异大小。
基本关系:检测一半大小的性能差距需要四倍的样本数量(标准误差随 1/√n 下降)。对于二元评估(通过/失败):
- 200 个样本,3% 缺陷率:95% 置信区间为 ±2.4%
- 400 个样本:±1.7%
- 你关心的效应大小决定了你需要的样本量
低于 100 个样本时,基于中心极限定理的置信区间变得不可靠,应使用贝叶斯替代方法。超过 100 个样本时,基于中心极限定理的区间有效。
更实际地说:一个有 200 个样本的评估集几乎总是足以检测会影响用户体验的退化。一个有 50 个样本的评估集可以检测大型退化,但无法检测细微 退化。一个有 30 个样本的评估集足以进行错误分析——了解存在哪些类别的失败——但不足以在提示版本之间做出严格的 A/B 决策。
配对比较显著提高了统计效率。如果你在同一组输入上评估两个系统版本,可以分析每个样本的差异而非整体比率。由于模型性能在不同提示上具有相关性(困难输入对两个版本都难),配对比较利用这种相关性将有效方差降低 3–5 倍。同样的 100 个样本提供了 300–500 个非配对样本的统计功效。
三个告诉你评估集已可使用的校准检查:
理论饱和度:当你审查新样本时,不再发现新的失败模式。如果每个新样本都能归入你已见过的类别,说明你已经采样了足够多以代表失败空间。
留出集一致性:将标注样本分为 75% 开发集和 25% 留出集。在开发集上校准 LLM 评判者,然后在留出集上运行。如果准确率大幅下降,说明评估器过拟合了开发集标签。留出集永远不应用于调整评判者提示。
假阴性率检查:100% 通过率是警告信号,而非成功标志。如果每个样本都通过,说明评估集的挑战性不足以检测未来的退化。目标通过率应在 70–85% 范围内,才能成为有意义的回归测试。
构建流程,而非数据集
从零开始的团队实际操作顺序:
-
对 30 个样本进行开放式错误分析:在没有评分标准的情况下审查 30 个生产输出。记录所有你看到的失败。将笔记分组为类别。这就是你的失败分类体系。不要跳过这一步 ——没有它构建的评估器衡量的是不重要的事情。
-
任命一个真值仲裁者:对于小团队,一位领域专家担任标签争议的"仁慈独裁者"。这消除了困扰大规模标注工作的标注分歧问题。如果你需要多位标注者,在继续之前运行 Cohen's Kappa 评分者间一致性检查;0.6 是值得继续构建的最低阈值。
-
主动选取 50–100 个难样本:使用不确定性采样和多样性采样,从生产日志中选取最有信息量的 50–100 个样本。手动标注它们。
-
用弱监督扩展:编写 3–5 个标注函数(LLM 提示、启发式规则或两者结合),针对第 1 步中的失败类别。用在种子标签上校准的标签模型聚合它们。这以推理成本换来了 500–2000 个噪声标签。
-
校准 LLM 评判者:使用你的标注样本(开发集分割)来对齐 LLM 评判者。分别衡量真阳性率和真阴性率。高真阳性率(捕捉真实失败)比原始准确率更重要。在留出集上进行验证。
-
在 CI 中运行评估集:至此,评估集已是一个回归测试,而非仅仅是一个度量工具。任何提示变更或模型更新都要针对它运行。来自 100–200 个精心挑选样本(配合校准评估器)的信号,比对 10000 个随机样本的非正式直觉判断更具可操作性。
达到这一点所需的投入大约是一位高级工程师 4–8 小时的时间,加上 50–100 个样本的标注成本。把这当作需要数月数据积累才能满足的前置条件的团队正在犯一个根本性错误。评估系统不是在等待数据。数据是在等待评估系统告诉它该收集什么。
Goodhart 问题及其 应对方式
任何你优化的评估集最终都会变得具有误导性。当提示工程师能看到评估样本时,他们会针对可见的样本集进行优化,而非针对该样本集本应衡量的底层质量进行优化。这不是意图上的失败——它是优化的结构性属性。
标准的缓解措施是留出集:一批从不用于调整提示、评判者或系统的样本。当内部通过率与留出集通过率出现分歧时,你就发现了 Goodharting。典型的应对——向可见集中添加更多样本——会让问题更严重,而非好转。
更好的结构性方法:创建后将评估集视为只读。对评估集的更改是一个单独的、深思熟虑的决定,只在失败分类体系真正改变时才做——而非在新系统版本需要更好分数时做。定期轮换引入生产样本,确保评估集跟踪真实用户行为,而非上线时系统状态的冻结快照。
最后一个纪律:用评估集来决定是否部署,而不是决定如何提示。提示工程使用开发集,部署决策使用留出集。保持这些角色分离,小型评估集就能长期保持可信。
- https://hamel.dev/blog/posts/evals/
- https://hamel.dev/blog/posts/evals-faq/
- https://eugeneyan.com/writing/product-evals/
- https://eugeneyan.com/writing/llm-evaluators/
- https://cameronrwolfe.substack.com/p/stats-llm-evals
- https://arxiv.org/abs/2404.12272
- https://arxiv.org/html/2412.05579v2
- https://arxiv.org/html/2602.07909
- https://snorkel.ai/data-centric-ai/weak-supervision/
- https://humanloop.com/blog/why-i-changed-my-mind-about-weak-labeling-for-ml
- https://arxiv.org/abs/2502.11767
- https://docs.ragas.io/en/stable/getstarted/rag_testset_generation/
- https://crfm.stanford.edu/2025/06/04/reliable-and-efficient-evaluation.html
- https://www.zenml.io/blog/what-1200-production-deployments-reveal-about-llmops-in-2025
