用户终将学会忽略的置信度评分
你想要表现得诚实。你在智能体给出的每个答案旁边都标上了一个小小的 92%。当智能体第三次以 92% 的置信度给出错误答案后,你的用户就不再看那个数字了。他们并没有因此生气。他们只是学会了——就像人类在面对失灵信号时总会学到的那样——仪表盘上的指针并没有连接到引擎。数字还在那里。生成它需要消耗你的 token。但它不再能为任何人的决策提供参考。
这种失败模式是置信度校准(calibration)UX 研究不断重现的:呈现概率是一种信任承诺,而且这种承诺是单向的。一旦数字在用户的使用体验中被证明与正确性无关,这个分数就失去了意义——你为了展示它而投入的信任也随之崩塌。你无法在事后通过修正数字来挽回局面。这个数字现在只是个装饰品。
想要展示不确定性的本意是好的。你读过关于过度自信(overconfidence)的论文。你曾看到用户因为模型表达得过于流利和肯定而轻信了错误答案。于是你决定让你的产品有所不同——它会如实反映它所知道的。你在设计文档中写下了关于“信任校准”的句子,并在每一个输出结果上都加上了一个置信度标签(confidence chip)。但在大多数情况下,你实际发布的只是一个披着校准外壳、背后却是由未校准数字支撑的东西。你的用户正如每一项关于自动化偏差(automation bias)研究所预见的那样:他们动摇了一段时间,遇到了几次严重的负面验证,然后默默地选择了忽略那个仪表。
这个数字在测量什么(以及它不在测量什么)
你在屏幕上显示的那个数字在文献中有一个名称。它是模型对其自身下一个 token 表达出的置信度——要么是口头表达出的“我有 92% 的把握”,要么是将 logit 概率转换成的百分比。它是模型对其生成的字符串内部确定性的一种陈述。
这并不是用户认为的那个数字的含义。用户将其解读为答案在现实世界中正确的概率。这是两个不同的量,而在当下的对话微调(chat-tuned)模型中,它们甚至相去甚远。
这种差距已经被测量过了。针对 GPT-3、GPT-3.5 和 Vicuna 级别模型的研究发现,口头表达置信度的期望校准误差(Expected Calibration Error, ECE)超过了 0.37——也就是说,模型陈述的概率与其实际准确率平均相差约 37 个百分点,且大多数预测都集中在 90–100% 的区间内,无论答案是否正确。GPT-4 的表现稍好,但其利用口头置信度来区分正确与错误答案的 AUROC 也仅为 0.63 左右,只比掷硬币好一点点。一项研究发现,GPT-4 为 87% 的回答分配了最高置信度,其中包含许多事实性错误。直方图中 90% 以上的部分承担了所有权重,而其中的大部分内容其实名不副实。
其机制并不神秘。RLHF 训练模型以人类认可的方式说话,而人类认可听起来自信的回答。在对齐(alignment)过程中的奖励信号系统性地偏好肯定的语气,即使底层的答案是错误的。最近的机械论解释工作已经定位了一组紧凑的 MLP 块和注意力头(主要位于中后期层),它们在最后一个 token 的位置持续写入置信度膨胀信号。过度自信并不是后期处理中的 bug。它是训练程序有意为之的结果。
因此,当你把那个数字包装成概率并放在屏幕上时,你实际上是将对齐流水线的一个产物当作校准后的概率在展示。它并不是。而且用户无法得知这一点。
为什么展示它反而比什么都不展示更糟
理性的人会说:不完美的信号总比没有信号强。如果数字有一点相关性,展示它肯定能引导用户走向正确的方向。
经验记录给出了否定答案。信任校准文献记录了一种特定的动态:当置信度显示与实际正确性的相关性较低或不可靠时,用户并不会将其权重降低到其真实的真实信息价值。他们会产生摇摆。起初会过度信任,遇到一个高置信度的错误答案后,又摆向过度不信任;遇到一个低置信度的正确答案后,再摆回来。经过几天的使用,他们最终会完全忽略这个信号——重要的是,由于他们在摇摆中感到疲倦,他们会停留在过度信任或过度不信任的基准线上。
这正是“不完美的信号胜过没有信号”这一论点所忽略的部分。展示数字并非没有代价的行为。它消耗了用户的注意力。它消耗了用户的信任。如果这个数字没有以可用的信息作为回报,用户的校准状态会比你什么都不展示时还要糟糕——因为他们的先验认知现在已经被试图使用这个仪表并发现它撒谎的过程所污染了。
还有一个相关的、更隐蔽的成本。一旦你展示了数字,你的产品就开始承担“维护该数字信誉”的负担。看到错误答案旁边标着 92% 的用户是不会忘记的。你原本想传达的信号是“我们对不确定性很诚实”,而他们收到的信号却恰恰相反,即“这个产品在面对错误时依然迷之自信”。你必须要么修复校准,要么隐藏数字,或者接受信誉受损的现实。没有体面退出的余地。
三个诚实的选项
一旦你接受向用户展示未经校准的概率比不展示数字更糟糕,设计空间就会收缩为三个选项。每一个选项都是一种切实的承诺。
隐藏数字。 这是大多数产品实际上应该采取但却没有采取的选项,因为这感觉像是一种倒退。你停止显示置信度分数,让答案独立存在。这里隐含的假设 —— 且对于大多数消费者界面来说是正确的假设 —— 是模型的语气已经在其有限的能力范围内编码了它的信心,额外增加的数字叠加层充其量是冗余,最坏的情况是误导。隐藏数字并不等同于放弃校准。它是意识到,除非概率足够好,否则概率不属于面向用户的界面。
修正数字。 这是一个昂贵的选项。你需要构建校准基础设施:针对留出评估集(Held-out evals)的可靠性图表(Reliability diagrams)、针对基于 Logit 分数的事后温度缩放(Post-hoc temperature scaling),或者在一致性上优于原始概率提取的言语诱导策略(Verbal-elicitation strategies)。你根据地面真值(Ground truth)对数字进行仪表化测试,并不断重新调整,直到你的 ECE(期望校准误差)达到一个概率该有的水平 —— 即与准确率的偏差在个位数百分点,而不是 37%。你需要针对每种任务类型都这样做,因为校准在整个输入空间中并不是一个单一的数字。而且你需要持续这样做,因为下一个模型快照会改变曲线。这是实打实的工作,也是唯一能让你正直地保留百分比显示的路径。
用等级(Tier)代替数字。 这是大多数产品团队应该认真考虑但却没有考虑的选项,因为它感觉不够精确。与其显示“92%”,不如显示三个标签之一:“确信”、“请验证”或“我不确定 —— 请检查来源”。分类等级是根据相同的基础信号计算出来的,但它只承诺一个你真正能够支持的粗粒度声明。等级制度之所以奏效,是因为不同桶之间的阈值成为了校准目标,而不是绝对数字。你只需要保证“确信”和“请验证”之间的界限是准确率跌破某个工作点(Operating point)的界限。这是一个更容易保持诚实的界面,而且至关重要的是,它不会引导用户过度解读一个虚假的百分比。
人们有时会提出第四个选项 —— 显示数字加免责声明 —— 这是四个选项中最糟糕的一个。数字仍然具有锚定效应。免责声明被阅读一次后就会被丢弃。你对文本进行了避险处理,却没能对认知效果进行避险。
