Synthetic Hallucinations, Real Gains: Hard Negatives from Frontier Models for FIM Hallucination Mitigation
本文提出了一种无需执行的方法,通过利用前沿模型合成硬负样本,来缓解小规模代码模型在填空(Fill-in-the-Middle)任务中的幻觉问题,这些样本在用于监督微调时,能够在不需要人工标签或执行沙箱的情况下,显著提升多种语言和基准测试的性能。
原始论文采用 CC BY 4.0 许可(http://creativecommons.org/licenses/by/4.0/)。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明
问题所在:“自信但错误”的自动补全
想象一下,你正在文本编辑器中编写代码,一个 AI 助手试图为你完成句子。有时,这个 AI 就像一个背熟了教科书“风格”但从未真正读过你正在学习的那一章节的优等生。
它可能会建议一个听起来很真实的函数名,或者一个语法完全正确的变量,但这些内容在你的项目中根本不存在。这就是所谓的**“幻觉”(Hallucination)**。在编程领域,这是非常危险的,因为代码看起来很正确,但一旦你尝试运行,它就会崩溃。
目前的解决方案都比较笨拙:
- “沙盒”法: 尝试运行每一个建议以查看其是否有效。这对于实时输入来说太慢了(你不能为了等一个建议而等待 5 秒钟)。
- “人类教师”法: 让人们标注数以千计的“好”代码与“坏”代码的示例。这既昂贵又缓慢。
解决方案:“骗子”老师
作者提出了一种聪明的新方法,无需运行代码或雇佣大量人工,即可训练这些小型、快速的 AI 模型。他们称之为**“合成幻觉,真实收益”(Synthetic Hallucinations, Real Gains)**。
这就像是在训练一名保安识别伪钞。与其只给保安看真钞,不如雇佣一个专业的造假团队(即“前沿模型/Frontier Models”)来制作看起来几乎完美的假钞。
以下是他们的流水线工作原理:
- 设置阶段: 他们从公开项目(如 GitHub)中提取真实的代代码,并挖掉中间部分,留下一个“空洞”,由 AI 来填补这个空白。
- 骗子环节: 他们要求三个非常聪明、强大的 AI 模型来填补这个空洞,但明确指示它们要犯错。具体来说,他们要求这些“骗子”发明虚假的函数名、虚假的变量或虚假的导入(imports),使其看起来很合理但实际上是错误的。
- “硬负例”(Hard Negative): 这些虚假的建议被称为“硬负例”。它们是完美的训练工具,因为它们足够狡猾,足以欺骗人类(或较弱的 AI),但确实是错误的。
- 授课阶段: 他们向小型 AI 模型展示这个空洞、真实的正确答案(来自原始代码)以及虚假的错误答案。他们教导小型模型:“这是正确答案。那个假的东西看起来不错,但那是陷阱。学会识破陷阱。”
结果:更聪明、更快速的助手
他们对小型编码模型(30 亿和 70 亿参数)进行了测试。结果如下:
- “魔力”般的提升: 当他们使用这种方法训练 70 亿参数模型时,该模型避免幻觉的能力提升了近 19 个点。这是一个巨大的飞跃。
- 击败更大的模型: 有趣的是,经过这种方法训练的小型模型(3B 规模)在避免这类特定错误方面,竟然比一个未经训练的更大模型(7B 规模)表现得更好。训练数据的重要性甚至超过了大脑的规模。
- 学会停止: 一个隐藏的红利是,模型学会了准确的停止时机。通常,AI 模型在完成句子后会继续输入多余的废话。这种训练教会了它们在到达终点线时立即停止。
“秘方”(为何奏效)
作者进行了多次实验以弄清楚为什么这种方法如此有效。他们发现了几个关键规则:
- 数量很重要(但仅限于一定程度): 他们需要大约 50,000 到 100,000 个示例才能获得最佳效果。超过这个数量后,增加样本量几乎不再带来帮助。
- 多样性是关键: 他们必须使用来自多种编程语言(Python, Java, C# 等)的示例。如果只用 Python,模型会感到困惑。使用五种或更多语言有助于模型理解“撒谎”的模式,而不只是特定的单词。
- “骗术”的难度: 虚假示例必须具有迷惑性。如果虚假代码错得离谱(例如函数名为
do_fake_stuff),模型就学不到任何东西。最好的训练来自于“中间地带”的例子——即那些好到几乎能骗过评审员的假象。 - 适用于不同模型: 这种方法适用于三种不同类型的基座 AI 模型,证明这是一个通用的配方,而非针对某一特定模型的技巧。
权衡:规模的影响
这里有一个限制。当他们尝试将此方法应用于极小的模型(30 亿参数)时,该模型在避免幻觉方面表现出色,但有时会忘记如何正确编写长篇且复杂的代码。这就像是一个学生完美掌握了识别错别字的方法,却忘了如何写长篇论文。作者建议,这种方法最适合至少 70 亿参数规模的模型。
总结
论文表明,你不需要通过运行代码或雇佣人类来修复 AI 幻觉。相反,你可以使用一个“聪明的骗子”来生成具有迷惑性的错误,并教会 AI 如何识别它们。这创造了一个更快、更可靠的编程助手,它知道何时停止,也知道何时说:“我不知道那个函数。”
作者已经发布了整个过程的代码,因此任何拥有公开代码和强大 AI 模型的人都可以复现这些结果。
您所在领域的论文太多了?
获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。