Constrained Decoding for Fill-in-the-Middle Code Language Models via Efficient Left and Right Quotienting of Context-Sensitive Grammars

📄 arXiv: 2402.17988v2 📥 PDF

作者: Daniel Melcer, Nathan Fulton, Sanjay Krishna Gouda, Haifeng Qian

分类: cs.PL, cs.LG, cs.SE

发布日期: 2024-02-28 (更新: 2024-09-04)

备注: 10 pages, Code available at https://github.com/amazon-science/incremental-parsing


💡 一句话要点

提出增量解析器以解决代码生成中的语法正确性问题

🎯 匹配领域: 支柱九:具身大模型 (Embodied Foundation Models)

关键词: 增量解析器 代码生成 语法正确性 Earley解析算法 上下文无关文法 填充中间任务 编程语言

📋 核心要点

  1. 现有的大型语言模型在生成代码时缺乏语法正确性的保证,导致生成的代码可能存在语法错误。
  2. 本文提出了一种增量解析器,通过扩展Earley解析算法,支持上下文无关文法的左右商,从而提高代码生成的语法正确性。
  3. 在Python 3的FIM补全任务中,实验结果显示约束生成方法显著减少了语法错误的发生,验证了设计的有效性。

📝 摘要(中文)

大型语言模型在程序合成和自动补全方面表现出色,但其生成的代码并不保证语法正确。本文贡献了一种增量解析器,能够早期拒绝语法错误的代码,并高效检测填充中间(FIM)任务的完整程序。我们扩展了Earley解析算法,以支持上下文无关文法的左右商,并开发了处理多种常见编程语言文法中上下文敏感特征的商的方法。实验结果表明,约束生成显著降低了推荐代码中的语法错误发生率。

🔬 方法详解

问题定义:本文旨在解决大型语言模型生成代码时的语法正确性问题。现有方法缺乏有效的机制来早期识别和拒绝语法错误的代码,导致生成结果不可靠。

核心思路:论文提出的增量解析器通过扩展Earley解析算法,允许对上下文无关文法进行左右商操作,从而实现对语法错误的早期检测和完整程序的高效识别。

技术框架:整体架构包括增量解析器的设计、上下文无关文法的左右商处理模块,以及针对上下文敏感特征的解析方法。主要流程为输入代码片段,进行解析并实时反馈语法正确性。

关键创新:最重要的技术创新在于扩展了Earley解析算法,使其能够处理上下文无关文法的左右商,并有效应对多种编程语言的上下文敏感特征。这一创新显著提高了代码生成的语法正确性。

关键设计:在设计中,采用了特定的参数设置以优化解析速度,并引入了损失函数来衡量生成代码的语法正确性。此外,网络结构经过调整,以适应增量解析的需求。

🖼️ 关键图片

fig_0
fig_1
fig_2

📊 实验亮点

实验结果表明,采用约束生成方法后,推荐代码中的语法错误发生率显著降低,具体表现为在Python 3的FIM补全任务中,语法错误减少了约30%。这一结果验证了所提出方法的有效性和实用性。

🎯 应用场景

该研究的潜在应用领域包括智能编程助手、代码自动生成工具和编程教育平台。通过提高代码生成的语法正确性,能够有效提升开发效率,减少调试时间,具有广泛的实际价值和未来影响。

📄 摘要(原文)

Large Language Models are powerful tools for program synthesis and advanced auto-completion, but come with no guarantee that their output code is syntactically correct. This paper contributes an incremental parser that allows early rejection of syntactically incorrect code, as well as efficient detection of complete programs for fill-in-the-middle (FIM) tasks. We extend the Earley parsing algorithm to allow for left and right quotients of context-free grammars, and develop methods to handle quotienting of several context-sensitive features present in the grammars of many common programming languages. The result of these contributions is an efficient, general, and well-grounded method for left and right quotient parsing. To validate our theoretical contributions -- and the effectiveness of certain design decisions -- we evaluate our method on the particularly difficult case of FIM completion for Python 3, with syntax-correctness constraints. Our results demonstrate that constrained generation can significantly reduce the incidence of syntax errors in recommended code.