AI 少答一半,正确率就变高了?

同一批问题,全部回答时正确率80%,只答一半时变成96%。用风险与覆盖率看清拒答的价值,再把人工队列、等待时间和最终完成率算回来。

AI 少答一半,正确率就变高了?

一个 AI 助手原来答题的正确率是百分之八十。加上一条“不确定就不要回答”,成绩涨到了百分之九十六。

这很容易让人高兴:终于学会谨慎了。可再往下看,它只回答了一半问题。剩下一半,都变成了“建议人工确认”。

我会把这两个数字放在一起看。少说错话当然有价值,但用户交来的事情并没有跟着减少。原来的一百道题,现在仍然是一百道;只是有一部分从模型的成绩单里离开,去了别人的待办列表。

让模型选择什么时候回答,什么时候停下来,叫作选择性预测。它不是聊天模型才有的新问题。早在现代大模型流行之前,分类器就有“拒绝判断”这个选项。研究里常把它要处理的关系叫作风险与覆盖率的权衡。

来源:JMLR:带拒绝选项的分类与风险—覆盖率权衡

一百道题,不能只留下答对的那一摞

假设我们做了一个 demo 活动问答助手,根据公开说明回答地点、时间和报名材料。先定好判断标准:必要信息全部正确才算答对;缺信息、编造或者答非所问都算错。

下面所有题数、比例和工作量,都是为说明原理构造的假设数据,不是任何产品的实测结果。

同一百道题,要求全部作答时,模型答对八十道,答错二十道。现在在答案前面加一个筛选步骤,让系统把它认为较不可靠的二十道题交给人。剩下八十道里,有七十二道正确、八道错误。

正确率变成了七十二除以八十,也就是百分之九十。这里确实发生了一件好事:本来二十个错误答案,有十二个被拦住了。代价也很具体:八个本来能答对的问题,同样被送去了人工队列。

继续收紧筛选,只留下五十道,其中四十八道正确、两道错误。对外输出的正确率就到了百分之九十六。可是,自动答对的题数从八十道变成了四十八道。说系统更谨慎有依据,说它已经能解决更多问题,就不符合这份结果了。

同一百道假设问题,在全部回答与只回答五十道时,正确、错误与转人工的数量

这时需要把两把尺子同时摆出来。覆盖率是系统实际回答的题数占全部输入的比例;选择性风险是在已经回答的那部分里,平均会犯多少错。这里把答错记作一、答对记作零,风险就等于已回答部分的错误率。

只答五十道的方案,覆盖率是百分之五十,风险是百分之四。“百分之九十六正确”描述的是它选出来的半批问题,不能拿来形容全部一百道题的完成情况。

不回答也不宜直接记作答错。否则会抹掉拒答拦住错误的价值。更清楚的做法是把正确回答、错误回答、未自动回答三种结果分开,后者再追踪由谁接手、有没有完成。这样,模型的谨慎和用户的等待都不会消失。

会做题,和会挑题,是两种能力

想象另一种筛选方法:从一百道题里随便抽出五十道回答。它并不知道哪道容易,哪道危险。按原来八成正确的比例,平均只能留下四十道正确、十道错误,正确率仍然约为八成。

因此,拒答本身不会自动改善正确率。有效的筛选必须更容易拦住错误,而不是均匀删掉一半答案。前面的方案能在五十道中保留四十八道正确,说明它对这批题的难易有一定分辨力。

我觉得这很像检查行李:关掉一半通道,不等于识别出了危险物品。筛选规则得跟真正的问题有关。对问答助手而言,可以考虑的信号包括资料是否缺失、检索结果是否互相冲突,以及在已核验样本上验证过的可靠性分数。但任何一个信号有没有用,都要看它实际拦住了什么。

仅仅让模型把“我很确定”改成“我可能不太确定”,还没有完成这一步。它也可能对陌生的正确答案犹豫,对熟悉的错误说法格外自信。阈值调得再保守,如果排序本身不对,剩下的那一摞仍会有问题。

ACL 2021 的《The Art of Abstention》专门比较过自然语言处理任务中的模型与置信度估计方法,也研究了如何改善这种估计。它提醒我,“生成答案”和“决定是否采用答案”值得分别评估;论文的具体实验结果则不能直接当成今天任意聊天模型的表现。

来源:ACL 2021:The Art of Abstention

别只比较一个漂亮的点

把筛选阈值从宽到严逐步调整,每一步都记下覆盖率和风险,就能得到一条曲线。横轴表示愿意接多少题,纵轴表示接下来的题里错多少。

在这组假设里,全部回答时,风险是百分之二十;覆盖率降到百分之八十,风险变成百分之十;只答一半时,风险是百分之四;如果只挑最有把握的二十道,并且恰好全对,这个样本点的风险就是零。

最后那个零尤其容易让人心动。但它只说明这二十次没观察到错误,不是今后永远不会答错的保证。题数越少,越不能用一张干净的成绩单代替充分验证。完全不回答时更没有可用的已回答样本,不能把“没有犯错”写成百分之百准确。

假设数据的风险—覆盖率曲线:四个样本点展示多接问题与少犯错误之间的代价,零错误点不代表保证

比较两个助手时,我会先把条件对齐。都只回答一半,谁的风险更低?或者都要求已回答部分的错误率不超过某个目标,谁能覆盖更多问题?一个回答九成问题,另一个只回答两成,直接把两者的正确率排个名,没有多少实际意义。

