揭示 LLM 置信度评分的反模式与陷阱,基于实际测试和分析。对在生产中使用 LLM 的开发者是重要的实用建议。
如果有人给你转发了这篇文章,你很可能曾经试图从一个LLM中提取置信度分数。
我已经在多家公司与多个人进行过这个话题的讨论,频率足够高了,看起来这里存在一个更广泛的误解。所以我希望能够直接转发这篇文章给人们,而不是每半年就在讨论线程中重新辩论一遍。
简短版本:要求LLM生成一个分数来表示它对自己回应的置信度,据我所知,这完全没有用处。
我想坦诚地说,我很乐意被证明是错的。有很多比我聪明得多的人在这个领域工作(我也与他们中的许多人一起工作!)。如果你能反驳下面任何一个论点,或者指引我看一些我还没读过的研究,我会非常乐意进行这个对话。但如果没有的话,这些就是我目前根据我的理解所持有的看法。
这种模式无处不在。基于聊天的输出、结构化输出、AI智能体任务结果。有人希望模型返回一个JSON对象,包含响应键和置信度键。通常,置信度键是一个从0到100的连续分数。
正是这种连续的刻度真正让我不满,我之后会解释原因。但更大的问题是,所有这一切都没有科学有效性。你所构建的是一个心理安全技巧。它让输出感起来更可信,而实际上并没有使其更可信,我认为那些交付这种体验的人大多在自欺欺人。
我认可Anthropic及其他机构发表过研究论文,论证模型在生成时维持某种潜在的内部状态。Anthropic在追踪语言模型思想方面的可解释性工作发现,Claude在写押韵对句时会提前规划几个单词,这不是从朴素的"下一个令牌"故事中能预测的行为。他们最近关于新兴内省意识的工作发现,模型有时可以注意到注入到其激活中的概念,并准确地报告它们。
这是真实的,也很有趣。但是,请看研究人员自己对此的告诫:这种能力高度不可靠,且高度依赖于上下文。我们目前对内部状态的理解还不够深入,不足以断言模型拥有任何可用的评估自身正确性的能力。在实验室条件下注意到注入激活中的某些内容,与量化关于客户退款政策的段落有多大可能是正确的,相距甚远。
如果我们思考底层发生的是什么,在语言各个方面之间的符号关系意义上,确实存在某种准认知活动。对于推理模型,这个过程也有一些可观测的内容。但这就是整个论证对我来说崩溃的地方,因为它立即陷入了一个"谁来监督监督者"的问题。
假设我们想利用思维轨迹来评估响应的自我正确性。好吧。那种方法已经产生了实际的性能收益,我不否认这些。但如果我们真的在讨论量化置信度,思维步骤无法拯救我们,因为下一个显而易见的问题是:我的思维步骤产生的置信度分数本身的置信度是多少?然后那个的置信度呢?这是一个无尽的置信度之塔。
我认为反思性推理模式能帮助模型捕捉自己的一些错误吗?是的。我认为模型目前有足够的理解能力来量化这一点吗?不。值得注意的是,关于内在自我纠正的研究在这方面的结果并不特别令人鼓舞。DeepMind的论文《大型语言模型目前无法自我纠正推理Yet》发现,当模型尝试仅使用其固有能力而没有外部反馈来纠正其初始响应时,性能往往会下降。
每当有人要求一个置信度分数时,我现在都会立即问这个问题:你对置信度的启发式方法是什么?
因为"置信度"变得极其模糊。不是略微模糊。是极其模糊。
模型是对响应的正确性有置信度?对响应的连贯性有置信度?对它是否尝试了履行用户请求的目标有置信度?这是三个完全不同的问题,有三种完全不同的失败模式,而一个在0到100之间的单一浮点数会把所有这些问题拍平为同一个数字。没有某种对概念进行限制的启发式方法,这些分数实际上是无用的。
将其视为单个数字还有另一个问题,这与内部状态有关。
在传统机器学习中,我们有真实的机制来处理这个问题。分类器可以输出一个分数,至少可以作为置信度的合法代理,在回归设置中,你可以在估计周围放置预测区间。
我想对这个比较要谨慎,因为经典模型也不会免费给你一个可信的数字。Guo等人在《现代神经网络的校准》中表明,现代网络在系统上过于自信,原始softmax输出需要事后修正。不同之处在于,我们有一个商定的方法来进行修正。Platt缩放、保序回归、温度缩放,都根据保留的地面真实进行拟合,并用可靠性图和Brier分数进行检查。这个数字通过与现实进行测量来获得信任,我们有一种方式来检查该测量是否仍然成立。
当有人向JSON模式添加置信度键时,正是缺少这种机制。LLM本身最接近的类比是每个下一个令牌的预测可能性。
顺便说一句,我认为"LLM只是有损地预测下一个令牌"已经成为对这些系统所处位置的过度简化,特别是当你考虑推理、自适应思维、训练后处理以及在响应之上运行的分类器时。但先搁置这个,采用最简化的版本。
即使在那里,问题也是令牌不是一致的。如果我正在生成响应的前一百个单词,每个令牌都有它自己的可能性值。其中一些是具有近似确定性概率的结构粘合。其中一些是整个段落中的关键事实主张。将该分布拆分为一个数字,然后由模型口头表达,这不是一个测量。这不过是凭感觉。
这不仅是我的直觉。这就是为什么整条研究线路的存在是为了绕过原始令牌概率。由Farquhar等人在Nature中引入的语义熵,重复地对模型进行采样,按意思而不是措辞对响应进行聚类,并测量那些意义聚类之间的熵。费力这样做的原因是令牌级可能性混淆了"我可能用五种不同的方式表达这个"和"我实际上不知道这个"。注意这种方法需要什么:多个样本和外部比较步骤。这是对模型从外部执行的测量,不是模型关于自己的报告数字。
我已经进行了查找,从我能找到的每一篇研究中,我找不到一个场景,其中这些自报告分数能够展示人们在将其放入JSON模式时假设的那种有效性。
我想明确表示,我并不是声称从LLM中获得一些可靠的置信度指示是不可能的。我声称我遇到的没有人想要得足够强烈来做所需的工作。
那项工作看起来会是这样的。你需要一个强大的提示校准过程,在其中你定义实际的启发式方法供模型进行自我分类,最好是在一个小的分类标签集合中,而不是在连续的0到100的刻度中。然后,你需要进行大量的校准和提示优化,以在足够大的响应数量n上演示,这些分数实际上是真实的。
这里的研究结论其实比我的总体立场显得更为支持这种做法,因此我希望公正地呈现它们。Lin 等人在《Teaching Models to Express Their Uncertainty in Words》中证明,可以训练模型输出经过校准的语言置信度,不过值得注意的是,他们为此在专门构建的任务分布上进行了微调。Tian 等人在《Just Ask for Calibration》中发现,只要采用恰当的提示策略,经过 RLHF 的模型就能用语言表达出比模型自身条件概率校准得更好的概率;而且,提示加温度缩放可以将预期校准误差降低一半以上。Anthropic 的《Language Models (Mostly) Know What They Know》也取得了令人鼓舞的结果:研究人员要求模型估计其自行提出的答案为真的概率。
这些是我能找到的、对我的论点最有力的反驳。但如果你看看这些方法附带的前提条件——微调、精心选择的提示策略、受限的答案格式,或明确的事后缩放——就会发现,这些都是你必须额外完成的工作,无法开箱即用。这绝不是在 Pydantic 模型里加上 "confidence": number 然后直接发布就能实现的效果。
与此同时,支持使用离散类别而非连续数值的论据正变得越来越有力。Xiong 等人对置信度引出方法的实证评估记录了语言化置信度分数往往会过度自信到何种程度。而今年早些时候的一篇论文《Rescaling Confidence: What Scale Design Reveals About LLM Metacognition》得出了一个在我看来极具否定性的结论:模型根本不会把 0 到 100 的量表当作连续区间来使用。它们会聚集在整数锚点上。在六个模型中,超过 78% 的回答只落在三个数值上,其中一个模型在 68% 的样本中都给出了恰好 100 分。与 0 到 100 的基线量表相比,更粗粒度的量表在元认知敏感度上的表现反而更好。
所以,大家最先想到的连续分数,恰恰是文献支持最薄弱的方案。如果你无论如何都要这么做,那么标签集应该尽可能小,而且每个类别都应该具有由你明确定义的具体含义。
这也引出了我的另一个不满。LLM 作为临时分类器时确实表现尚可,这一点我承认。但我认为,动不动就使用 LLM 通常是一种偷懒的做法。它很适合为合成数据添加标签,也适合那些对成功标准要求不严格、真正临时性的工作。对于任何严肃的生产用途,我都更愿意训练一个传统分类器,即使我会使用 LLM 来帮助引导生成初始训练数据。还要注意,如果你采用类别式置信度方案,最终还是需要人类定义每个标签背后的启发式规则。
至少根据我在实践中看到的用法,“置信度”其实是正确性或确定性的替代指标。换句话说,它只是事实性与依据问题换了一副面孔后的另一种变体。
一个典型例子是:我遇到的大多数案例都是 RAG 用例。人们希望模型表明,它是否确信自己检索到了正确的文档、提取了实际需要的数据,以及它的回答是否准确反映了所提取的内容。置信度在这里被用作一种可信度信号。
我认为这里会产生真正的风险,而且风险并不是人们通常预期的那种。在检索系统中,LLM 的一大价值在于信息综合。假设我们完美调校出了一个置信度分数,其启发式标准是“回答中的每一项明确事实都有检索到的文档作为依据”。如果极力朝着这个分数优化,就会降低模型跨来源综合信息的意愿。是的,理想情况下,你最终会得到一组经过验证的事实,而模型仍然可以在这些事实之间推导出新的论断。但我已经见过太多提示优化带来的副作用,因此我会对过度优化、极力追求引用充分的事实性保持怀疑,因为模型的很大一部分价值,恰恰在于结合检索到的上下文与训练数据进行推断,得出任何一方单独都不包含的结论。
这种启发式规则中还隐藏着成本问题。如果正确性意味着“在外部来源中有引用依据”,那么你要如何验证来自训练数据的事实?最终,你会为了那些不证自明的事情发起检索调用。我不希望自己的 LLM 为了确认天空是不是蓝色而调用网页搜索。这既浪费我的时间,也浪费我的 token。
我希望模型的训练数据足够可靠,以至于当我要求它检查自己回答中的论断时,它无需外部协助就能处理“天空是蓝色的”这种陈述。除非发生了某种生态现象或化学、生物战争,否则这件事没有争议。真正困难的是模型受命执行的流程中那些特定的业务逻辑,而恰恰是在这里,你会开始失去最初让模型变得有用的信息综合能力和直觉。
我想暂时岔开一下,因为我认为这是人们最容易低估的部分。
到目前为止,我已经从事 LLM 体验相关工作好几年了。我已经数不清有多少次看到团队为了修正某个具体问题而调校提示,结果矫枉过正,彻底偏离了目标。
有一个例子让我一直印象深刻。在我们的某项支持服务中,LLM 无法稳定找到详细说明升级流程的文档。于是,我们针对一些临时评估进行了提示优化来修正这个问题。结果调整得太过头,模型后来经常一开始就直接寻找升级路径,甚至完全不考虑一线顾问是否能够自行解决问题。我们花了几个月根据反馈不断调整,最终却打造出了一个学会了完全错误教训的系统。
现在说起来我会觉得好笑,但正是这个例子让我真正想明白了一件事。就像每一行代码都是负债一样,提示中的每一行也是负债,因为每一行都会扩大你试图推动的结果周围的潜在空间。模型不仅擅长遵循你明确说出的内容,也同样擅长推断你没有说出的内容周围的空间。
如果缺少一个足够全面、以目标为导向,并能让优化过程始终立足于整体回答质量的评估标准,那么有针对性的提示修复往往就会产生这种钟摆式的摇摆。
这在很大程度上解释了为什么我现在会尽可能编写最精简的提示。部分原因在于,精简的提示让我能够评估特定模型真正的因果能力,而不是衡量我围绕它进行了多么出色的调校。这也是激进提示优化长期存在的缺点:你是在针对某个特定模型和架构进行优化,所以更换模型会变成一个项目。公平地说,这种情况已经改善了很多。与 GPT-4o 时代相比——当时更换提供商意味着大量返工——如今的模型宽容得多,通常可以直接换入替代模型。但这种影响并没有消失,即使只是在同一提供商的不同模型规模之间切换也是如此。在 Sonnet 和 Opus 之间迁移,仍然可能暴露出过拟合的地方。不过最重要的是,精简提示能够帮助我从一开始就避免矫枉过正的问题。
综上所述,要得到可靠的置信度分数,就必然要经过这种提示优化;而我已经一次又一次地看到这种优化产生糟糕的二阶和三阶效应。
我总是回到这个论点,而且我认为它才是真正能够一锤定音的理由。
如果模型意识到自己的回答中存在一个没有依据的论断,我更希望它留在工具调用循环中,为该论断寻找来源,或者干脆删除这一论断,然后再把回答交给我。模型明知道自己错了,却仍然给错误贴上一个标签然后原样交付,这对我有什么用?
如果模型的自我认知足以知道某件事是错的,那就直接改正。如果它并不知道,那么它给出的置信度分数就没有衡量任何东西。
在我看来,不存在第三种情况。这就是为什么我不认为这些分数能提高可靠性。它们只是供阅读输出的人类使用的一种心理工具,而这与人们自以为正在解决的问题其实是两种不同的产品需求。
如果置信度分数是正确性的代理指标,而你判断正确性的启发式标准又是检索来源中的依据,那么你真正面对的其实是一个检索问题。所以,把精力投入到检索上。
我认为这在行业的任何层级都还没被解决,我想明确的是,我谈论的不仅是我参与过的系统。我在商用化的前沿产品中看到这一问题。我在实验室自己的深度研究和网页搜索功能中看到过。我在 Perplexity 中见过。前几天我用 ChatGPT 研究 BBQ 比赛。我问它关于报名截止日期,它返回了一个来自 2024 年的信息,并附带了引用来源。这绝对是个明显的失败。我最后的疑问不是"为什么模型没有告诉我它不确定"。而是为什么在搜索和选择相信哪些文档时,它做出了明显错误的决定。
模型的检索效果,取决于它获取的信息和执行搜索的质量。这是我会花精力去改进的地方。
我也想温和地挑战激励这些需求的思维框架。Shopify 首席技术官 Mikhail Parakhin 在我听他演讲的多个场合(内部和外部)中强调过一个观点,他从 Bing 时代起就在公开阐述:我们只在输出错误时才称之为幻觉。当输出符合我们的期望时,我们就称之为创造力。这是同一个机制在产生两种结果,在你试图优化掉这个机制之前,值得深入思考一下。
有时候感觉人们从这些 RAG 系统中真正想要的,其实是我们之前就有的东西。我在 2017 年就构建过聊天机器人,那时的一切都是基于意图的(向加州医疗保险覆盖计划的那个聊天机器人致敬,你们懂的),你需要列举所有可能的用户意图,并将每个意图映射到特定的条件。你可以通过类似 Microsoft 的 LUIS 这样的工具,将这些意图连接到知识管理工具,每次都检索特定的、有引用的信息。既是确定的、可审计的,但也很脆弱、无法应对你未曾预见的情况。我理解这种吸引力。很难信任一个可能以意想不到的方式出错的系统。但要求一个信心分数,其实是在试图用模型凭空捏造的数字来恢复那种确定性。
所以,总结一下:我看不出让模型输出信心分数有什么价值,也看不出如何让它可靠地这样做。可能存在某个版本,通过严谨的提示词校准和一小组明确定义的分类标签可以实现,但我认为这种校准的二阶和三阶效应可能是负面的,我从未遇到过有人真的想要这个分数,想到要去验证一下。而当你仔细审视自己实际上想用这个数字做什么时,在稍微严谨的逻辑审视下,整个想法就瓦解了。
就像我在大多数表达观点的文章中所说的那样,我完全可以接受自己是错的,所以如果你有能改变我想法的论文,请发给我。