不确定性不足时:代码生成中自我纠正的实证研究

arXiv cs.AI 论文

摘要

本文实证研究了使用不确定性估计方法进行代码生成中的自我纠正,发现基于不确定性的方法未能提高Pass@1准确率,而基于验证的方法则取得了显著增益。

arXiv:2608.14659v1 Announce Type: new Abstract: 用于代码生成的大语言模型经常产生不正确的解决方案,且没有可靠的失败指示器。我们研究为自然语言开发的不确定性估计方法是否可迁移到代码生成,以及此类信号是否能通过选择性自我纠正来改进代码生成。我们在HumanEval和BigCodeBench上评估了五种不确定性方法:平均令牌熵、语言化置信度、$P(\text{True})$、熵集成和语义熵探针,使用三种小型代码LLM。我们发现多样本$P(\text{True})$与正确性具有最强的相关性,而所有其他方法,包括语义熵探针,仅产生弱相关性。然后我们使用这些不确定性信号来驱动三种自我纠正策略:自适应解码、基于不确定性的重新生成和基于验证的重新生成。我们的结果显示了比预期更强的负面发现:基于不确定性的自我纠正未能可靠地提高Pass@1,在两个基准测试的6种配置中有5种降低了准确率($-3$pp到$-10$pp),而自适应解码在6种配置中有4种降低了准确率。只有基于验证的自我纠正可靠地提高了Pass@1,在HumanEval上获得$+6$到$+26$个百分点的增益,在BigCodeBench上获得$+8$到$+20$个百分点的增益,且与基线强度成反比。这些发现在两个基准测试中一致重现,表明廉价的不确定性估计器本身不足以提高代码正确性,其实际价值在于作为更昂贵的基于执行的纠正循环的门控信号,而非验证的独立替代品。
查看原文
查看缓存全文

缓存时间: 2026/08/18 09:57

# 1 引言
来源:https://arxiv.org/html/2608.14659
已更改 marginparsep。已更改 topmargin。已更改 marginparpush。页面布局违反了 ICML 样式。请勿更改页面布局,或包含会自动更改布局的宏包,如 geometry、savetrees 或 fullpage。我们无法可靠地撤销对样式的任意更改。请移除有问题的宏包或布局更改命令,然后重试。

# 当不确定性不足时:代码生成中自我纠正的实证研究
Pranav Rakasi\*1 Maanas Lalwani\*2 Arnav Srivastava2 Arya Palanivel3 Tinuade Adeleke4 Ruizhe Li5 Sean Wu6
††脚注文本:1 密歇根大学 2 纽约大学 3 威斯康星大学麦迪逊分校 4 Algoverse AI 5 阿伯丁大学 6 牛津大学。通讯作者:Tinuude Adeleke 。论文被 ICML 2026 智能体系统不确定性统计框架研讨会(韩国首尔,2026年)收录。版权所有 2026 由作者。

###### 摘要
用于代码生成的大语言模型经常在缺乏可靠故障指标的情况下产生错误的解决方案。我们研究了为自然语言开发的不确定性估计方法能否迁移到代码生成中,以及此类信号能否通过选择性自我纠正来改进代码生成。我们在 HumanEval 和 BigCodeBench 上,针对三个小型代码 LLM 评估了五种不确定性方法:平均 token 熵、口头化置信度、P(True)、熵集成以及语义熵探针。我们发现,多样本 P(True) 与正确性的相关性最强,而其他所有方法,包括语义熵探针,仅产生弱相关性。随后,我们使用这些不确定性信号来驱动三种自我纠正策略:自适应解码、基于不确定性的重生成和基于验证的重生成。我们的结果揭示了一个比预期更强的负面发现:基于不确定性的自我纠正未能可靠地提高 Pass@1,在两个基准测试的 6 种配置中有 5 种降低了准确率(-3pp 至 -10pp),自适应解码在 6 种配置中有 4 种降低了准确率。只有基于验证的自我纠正可靠地提高了 Pass@1,在 HumanEval 上提升 +6 到 +26 个百分点,在 BigCodeBench 上提升 +8 到 +20 个百分点,并且增益与基线强度成反比。这些发现在两个基准测试中一致地重现,表明廉价的不确定性估计器本身不足以提高代码正确性,其实际价值在于充当更昂贵的基于执行的纠正循环的门控信号,而不是作为验证的独立替代品。