曲线也不是天然顺滑下降的。分数排序不佳、小样本波动,都可能使某一段变得反常。把阈值收紧后,风险反而上升,就该回看究竟删掉了哪些题,不能为了图形好看把这个点藏起来。

还有一种真正有进步的情况:同样回答五十道,旧系统错两道,新系统只错一道;或者都只允许错到相同程度,新系统能回答更多。这说明在相同约束下,系统做得更好了。研究中的 SelectiveNet 就把预测与是否拒答一起训练,尝试改善整个权衡,而不只是事后挑一个更保守的阈值。

来源:ICML 2019:SelectiveNet

“交给人工”不是一个免费的按钮

现在把前面的比例放大到每天一千个问题,假设题目分布保持不变。

覆盖率八成的方案,会自动回答八百个,其中八十个错误,另有二百个需要人工处理。覆盖率五成的方案,自动回答五百个,其中二十个错误,但人工要接五百个。

从模型输出看,错误减少了六十个。从工作安排看,人工队列多了三百个。再假设没有旧积压,只有拒答问题进入人工队列,每天的处理能力稳定在三百个,八成覆盖的方案尚能消化当天的队列;五成覆盖的方案,即使人工每天满负荷,也会新增二百个积压。

假设每天一千个请求,人工容量三百个:八成覆盖转人工二百个,五成覆盖转人工五百个并新增二百个积压

这些数字没有替我们选出赢家。如果错误回答会让人走错地点,降低错误可能非常值得;如果只是推荐一篇可随时跳过的文章,等待一天再人工确认就可能得不偿失。阈值要回应错误的后果,也要回应延迟的后果。

现实里的人工处理还常有一个变化:简单题被模型接走,剩下的题更难。不能拿原来混合队列里每题两分钟的速度,直接推算新队列的处理能力。有人需要找缺失材料,有人要处理互相矛盾的说明;转交数量减少,也未必意味着总工时同比减少。

而且人不是保证正确的终点。转人工后仍可能答错、放弃、过期,或者缺少权限根本无法继续。应该另记最终完成了多少、多久完成、哪里仍有错误。模型指标描述其中一个环节,不能自动代表整套服务的效果。

拒答之后,用户还应该能往前走

同样一句“无法确定”,有时是合理的停止,有时只是把困难原封不动地退回来。

比如用户问活动几点开始,材料写了日期却没有时间。此时要求补充时间,比编出一个九点钟好;如果系统能明确指出缺少的是哪项信息,用户也知道下一步该做什么。反过来,资料里时间写得清清楚楚,系统却习惯性转人工,就要检查检索或筛选规则,而不只是继续鼓励它谨慎。

再比如用户一次问地点、时间和报名材料,系统只确定前两项。它可以说明哪些已经确认,哪些还缺依据。但评估口径要跟着变:若之前要求整条请求全部解决,不能把回答了两项偷偷算成整题完成;若准备按信息项统计,就从一开始把拆分规则写清楚。

选择性预测里的拒答,主要是在讨论可靠性不足时是否输出。它和因内容边界而拒绝提供帮助,也不是同一个评价问题。把不同原因混在一起,最后只剩一个“拒答率”,很难知道应该补资料、改善模型,还是保留原有边界。

我更愿意让转交结果带上简短原因和缺失材料,而不是一律贴“低置信度”。原因不必复杂到让用户学习术语,但至少要有后续动作:补一个条件、换一份资料、请能处理的人接手,或者明确说明这件事目前无法完成。

给“谨慎”做一次完整验收

真正检查这类助手,我会先保留一批有代表性的问题,给全部题目标好结果,不能只核对它愿意回答的那一半。否则无法知道被拒绝的题里,有多少其实可以完成,也发现不了某类用户的问题总被丢出去。

然后用一部分样本选择阈值,另留没有参与调整的题做验证。反复看着同一张成绩单调阈值,很容易挑中一次偶然的好表现。阈值确定之后,还应保留各类题目的覆盖率:总体看着合理,可能只是常见写法被照顾得很好,少见格式几乎全部转人工。

上线以后继续抽查自动回答与拒答两边。只检查前者,可以发现错误;同时检查后者,才能发现系统是不是越用越保守,或者资料更新后,原本很难的题已经可以放心接回来。题目变了,旧阈值的表现也需要重看。

这里还有一个容易漏掉的检查:如果评测时允许先看标准答案,再决定哪些题算拒答,那测到的是事后挑选,实际运行时做不到。决定是否回答的规则,必须只使用当时能够获得的信息。人工核验标签可以用来训练、调参和检查结果,却不能悄悄进入正式测试的筛选过程。

也不必把拒答率降到越低越好。资料本来缺失的一批题,合理的结果可能就是暂时无法回答。更值得看的是错误有没有被有效拦住、可回答的题有没有被过度丢弃,以及补齐资料之后,系统能否重新处理。把这些原因拆开,才能决定下一笔投入应当用来补知识、改善筛选,还是增加处理能力。

最后把自动正确、自动错误、转交数量、转交后的完成情况放在同一张记录里。它不用是一套复杂平台,甚至可以从一份表格开始。关键是没有哪个问题会因为模型说了“不知道”,就从账本里消失。

我希望 AI 学会停下来,但“停下来”只是把风险从一个位置移开。它停在什么地方,剩下的事谁来做,用户还要等多久,才决定这份谨慎有没有真正帮上忙。

评论