← 最新论文
💬 NLP

Code Is More Than Text: Uncertainty Estimation for Code Generation

本文提出了一种用于代码生成的创新三轴不确定性估计框架,该框架利用代码特有的属性(如标记脆弱性、意图-代码差距以及可执行性),在检测不可靠输出方面显著优于基于自然语言衍生的基准模型。

原作者: Yuling Shi, Caiqi Zhang, Yuexian Li, Haopeng Wang, Yeheng Chen, Nigel Collier, Xiaodong Gu

发布于 2026-06-09
📖 1 分钟阅读☕ 轻松阅读

原作者: Yuling Shi, Caiqi Zhang, Yuexian Li, Haopeng Wang, Yeheng Chen, Nigel Collier, Xiaodong Gu

原始论文采用 CC BY 4.0 许可(http://creativecommons.org/licenses/by/4.0/)。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明

想象一下,你有一个非常有才华、但有时又过于自信的机器人助手在为你编写计算机代码。有时,它能写出完美的代码;而有时,它会写出看起来没错、但却隐藏着微小且不可见的错误的代码,这些错误会导致整个程序在稍后崩溃。

核心问题在于:机器人并不总是知道自己在犯错。 它可能会说:“我百分之百确定这是正确的!”但实际上却是错误的。这是很危险的,因为如果你信任了一个错误的程序,它可能会破坏你的软件或导致安全问题。

这篇论文介绍了一种新的询问机器人的方式:“你到底有多确定?”

作者们认为,询问关于代码的问题与询问关于写故事的问题是不同的。你不能直接使用用于文本的同一种“置信度测量仪”。他们发现了代码之所以独特的三个特殊原因,并基于这些原因构建了一个三部分的“不确定性检测器”。

以下是这个三部分检测器的工作原理,使用了简单的类比:

1. “错一块砖”问题(词法不确定性/Lexical Uncertainty)

概念: 在故事中,如果你用错了词,句子可能仍然通顺。但在代码中,如果你写错了一个符号(比如漏掉一个逗号或写错一个数学符号),整个程序就会崩溃。
类比: 想象你在搭一座纸牌屋。如果你放的一张牌稍微歪了一点,整个塔可能会倒塌。机器人的“置信度”并不是均匀分布在整个房子上的;它通常在大部分地方都没问题,唯独在那个“摇晃的卡片”处出了问题。
解决方案: 作者并没有检查整个故事,而是寻找那些“摇晃的卡片”。他们检查代码中机器人表现得最困惑(高熵)的具体部分。如果机器人在代码的哪怕一个微小片段上犹豫不决,他们就会将整个程序标记为有风险。

  • 结果: 这种方法非常快速且成本低廉,能捕捉到其他方法会遗漏的许多错误。

2. “计划与执行”的差距(算法不确定性/Algorithmic Uncertainty)

概念: 机器人可以有一个解决问题的绝佳想法,但在实际执行步骤时出错。有时,两种不同的代码解决方案表面看起来完全不同,但做的是同一件事。而有时,它们看起来很相似,但做的事情却不同。
类比: 想象要求机器人解释如何烤蛋糕。

  • 方法 A: 让它写出食谱(代码)。
  • 方法 B(本文的方法): 先让它用纯英文解释这个“计划”(“首先,混合鸡蛋,然后加入面粉……”)。
    如果机器人针对同一个蛋糕给出了五种不同的计划,说明它对“策略”感到困惑。如果五个计划都一样,说明它对“逻辑”很有信心。
    解决方案: 作者要求机器人生成几种不同的“纯英文计划”来对应这段代码。如果这些计划之间存在分歧,说明机器人对逻辑本身是不确定的,即使代码看起来没问题。

3. “试驾”(功能不确定性/Functional Uncertainty)

概念: 代码很特殊,因为它真的可以被“运行”。你可以看到它是否有效或无效。
类比: 想象机器人制造了一辆玩具车。与其仅仅看蓝图,不如给它一条赛道让它跑起来。

  • 机器人制造了车(代码)。
  • 机器人还发明了一些测试轨道(测试用例),来看看车子是否正常工作。
  • 机器人带着车在这些轨道上行驶。
    解决方案: 如果机器人在自己发明的 5 个测试轨道中有 4 个都翻车了,那么机器人应该非常不确定这辆车是否完好。这是一种直接的“行为”检查,你无法在普通文本中进行这种操作(你无法通过“运行”一段段落来观察它是否真实)。

“三脚凳”(集成系统/The Ensemble)

作者将这三种方法组合成了一个系统。

  • 第一条腿: 检查摇晃的卡片(词法)。
  • 第二条腿: 检查计划是否一致(算法)。
  • 第三条腿: 检查车子能否行驶(功能)。

他们发现,将这三种方法结合在一起的效果远好于只使用其中一种。这就像拥有一个由三种不同材料制成的安全网;如果其中一个失效,其他的仍能捕捉到错误。

论文的核心要点

  • 代码是不同的: 你不能直接复制粘贴用于写故事的方法来检查代码。代码需要自己的特殊规则。
  • 速度 vs. 准确度: “摇晃卡片”检查(词法)速度极快,且几乎与复杂方法一样准确。这对于需要在编辑器中实现即时反馈的自动补全功能非常有用。
  • 最佳结果: 当他们结合所有三种方法时,得到了最好的结果,能够比以往的方法更准确地识别出不确定的代码。
  • 注释 vs. 代码: 他们发现了一个有趣的现象:机器人在“注释”(代码中的英文解释)方面的置信度其实是一个坏兆头。如果机器人在英文注释上感到不确定,通常意味着代码是错误的。但如果它对代码本身感到不确定,那才是真正的危险。

简而言之,这篇论文告诉我们:要了解机器人对代码是否有信心,不要只听它说了什么。要检查它的薄弱环节,对比它的计划,并进行一次试驾。

您所在领域的论文太多了?

获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。

试用 Digest →