你的评测集正在腐烂:Eval Set维护的四个衰减信号

📅 2026/10/27 ✍️ 小文 📖 约 1 分钟

大多数人只关心怎么建评测集,没人关心它三个月后还准不准。本文给出评测集腐烂的四个可量化信号、判定方法,以及一个每月两小时就能完成的维护流程。

一个残酷的事实:评测集的准确率在构建时最高,然后一路下降。

它不会突然坏掉,而是像所有数据一样慢慢腐烂。业务变了、模型变了、用户问法变了,而你还在一遍遍跑同一批300条样本,看着99.1%的通过率心里踏实。

问题是,这个数字已经不再衡量任何真实的东西。

四个衰减信号

信号一:通过率长期钉死在99%以上

当你的主力模型在评测集上达到 99% 以上,且连续三个月不变,评测集已经失去分辨力。

评测集的价值在于区分好坏模型。如果所有候选模型都能满分,它就只能区分“是不是AI”,无法指导任何决策。

判定方法:把当前模型降级为明显更弱的模型(比如换到小模型档位)跑一遍。如果通过率只下降 1~2 个点,评测集已失效。

信号二:线上日志与评测集分布偏离

这是最根本的腐烂。评测集里的样本来自“三个月前你认为用户会问的问题”。

低成本检测:抽取最近一周的1000条线上请求,和评测集的1000条样本,各算 embedding,比较两者质心余弦相似度和簇分布。

  • 质心相似度 < 0.85:分布已显著偏移,需要补充样本;
  • 评测集在某类任务上占比 40%,线上只占 5%:权重失衡,通过率被高估或低估。

这个检测每月跑一次,十分钟。

信号三:标准答案本身过时了

比起分布漂移,这一项更隐蔽也更致命。

你标注“正确答案”时依据的产品政策、价格、竞品信息,在三个月里可能已经变了两轮。模型答的是新的正确答案,你的评测集判它错。

判定方法:每次跑评测,把所有“失败样本”的输入和新模型输出完整打印出来人工扫一遍。如果发现自己在说“哎这个其实是对的”,说明标准答案过期了。

这一步不能省。自动化指标会说谎,人眼不会。

信号四:没有样本被永久移除

健康的评测集是流动的。应该持续有:

  • 新增样本(来自新的线上case、新发现的长尾)
  • 修复样本(标准答案被更新)
  • 退役样本(过时的、判别力为零的、与业务无关的)

如果一个评测集半年没删过东西,它是在单调膨胀。膨胀带来的直接后果是跑一次评测越来越贵、越来越慢,于是没人跑。

每月两小时维护流程

不需要大动干戈,固定每月抽出两小时做四件事:

第 0–30 分钟:拉取并浏览失败样本。 只看失败项,不自动跑分。把失败分三类:模型真错、标准答案错、题目本身模糊。第三类直接删。

第 30–60 分钟:补入新样本。 从本月线上日志随机抽 50 条,覆盖本月出现过的任务类别。抽样时按类别分层,不要随机抽(长尾会消失)。新样本先标注,只加不改。

第 60–90 分钟:重算权重。 按本月线上分布调整各类样本的权重。注意:如果你用简单平均作为总分,实际是在假设各类别占比相等。更合理的是按线上流量加权,这样才能反映真实体验。

第 90–120 分钟:淘汰。 删掉三类:同一类别中与其他样本重复度极高的(去重);连续6个月所有模型都通过的(区分度为零);与当前业务无关的。

一个需要警惕的陷阱

不要用 LLM 来判定“哪些样本该删”。 我们会不自觉地倾向于大改,改出一批“更符合当下模型口味”的样本,然后通过率漂亮了,评测集也彻底失去独立性。

人为决定删什么、为什么删,并且写日志。这份变更历史本身就是宝贵资产——半年后你会想知道“为什么当初把这条删了”。

最后:评测集要分两块

成熟的团队会把评测集拆成两个池:

  • 稳定池(60%):几乎不动,用来看跨版本趋势,保证长期可比;
  • 活跃池(40%):每月更新的流动池,用来反映当下分布。

只看活跃池会失去历史可比性,只看稳定池会脱离现实。两块一起看,才是完整的判断。

评测集不是一次性工程,它更像一份需要持续维护的地图。地图不更新,你走得越快越偏。

📤 分享到