最近,加州大学伯克利分校的研究人员提出了一种基于神经扩散模型的新型方法,用于程序合成。该方法通过在任何上下文无关文法的语法树上进行扩散操作,为程序合成领域带来了新的突破。
在传统的程序合成中,大型语言模型(LLMs)通常一次生成一个代码令牌。然而,这种自回归生成过程缺乏对程序输出的反馈,导致模型在生成代码时无法根据输出进行调整。此外,直接训练LLMs来提出编辑建议也面临着丰富的编辑数据稀缺的挑战。
为了解决这些问题,研究人员提出了一种基于神经扩散模型的方法,该方法直接在语法树上进行操作。类似于图像扩散模型,该方法通过反转应用于语法树的"噪声"来实现。与逐个生成代码令牌不同,该方法通过迭代编辑代码来保持语法有效性,这使得它很容易与搜索结合使用。
该方法被应用于逆图形任务,其中模型学习将图像转换为生成这些图像的程序。通过与搜索结合使用,该模型能够编写图形程序,查看执行结果,并调试它们以满足所需的规范。研究人员还展示了他们的系统如何为手绘草图编写图形程序。
该研究的主要贡献包括:
- 提出了一种基于在语法树上进行扩散的新颖程序合成方法。
- 实现了一种基于逆图形任务的方法,该方法在性能上显著优于先前的方法。
该研究的新颖之处在于,它将扩散模型的成功经验从图像生成领域扩展到了程序合成领域。通过利用扩散模型,该方法使模型能够学习迭代细化程序,同时确保语法有效性。此外,该方法还允许模型在每个步骤中观察程序的输出,从而有效地启用了调试过程。
然而,该方法也存在一些限制。首先,它目前仅适用于没有变量绑定、循环、字符串、连续参数等的表达式。虽然研究人员认为该方法可以扩展到支持这些功能,但需要更多的工作和仔细的设计。其次,与当前的大型语言模型相比,该方法在许多领域中生成复杂程序的能力有限。