跳到主要内容

评估选择偏差:为什么你的测试集会对那些导致用户流失的失败视而不见

· 阅读需 11 分钟
Tian Pan
Software Engineer

在生产级 LLM 评估中存在一种悄无声息的失败模式,这是任何排行榜都无法捕捉到的:你的测试集是基于留存用户构建的,因此它永远不会提出那些让其他用户离开的问题。季度复季度,评估分数攀升,仪表板一片绿,但净留存率(net retention)依然在下滑。团队在追问“评估是否可被操纵?”,而真正的故事更简单也更残酷:评估分布向幸存者偏移了,而幸存者恰恰是你最不需要其反馈的人群。

这是换了装束的二战轰炸机装甲问题。Abraham Wald 观察了返回的飞机,注意到弹孔聚集在哪里,并指出你应该加固的地方是那些没回来的飞机上的弹孔。把轰炸机换成用户,把弹孔换成失败的交互轮次,你就得到了从生产追踪(production traces)中提取评估集的中心病理。

循环如何悄无声息地毒害自身

大多数运行 LLM 产品的团队最终都会采用相同的评估集工作流。生产环境记录每一次交互。定期任务抽取有趣的追踪数据。工程师和标注员将这些转化为评估案例。新案例被合并到回归集中。每当模型升级、提示词更改或微调时,你都会重新运行这些评估。

在纸面上,这是一个良性反馈循环。最近的从业者文章几乎一致认为挖掘生产数据进行评估具有巨大价值;这种观点认为,一个可靠的反馈循环源于监控生产行为,随着时间的推移将新的失败案例转化为测试案例。这种机制是正确的。盲点在于产生这些追踪数据的人群。

三重过滤器叠加影响:

  1. 新手引导过滤 (Onboarding filter):在第一会话中遇到原则性失败的用户在生成足够多样化的追踪数据之前就离开了。第一轮对话被过度代表;第三轮之后的所有内容都来自已经信任该系统的人。
  2. 耐受度过滤 (Tolerance filter):在留存下来的用户中,那些坚持下来的人往往对智能体的怪癖有更高的耐受度。他们已经学会了绕过它的盲点,这意味着他们的提示词在适应智能体,而不是反过来。他们的追踪数据看起来比实际要容易。
  3. 更新过滤 (Refresh filter):每个季度评估集都会用较新的追踪数据进行更新。较新的追踪数据来自已经被第 1 到 n-1 季度过滤过的人群。这种偏差呈几何级数复合。

到第九个月,你拥有的一套评估套件,主要测试的是那些已经接受了智能体缺陷的人所写的提示词。

攀升的分数实际上在衡量什么

当评估分布向幸存者偏移时,评估仍然在衡量一些真实的东西。它只是没有衡量仪表板上所说的东西。

当前评估集 95% 的通过率意味着:在那些没有离开的人发送给我们的各类交互中,我们做对了 95%。它并不意味着:在一个代表性用户发送的各类交互中,我们做对了 95%。两者在沉默中分道扬镳,而标准策略库中没有哪个指标能捕捉到这一差距。

当评估分数上升而以下指标之一却向相反方向变动时,就是诊断性的征兆:

  • 新用户 7 天留存率。
  • 首会话无后续成功率 (First-session success-without-followup rate)。
  • 第一个月内用户群的净推荐值 (NPS) 或任务完成满意度。
  • 激活率:达到“第二次生产性会话”的新账号百分比。

如果你看到这些指标下降而评估通过率攀升,在怀疑模型之前先怀疑评估。在相关文献中,评估漂移 (Eval drift) 被描述为即使代码和提示词未变,智能体输出质量随时间推移的无声退化。我们在这里关心的变体更狡猾:代码、提示词和基准测试数字看起来都很好,唯一改变的是你的基准测试所代表的用户。

流失分层采样:针对退出行为加权评估

最有效的抗衡手段是停止假装“已流失用户”不在评估集构建范围之内。他们是你拥有的最重要的样本。

流失分层评估集不是按主题或角色划分,而是按退出信号划分层级:

  • A 层:试完就走 (One-and-done)。开启了一个会话,生成少于 N 轮,且从未返回的账号。这些追踪数据对于对抗性评估来说是纯金,因为用户的第一印象是无法挽回的。
  • B 层:缓慢流失 (Slow churn)。活跃了数周但逐渐降至零的账号。他们在沉默前的最后 3-5 个会话通常包含破坏信任的失败。
  • C 层:活跃 (Active)。每个人都在挖掘的流量。有用,但不能让其占据主导地位。
  • D 层:新用户群留存样本 (New-cohort holdout)。一个受保护的新用户切片,无论他们是否留存,其追踪数据都会被添加到评估集中。这一层在结构上受到了保护,免受更新时的幸存者过滤影响。
加载中…
References:Let's stay in touch and Follow me for more thoughts and updates