LeDex: Training LLMs to Better Self-Debug and Explain Code
作者: Nan Jiang, Xiaopeng Li, Shiqi Wang, Qiang Zhou, Soneya Binta Hossain, Baishakhi Ray, Varun Kumar, Xiaofei Ma, Anoop Deoras
分类: cs.CL, cs.AI, cs.SE
发布日期: 2024-05-28 (更新: 2025-02-13)
备注: This paper is accepted by The Thirty-eighth Annual Conference on Neural Information Processing Systems (NeurIPS 2024)
💡 一句话要点
LeDex:训练LLM以提升代码自调试和解释能力
🎯 匹配领域: 支柱二:RL算法与架构 (RL & Architecture)
关键词: 代码生成 自调试 大型语言模型 监督微调 强化学习 代码解释 程序修复
📋 核心要点
- 现有代码生成模型在复杂任务中难以一次性生成正确代码,自调试能力不足,且现有方法在小型开源LLM上效果不佳。
- LeDex框架通过生成代码解释和改进轨迹的数据集,并使用监督微调和强化学习,提升LLM的自调试能力。
- 实验结果表明,LeDex框架显著提升了LLM在代码生成任务中的性能,pass@1最高提升15.92%,pass@10最高提升9.30%。
📝 摘要(中文)
在代码生成领域,自调试至关重要。它允许LLM基于执行反馈来改进生成的代码。对于复杂任务而言,一次性生成正确的解决方案极具挑战性,因此自调试尤为重要。先前关于自调试的工作主要集中于提示方法,通过为LLM提供少量示例,但这些方法在小型开源LLM上的效果不佳。本文提出了LeDex,一个显著提升LLM自调试能力的训练框架。直观地,我们观察到,对错误代码进行一系列解释,然后进行代码改进,有助于LLM更好地分析错误代码并进行改进。因此,我们提出了一个自动化的流程,通过从LLM自身或更大的教师模型生成大量的解释和改进轨迹,并通过执行验证进行过滤,从而收集高质量的代码解释和改进数据集。我们对成功和失败的轨迹进行监督微调(SFT),并进一步进行强化学习(RL),采用了一种考虑代码解释和改进质量的新型奖励设计。在四个基准测试中,SFT将pass@1提高了高达15.92%,pass@10提高了9.30%。RL训练在pass@1上带来了高达3.54%的额外提升,在pass@10上带来了2.55%的额外提升。训练后的LLM表现出迭代改进能力,并可以持续改进代码。最后,我们的人工评估表明,使用我们的框架训练的LLM生成了更有用的代码解释,并帮助开发人员更好地理解源代码中的错误。
🔬 方法详解
问题定义:论文旨在解决大型语言模型(LLM)在代码生成任务中自调试能力不足的问题。现有的自调试方法,如few-shot prompting,在小型开源LLM上表现不佳,难以有效利用执行反馈进行代码改进。因此,如何训练LLM使其具备更强的自调试和代码解释能力是本文要解决的核心问题。
核心思路:论文的核心思路是,通过让LLM学习解释错误代码并进行改进,来提升其自调试能力。具体而言,论文认为,对错误代码进行解释,然后进行代码改进,有助于LLM更好地分析错误代码并进行改进。因此,论文设计了一个自动化的流程来生成高质量的代码解释和改进数据集,并使用监督微调和强化学习来训练LLM。
技术框架:LeDex框架包含以下主要阶段:1) 数据收集:通过LLM自身或更大的教师模型生成大量的代码解释和改进轨迹,并通过执行验证进行过滤,得到高质量的数据集。2) 监督微调(SFT):使用收集到的数据集对LLM进行监督微调,使其学习代码解释和改进的能力。3) 强化学习(RL):使用强化学习进一步优化LLM的自调试能力,采用考虑代码解释和改进质量的新型奖励设计。
关键创新:LeDex框架的关键创新在于:1) 提出了一个自动化的流程来生成高质量的代码解释和改进数据集,避免了人工标注的成本。2) 采用了一种考虑代码解释和改进质量的新型奖励设计,使得强化学习能够更有效地提升LLM的自调试能力。3) 提出了一个完整的训练框架,包括数据收集、监督微调和强化学习,能够显著提升LLM的自调试能力。
关键设计:在数据收集阶段,论文使用了执行验证来过滤生成的代码解释和改进轨迹,保证了数据集的质量。在强化学习阶段,论文设计了一个考虑代码解释和改进质量的新型奖励函数,具体细节未知。
🖼️ 关键图片
📊 实验亮点
实验结果表明,LeDex框架显著提升了LLM在代码生成任务中的性能。在四个基准测试中,SFT将pass@1提高了高达15.92%,pass@10提高了9.30%。RL训练在pass@1上带来了高达3.54%的额外提升,在pass@10上带来了2.55%的额外提升。此外,人工评估表明,使用LeDex框架训练的LLM生成了更有用的代码解释。
🎯 应用场景
LeDex框架可以应用于各种代码生成场景,例如软件开发、自动化测试和教育等。通过提升LLM的自调试能力,可以减少人工调试的工作量,提高代码生成的效率和质量。此外,LeDex框架还可以用于训练代码解释模型,帮助开发人员更好地理解和调试代码,降低软件维护的成本。
📄 摘要(原文)
In the domain of code generation, self-debugging is crucial. It allows LLMs to refine their generated code based on execution feedback. This is particularly important because generating correct solutions in one attempt proves challenging for complex tasks. Prior works on self-debugging mostly focus on prompting methods by providing LLMs with few-shot examples, which work poorly on small open-sourced LLMs. In this work, we propose LeDex, a training framework that significantly improves the self-debugging capability of LLMs. Intuitively, we observe that a chain of explanations on the wrong code followed by code refinement helps LLMs better analyze the wrong code and do refinement. We thus propose an automated pipeline to collect a high-quality dataset for code explanation and refinement by generating a number of explanations and refinement trajectories from the LLM itself or a larger teacher model and filtering via execution verification. We perform supervised fine-tuning (SFT) and further reinforcement learning (RL) on both success and failure trajectories with a novel reward design considering code explanation and refinement quality. SFT improves the pass@1 by up to 15.92% and pass@10 by 9.30% over four benchmarks. RL training brings additional up to 3.54% improvement on pass@1 and 2.55% improvement on pass@10. The trained LLMs show iterative refinement ability and can keep refining code continuously. Lastly, our human evaluation shows that the LLMs trained with our framework generate more useful code explanations and help developers better understand bugs in source code.