Magicoder: Empowering Code Generation with OSS-Instruct

📄 arXiv: 2312.02120v2 📥 PDF

作者: Yuxiang Wei, Zhe Wang, Jiawei Liu, Yifeng Ding, Lingming Zhang

分类: cs.CL, cs.AI, cs.SE

发布日期: 2023-12-04 (更新: 2024-06-07)

备注: Published at ICML 2024


💡 一句话要点

Magicoder:利用OSS-Instruct赋能代码生成,媲美顶尖模型

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

关键词: 代码生成 大型语言模型 开源 指令学习 数据增强 OSS-Instruct 合成数据 代码补全

📋 核心要点

  1. 现有代码生成模型依赖的合成数据存在偏差,影响模型泛化能力和真实场景表现。
  2. 提出OSS-Instruct方法,利用开源代码片段生成更多样、真实、可控的指令数据,缓解数据偏差。
  3. Magicoder系列模型在多个代码基准测试中超越同等规模甚至更大的模型,MagicoderS-CL-7B甚至超越ChatGPT。

📝 摘要(中文)

本文介绍了Magicoder,一系列完全开源(代码、权重和数据)的大型语言模型(LLM),专门用于代码生成。Magicoder模型参数量不超过70亿,但性能显著缩小了与顶级代码模型之间的差距。Magicoder模型使用OSS-Instruct方法,在7.5万条合成指令数据上进行训练。OSS-Instruct是一种新颖的方法,利用开源代码片段来启发LLM,从而生成多样化的代码指令数据。我们的主要动机是利用丰富的开源参考资料来减轻LLM生成的合成数据固有的偏差,从而生成更真实和可控的数据。OSS-Instruct与其他数据生成方法(如Evol-Instruct)的正交性进一步使我们能够构建增强的MagicoderS。在各种代码基准测试中,Magicoder和MagicoderS的性能都大大优于具有相似甚至更大尺寸的最新代码模型。值得注意的是,基于CodeLlama的MagicoderS-CL-7B在HumanEval+上甚至超过了著名的ChatGPT(pass@1分别为66.5和65.9)。总而言之,OSS-Instruct为使用丰富的开源参考资料来制作多样化的代码合成指令数据开辟了一个新的方向。

🔬 方法详解

问题定义:现有代码生成模型依赖于大型语言模型(LLM)生成的合成数据进行训练,但这些数据往往存在偏差,无法充分反映真实世界代码的多样性和复杂性。这导致模型在实际应用中表现不佳,泛化能力受限。现有方法难以有效利用海量的开源代码资源来提升合成数据的质量。

核心思路:论文的核心思路是利用开源代码片段来指导LLM生成指令数据,从而减轻合成数据的偏差。通过从开源代码中提取信息,并将其融入到指令生成过程中,可以生成更真实、多样和可控的数据,从而提升代码生成模型的性能。

技术框架:Magicoder的训练流程主要包含以下几个阶段:1) 从开源代码库中提取代码片段;2) 使用OSS-Instruct方法,利用这些代码片段来生成指令数据;3) 使用生成的指令数据来训练LLM;4) (可选) 结合Evol-Instruct等其他数据生成方法进一步增强模型。

关键创新:OSS-Instruct是本论文的关键创新点。它与以往的合成数据生成方法不同,不是完全依赖LLM自身的能力,而是利用外部的开源代码知识来指导生成过程。这种方法可以有效地减轻LLM的偏差,并生成更具多样性和真实性的数据。

关键设计:OSS-Instruct的具体实现细节未知,但可以推测其可能包含以下设计:1) 代码片段选择策略:如何选择合适的开源代码片段?2) 指令生成模板:如何将代码片段转化为指令?3) 噪声注入机制:如何增加数据的多样性?4) 过滤和评估策略:如何筛选高质量的指令数据?

📊 实验亮点

Magicoder系列模型在多个代码基准测试中取得了显著的成果。特别是,MagicoderS-CL-7B在HumanEval+测试集上超越了ChatGPT,pass@1指标分别为66.5和65.9。这表明,通过OSS-Instruct方法生成的训练数据能够有效提升代码生成模型的性能,使其在某些方面甚至可以与闭源的商业模型相媲美。

🎯 应用场景

Magicoder的研究成果可广泛应用于代码自动生成、代码补全、代码翻译、代码修复等领域。该研究有助于降低软件开发的成本,提高开发效率,并促进人工智能在软件工程领域的应用。开源的特性也使得研究成果可以被更广泛的开发者和研究者使用,加速相关技术的发展。

📄 摘要(原文)

We introduce Magicoder, a series of fully open-source (code, weights, and data) Large Language Models (LLMs) for code that significantly closes the gap with top code models while having no more than 7B parameters. Magicoder models are trained on 75K synthetic instruction data using OSS-Instruct, a novel approach to enlightening LLMs with open-source code snippets to generate diverse instruction data for code. Our main motivation is to mitigate the inherent bias of the synthetic data generated by LLMs through the wealth of open-source references for the production of more realistic and controllable data. The orthogonality of OSS-Instruct and other data generation methods like Evol-Instruct further enables us to build an enhanced MagicoderS. Both Magicoder and MagicoderS substantially outperform state-of-the-art code models with similar or even larger sizes on a wide range of coding benchmarks. Notably, MagicoderS-CL-7B based on CodeLlama even surpasses the prominent ChatGPT on HumanEval+ (66.5 vs. 65.9 in pass@1 ). Overall, OSS-Instruct opens a new direction for crafting diverse synthetic instruction data for code using abundant open-source references.