大语言模型在代码生成方面已展现出令人印象深刻的能力,通常能生成可编译并通过测试的代码。然而,它们的失败是不可预测的。一个在一项任务上成功的模型,可能在另一项任务上产生细微的错误或完全错误的解决方案,而用户没有明显的警告信号。当前的代码辅助系统通常平等对待每次生成,无论模型对该解决方案有多大信心。这意味着一个有风险的、低置信度的代码补全与高置信度的补全一样容易交付给用户。其后果是浪费计算资源,并在面对损坏的代码时令用户沮丧。

一个关键洞察是,将不确定性估计纳入代码生成循环,可以使基于 LLM 的编码助手“意识到”自身的可靠性,并在向用户展示输出之前进行自我纠正。这意味着模型将评估其生成的代码正确的可能性。如果置信度高,可以直接输出代码;如果模型检测到答案中存在高不确定性,系统可以在用户看到有缺陷的解决方案之前自动修改或重新生成代码。

估计生成代码的不确定性除了编码助手系统外,还有几个潜在的好处。在当前实践中,验证代码正确性通常依赖于外部检查,如编译和针对测试用例运行代码。虽然有效,但此类方法会带来显著的延迟,并且并不总是可行的。不确定性估计提供了正确性的更廉价替代指标,这在我们可以在准确性与速度或资源减少之间进行权衡时非常有用。这种牺牲部分准确性以换取效率的权衡在多种场景中都很有价值。在强化学习中,模型根据执行结果获得奖励,不确定性估计比基于执行的奖励便宜得多,并且可以作为正确性的代理指标。在交互式代码补全助手中,实时建议无法等待测试执行;不确定性可以在完全不运行代码的情况下标记不可靠的补全。在批量重构或代码审查中,不确定性评分可以优先处理哪些更改值得人工关注或测试。这种模式也出现在其他领域。医疗诊断系统使用不确定性将病例上报给专家,自动驾驶汽车使用感知不确定性请求人工干预。

然而,虽然不确定性估计在自然语言任务中已被研究,但在与代码相关的任务中仍未被充分探索。代码具有独特的语义属性:单个错误的 token 可能导致完全失败;两个几乎相同的代码片段可能表现完全不同;而两个语法不同的程序可能在功能上是等价的。这些特性表明,来自自然语言的不确定性技术可能无法直接迁移,这推动了针对代码的特定研究。

在这项工作中,我们解决两个问题。首先,为自然语言开发的不确定性估计技术能否有效地迁移到代码生成中?其次,不确定性估计能否在增加最小延迟的情况下提高基于 LLM 的编码助手的性能,充当正确性的廉价代理指标?

我们的贡献如下:
- • 我们首次系统比较了五种用于代码生成的不确定性估计方法,表明单次前向传播估计器,包括语义熵探针,仅与正确性产生弱相关性,而口头化置信度对于小模型来说不可靠。多样本 P(True) 是唯一实现强相关性的方法,但代价要高得多。
- • 据我们所知,我们提供了首批系统比较五种用于代码生成的不确定性估计方法之一,在 HumanEval 和 BigCodeBench 上进行了评估。我们表明,单次前向传播估计器,包括语义熵探针,仅与正确性产生弱相关性,而口头化置信度对于小模型来说不可靠。多样本 P(True) 是唯一实现强相关性的方法,但代价要高得多。
- • 我们提出了一个由不确定性驱动的自我纠正框架,包含三种纠正策略和两种生成策略:全函数重生成(SLT)和主动重生成(TBG),后者在提交任何 token 之前,使用预生成的隐藏状态来门控解码策略。
- • 我们报告了一个强烈的负面结果:基于不确定性的自我纠正降低了 HumanEval 和 BigCodeBench 上测试的 6 种配置中的 5 种的 Pass@1,自适应解码降低了 6 种配置中的 4 种的准确率。这挑战了不确定性感知解码和不确定性引导重生成应有所帮助的直觉,并表明弱不确定性信号不仅信息量不足,而且在作为独立纠正触发器使用时实际上是有害的。
- • 我们证明了基于验证的自我纠正是唯一可靠有益的策略,表明不确定性的实际价值不在于替代执行反馈,而在于有选择地触发它。

