DSTC: Direct Preference Learning with Only Self-Generated Tests and Code to Improve Code LMs

📄 arXiv: 2411.13611v3 📥 PDF

作者: Zhihan Liu, Shenao Zhang, Yongfei Liu, Boyi Liu, Yingxiang Yang, Zhaoran Wang

分类: cs.SE, cs.AI

发布日期: 2024-11-20 (更新: 2024-12-10)


💡 一句话要点

DSTC:仅用自生成测试与代码进行直接偏好学习,提升代码大模型性能

🎯 匹配领域: 支柱二:RL算法与架构 (RL & Architecture) 支柱九:具身大模型 (Embodied Foundation Models)

关键词: 代码生成 直接偏好学习 自监督学习 大语言模型 代码大模型

📋 核心要点

  1. 现有直接偏好学习方法依赖大量可靠的偏好数据,而代码领域高质量标注数据稀缺,限制了模型性能提升。
  2. DSTC框架利用自生成的代码片段和测试用例构建可靠的偏好对,无需外部标注即可提升代码大模型的编码准确性。
  3. 实验表明,DSTC与DPO、KTO等方法结合,在HumanEval、MBPP等多个基准测试中稳定提升了代码生成准确率。

📝 摘要(中文)

直接偏好学习为提升代码大语言模型(LMs)的代码生成能力提供了一种有前景且计算高效的方案,超越了监督微调(SFT)。然而,可靠偏好数据的稀缺性是直接偏好学习提升代码LMs编码准确性的瓶颈。本文提出了仅用自生成代码片段和测试用例来构建可靠偏好对的框架——DSTC(Direct Preference Learning with Only Self-Generated Tests and Code),从而使直接偏好学习能够在无需外部标注的情况下提高LM的编码准确性。DSTC结合了极小极大选择过程和测试-代码拼接,以提高偏好对的质量,减少不正确的自生成测试的影响,并在不需要昂贵的奖励模型的情况下提高模型性能。当应用于直接偏好学习方法(如直接偏好优化(DPO)和 Kahneman-Tversky 优化(KTO))时,DSTC在包括 HumanEval、MBPP 和 BigCodeBench 在内的各种编码基准测试中,在编码准确性(pass@1 分数)方面产生了稳定的改进,证明了其有效性和对各种规模模型的扩展性。该方法自主地提高了各种规模LLM的代码生成准确性,减少了对昂贵的带注释编码数据集的依赖。

🔬 方法详解

问题定义:现有代码大模型的直接偏好学习方法受限于高质量偏好数据的匮乏。人工标注成本高昂,且难以保证标注质量。因此,如何利用有限的资源,甚至完全依赖模型自身生成的数据,来提升代码生成能力是一个关键问题。现有方法难以有效利用自生成数据,容易受到错误测试用例的影响,导致训练不稳定。

核心思路:DSTC的核心思路是利用自生成的代码和测试用例,通过一种精巧的策略来构建高质量的偏好对。具体来说,它通过极小极大选择过程筛选出更可靠的测试用例,并采用测试-代码拼接的方式增强模型对代码质量的判断能力。这种设计旨在减少错误测试用例的负面影响,并提高偏好对的区分度。

技术框架:DSTC框架主要包含以下几个阶段:1) 代码生成:使用代码大模型生成多个代码片段;2) 测试用例生成:为每个代码片段生成相应的测试用例;3) 极小极大选择:通过极小极大选择过程,筛选出更可靠的测试用例;4) 测试-代码拼接:将测试用例和代码片段拼接在一起,作为模型的输入;5) 直接偏好学习:使用DPO或KTO等直接偏好学习方法,基于构建的偏好对来优化模型。

关键创新:DSTC最重要的创新在于它完全依赖自生成的数据,无需任何人工标注,即可有效地提升代码大模型的性能。它通过极小极大选择和测试-代码拼接等技术,解决了自生成数据质量不高的问题,使得直接偏好学习能够更好地应用于代码生成领域。与现有方法相比,DSTC更加高效、经济,且具有更强的可扩展性。

关键设计:极小极大选择过程旨在选择那些能够区分不同代码片段优劣的测试用例。测试-代码拼接的目的是让模型能够同时考虑代码的功能和测试结果,从而更准确地判断代码的质量。损失函数采用标准的DPO或KTO损失函数,用于优化模型的偏好预测能力。具体参数设置需要根据不同的模型和数据集进行调整。

🖼️ 关键图片

fig_0
img_1

📊 实验亮点

实验结果表明,DSTC在HumanEval、MBPP和BigCodeBench等多个代码生成基准测试中取得了显著的性能提升。例如,在HumanEval上,DSTC与DPO结合,能够稳定提升pass@1分数,并且在不同规模的模型上都表现出良好的效果。这证明了DSTC的有效性和可扩展性。

🎯 应用场景

DSTC框架可广泛应用于代码大模型的训练和优化,尤其是在缺乏高质量标注数据的场景下。它可以帮助开发者更高效地训练出性能更强的代码生成模型,从而提升软件开发的效率和质量。此外,该方法还可以应用于代码自动修复、代码补全等任务,具有重要的实际应用价值和广阔的未来发展前景。

📄 摘要(原文)

Direct preference learning offers a promising and computation-efficient beyond supervised fine-tuning (SFT) for improving code generation in coding large language models (LMs). However, the scarcity of reliable preference data is a bottleneck for the performance of direct preference learning to improve the coding accuracy of code LMs. In this paper, we introduce \underline{\textbf{D}}irect Preference Learning with Only \underline{\textbf{S}}elf-Generated \underline{\textbf{T}}ests and \underline{\textbf{C}}ode (DSTC), a framework that leverages only self-generated code snippets and tests to construct reliable preference pairs such that direct preference learning can improve LM coding accuracy without external annotations. DSTC combines a minimax selection process and test-code concatenation to improve preference pair quality, reducing the influence of incorrect self-generated tests and enhancing model performance without the need for costly reward models. When applied with direct preference learning methods such as Direct Preference Optimization (DPO) and Kahneman-Tversky Optimization (KTO), DSTC yields stable improvements in coding accuracy (pass@1 score) across diverse coding benchmarks, including HumanEval, MBPP, and BigCodeBench, demonstrating both its effectiveness and scalability for models of various sizes. This approach autonomously enhances code generation accuracy across LLMs of varying sizes, reducing reliance on expensive annotated coding datasets.