InverseCoder: 利用自身能力提升代码生成模型性能的新方法

InverseCoder: Unleashing the Power of Instruction-Tuned Code LLMs with Inverse-Instruct

摘要

本文探讨了如何通过从自身生成数据而非依赖于强大的闭源大型语言模型(如GPT-3.5和GPT-4)来进一步改进指令调优的代码大型语言模型(LLMs)。文章提出了INVERSE-INSTRUCT方法,该方法通过代码片段总结指令而非反向操作,具体是通过代码LLM生成原始语料库的高质量指令并通过代码总结和自我评估进行微调,从而产生更强大的指令调优LLM。实验结果显示,名为InverseCoder的一系列代码LLMs在多个基准测试中超越了原始代码LLMs的性能。

原理

INVERSE-INSTRUCT方法的核心在于利用代码生成与指令生成之间的不匹配性。具体来说,将正式语言(代码)转换为非正式语言(自然语言)的过程比反向过程更为直接。该方法首先从现有指令调优数据集中提取干净的代码片段,然后使用指令调优的代码LLM对这些代码片段进行总结,生成新的指令。接着,通过代码LLM对新生成的指令-代码对进行自我评估和筛选,最后将筛选后的数据集与原始数据集结合,对基础LLM进行微调,以获得性能更强的代码LLM。

流程

INVERSE-INSTRUCT的工作流程包括三个主要步骤:代码预处理、代码总结和自我评估与数据选择。首先,从现有的指令调优数据集中提取干净的代码片段。然后,使用指令调优的代码LLM对这些代码片段进行总结,生成新的指令。最后,通过代码LLM对新生成的指令-代码对进行自我评估和筛选,筛选后的数据集与原始数据集结合,对基础LLM进行微调,以获得性能更强的代码LLM。例如,给定一个指令调优的代码语料库和一个指令调优的代码LLM,代码LLM会通过代码总结和自我评估生成额外的优质指令,然后对基础LLM进行微调,从而产生更强大的指令调优LLM。

应用

InverseCoder系列代码LLMs在广泛的基准测试中显示出超越原始代码LLMs的性能,包括Python文本到代码生成、多语言编码和数据科学代码生成。这些模型不仅在传统的编程任务中表现出色,还在现实应用中的复杂编程问题中显示出改进的能力。因此,InverseCoder的应用前景广阔,可以在编程辅助、计算机视觉、科学研究等领域发挥重要作用。