问题提示 HumanEval / BigCodeBench 基础 LLM(单次运行)生成代码 + 内部状态 代码输出 Logits / 隐藏状态 不确定性估计 语义熵探针 (TBG / SLT) u(x) > τ ? 是 否 返回输出(无额外成本) 自我纠正策略 (2a) 重生成 (2b) 自适应解码 最终代码输出 u(x)

图 1:我们的不确定性感知代码生成框架概述。模型产生初始解决方案和中间表示。不确定性估计器计算一个标量分数 u(x),仅在不确定性超过阈值 τ 时触发自我纠正策略。

## 2 背景与相关工作
LLM 中的不确定性估计:关于 LLM 中不确定性估计的全面调查,我们参考 Tao 等人 (2025 (https://arxiv.org/html/2608.14659#bib.bib32));Huang 等人 (2025 (https://arxiv.org/html/2608.14659#bib.bib33));Xia 等人 (2025 (https://arxiv.org/html/2608.14659#bib.bib31))。我们简要讨论本文中探讨的三个类别。

第一种是利用解码内部概率信号。平均 token 熵(MTE)计算模型在每个生成步骤中输出分布上的香农熵,并在整个序列上进行聚合(Fomicheva 等人 2020 (https://arxiv.org/html/2608.14659#bib.bib8)),已成为幻觉检测和可靠性评分的常用基线(Huang 等人 2025 (https://arxiv.org/html/2608.14659#bib.bib33);Fadeeva 等人 2023 (https://arxiv.org/html/2608.14659#bib.bib35);Vashurin 等人 2025 (https://arxiv.org/html/2608.14659#bib.bib30))。然而,Kuhn 等人 (2023 (https://arxiv.org/html/2608.14659#bib.bib22)) 观察到 token 级概率对不确定性的估计很差,因为不同的 token 序列可能传达相同的含义,并提出了语义熵,该方法按含义对多个生成的答案进行聚类,并在这些聚类上计算熵。Li 等人 (2025 (https://arxiv.org/html/2608.14659#bib.bib23)) 类似地使用语义嵌入的 Gram 矩阵行列式来量化分散性。两种方法都改进了不确定性估计,但需要多次生成。Kossen 等人 (2024 (https://arxiv.org/html/2608.14659#bib.bib24)) 通过训练线性探针从单次生成的隐藏状态中近似语义熵来解决这个问题,将开销降低到几乎为零,同时性能相当。

第二种是让模型口头表达置信度。口头化置信度评分指示 LLM 在回答旁报告置信度(Tian 等人 2023 (https://arxiv.org/html/2608.14659#bib.bib17);Lin 等人 2022 (https://arxiv.org/html/2608.14659#bib.bib18);Xiong 等人 2023 (https://arxiv.org/html/2608.14659#bib.bib19);Kadavath 等人 2022 (https://arxiv.org/html/2608.14659#bib.bib20))。这不需要访问隐藏状态,但可靠性存在争议:一些研究报告了合理的校准性(Tian 等人 2023;Lin 等人 2022),而其他研究则发现系统性的过度自信(Xiong 等人 2023;Kadavath 等人 2022)。Yang 等人 (2024 (https://arxiv.org/html/2608.14659#bib.bib21)) 提供了最系统的调查,表明提示设计主导校准质量,小型 LLM 产生几乎无信息量的分数,而较大的模型则从精心设计的提示中受益。询问正确概率的自我评估模式通常被称为 P(True)。

第三种是使用集成方法。Tonolini 等人 (2024 (https://arxiv.org/html/2608.14659#bib.bib14)) 引入了贝叶斯提示集成,通过贝叶斯变分推断计算语义等价提示的加权集成输出概率。虽然在零样本和少样本分类中实现了卓越的校准,但它需要对每个输入进行多次 LLM 调用,并且难以应用于像代码这样的长篇生成。在本研究中,我们调整了该方法,通过设计选择来控制成本,并定义适合任务的不确定性目标。

代码生成的不确定性估计:Sharma 和 David (2025 (https://arxiv.org/html/2608.14659#bib.bib25)) 将熵和互信息方法应用于代码任务,发现不确定性分数与正确性之间存在弱负相关,但表明基于不确定性的放弃可以将不正确输出减少到接近零。我们在此基础上进行研究,但将不确定性用作自我纠正而非放弃策略。Zhu 等人 (2025 (https://arxiv.org/html/2608.14659#bib.bib26)) 提出了 UnCert-CoT,它监控行边界的熵,并在不确定性高时切换到链式思考解码(在 MHPP 上 +6.1%)。He 等人 (2025 (https://arxiv.org/html/2608.14659#bib.bib27)) 引入了 AdaDec,它在高熵 token 处暂停以进行前瞻重排序(在 HumanEval/MBPP 上 15.5% 的增益)。虽然两者都利用熵进行 token 或行级决策,但我们的工作研究的是整个生成语义级别的不确定性,使用估计值作为控制信号,以最小的额外延迟驱动更高层次的自我纠正策略。

## 3 方法论
我们的方法论包含两个组成部分:1) 对代码生成不确定性估计方法的系统性评估;2) 一个由不确定性驱动的自我纠正框架,该框架使用这些信号有选择地触发重生成。

### 3.1 问题设置
令 x 表示一个编程问题(例如,HumanEval 提示),令 y ∼ p_θ(y|x) 是由语言模型 θ 生成的代码解决方案。每个生成的解决方案都由一个功能正确性预言机(单元测试)进行评估,产生一个二元结果 c(y) ∈ {0,1}。我们的目标是计算每个生成解决方案的不确定性分数 U(x),使得更高的不确定性与更高的失败概率相关联,并利用此信号通过选择性自我纠正来改进代码生成。

### 3.2 不确定性估计评估
我们在一个代码生成数据集上评估了下文详细讨论的多种不确定性估计技术。所有方法为每个问题实例输出一个标量不确定性分数。我们使用 verifiers 库 (Brown (2025 (https://arxiv.org/html/2608.14659#bib.bib28))) 来评估生成代码的正确性。

#### 3.2.1 平均 token 熵
平均 token 熵(MTE)量化了模型在生成过程中 token 预测的平均不确定性。对于每个生成的 token,根据模型在词汇表上的输出概率分布计算熵:H = -∑ p_i log(p_i),其中 p_i 是 token i 的概率。在实践中,我们在每个生成步骤从模型中提取 logits,应用 softmax 获得概率,并计算熵。平均 token 熵是所有生成 token 上的每个 token 熵的算术平均值。MTE 以 nats(自然单位,以 e 为底)报告。较低的 MTE 表示较低的不确定性(更尖锐的分布),而较高的 MTE 表示较高的不确定性(更均匀的分布)。

#### 3.2.2 口头化置信度评分
在这种方法中,模型被明确提示输出数字置信度评分及其代码。具体而言,对于每个 HumanEval 提示 X,模型生成一个补全 Y,其中包含 (i) 一个 Python 解决方案和 (ii) 一个形式为“Confidence: c”的置信度陈述,其中 c ∈ [0,1] 旨在表示模型自我评估的解决方案通过所有测试的概率。我们使用基于模式的解析提取此值并钳位到有效范围:ĉ = min(1, max(0, c))。

相似文章

The Knowing-Saying Gap: When Probes See Errors that Confidence Misses

arXiv cs.AI

This paper investigates the 'knowing-saying gap' in language models, showing that linear probes can detect corrupted context with near-perfect accuracy yet fail to predict final answer errors, with implications for deployment monitoring and intervention strategies.