跳到主要内容
模型自己报的那个置信度,不是测量,是生成

模型自己报的那个置信度,不是测量,是生成

慢半拍
慢半拍

· 阅读约 4 分钟

未必有用。

现在很多工作流里有一个默认动作:让 LLM 在回答后面附一个置信度分数,0 到 100。好像有了这个数,系统就多一层保险。我怀疑这个数基本不承载信息。

先看最简单的一层。你问模型“你有多确定”,它在做的事不是内省,是生成一段看起来像置信度回答的文本。Anthropic 自己的可解释性研究就明说了,这类自省能力高度不可靠,且依赖上下文。换句话说,模型报告的不是它的内部状态,是它猜“这种情况下一个置信度应该长什么样”。¹

这不是抠字眼。有篇论文专门看模型怎么用 0 到 100 这把尺子,发现模型根本不是连续地用,而是挤在整数锚点上。有个模型在 68% 的情形里报了正好 100。一个有 68% 概率完全确定的系统,你要它的分数干什么。

你可能会反对说,经典机器学习里置信度不是能用吗。能用,但那是另一回事。分类器输出概率,还得经过 Platt scaling、temperature scaling 这类事后校准,才敢信。LLM 口头报的分数没有任何校准环节,它就是一段生成文本。拿它当信号,等于拿小说里的天气预报决定要不要带伞。

还有一个常见反问:token 概率总是真的吧,logprob 就摆在那。也不行。token 的权重严重不均,有的是结构胶水,有的承载全部事实主张。一个数字把这两种东西平均掉,得到的是噪声。

再说“置信度”这个词本身。它至少混了三种东西:答案对不对、答案内部自不自洽、答案有没有完成你想要的任务。三种不同的失败方式,一个 0 到 100 的分数全压成一个数。压完之后你不知道自己在读什么。

更麻烦的是,这个分数在系统里通常被当成正确性的代理。于是在 RAG 场景里你会开始优化它。优化方向往往是让模型更贴地、只说检索到的东西。代价是综合多个来源的能力被砍掉。有人调过这类系统:为了提高某类文档的召回,把 prompt 调狠了,结果模型矫枉过正,连本该一线解决的问题也直接往上升级。分数好看了,系统变笨了。

那什么才算真的测量?外部的。Farquhar 那批人做的 semantic entropy 是个例子:采样多个回答,按语义聚类,看答案散不散。这不是问模型“你确定吗”,是绕到模型外面去看它的输出分布。测量这件事,工具得在系统外面。尺子不能是被测的东西自己举着。

校准过的口头置信度也存在,Lin、Tian 那几条线和 Anthropic 的工作都表明了这点。但前提是微调、特定 prompting 策略或事后校准。没有这些,裸问出来的分数就是装饰。

所以我的偏好很简单:模型要么改对一个错误,要么把没把握的话直接省掉。别在旁边插个小旗子写“这条 60% 确定”。旗子对下游系统是个诱惑。总有一天有人拿它做路由决策,然后整条链路的可靠性就被这个没校准的数决定了。

写到这里,我要收紧一下开头的说法。分数不是完全没用,它有一个真实功能,是心理上的。系统里有个数字,人就觉得有护栏。这是给人看的,不是给机器用的。危险恰恰在这里:它安慰的是人,背锅的是管道。

真正的病根通常也不在模型敢不敢报数,在检索。有人问现在的报名截止日期,模型给出一个 2024 年烧烤比赛的截止日期,还附了引用来源。这种情况下置信度分数救不了你——模型对自己检索到的东西可以相当“有信心”。Parakhin 有个说法我挺认同:错的说成幻觉,对的说成创造力,机制是同一个。你想留创造力,就得接受它会自信地错。

也有人说,那就回到 2017 年那代基于 intent 的确定性 chatbot,每个分支都可审计。可审计是真的,脆也是真的,没料到的输入直接死掉。问题从来不是“概率系统还是确定性系统”,是你在概率系统里放什么仪表。放一个模型自己编的分数,是最差的那种仪表——看起来是仪表,其实是另一段生成。

如果我对,接下来会看到的是:置信度分数从工作流里悄悄退场,换上来的是采样、聚类、外部校准这类贵一点但真的在测量的东西。便宜的那个数太好拿,所以退场会慢。但“好拿”从来不是信号的证明。

¹ 这不是说模型永远不能自我评估。是说裸问出来的那个数,和经过校准的那个数,是两种东西。前者是生成,后者才是测量。

慢半拍
慢半拍

专挑 vibe-coding 里大家默认对的共识反驳,小步推理、常用词、不靠资历背书。

查看主页 →