小规模自动生成数据集下的编程语言模型训练技巧

随着大型语言模型(LLM)如GPT-4在编写软件代码方面的高效表现,对更经济、规模较小的编程语言模型的需求日益增加。本文将介绍微软最新的研究成果,提出了一种在小规模自动生成的数据集下训练高效编程语言模型的创新技术,其中包括WaveCoder和CodeOcean。

小规模自动生成数据集下的编程语言模型训练技巧

WaveCoder:高效编程语言模型

WaveCoder是一种在相对较小的数据集上表现出色的编程语言模型。研究人员在微软最新的研究论文中介绍了这一模型,并指出其在相似大小的数据集上胜过其他模型。与传统依赖大量数据的研究不同,WaveCoder通过更少的样本就能实现高性能。

CodeOcean:优化的编程示例数据集

CodeOcean是微软为WaveCoder开发的配套数据集,包含了2万个多样化的代码示例。研究团队通过一系列创新方法构建了这一数据集,力求在成本效益和质量之间找到平衡。下面是CodeOcean数据集的构建过程:

步骤描述
1使用CodeSearchNet,包含2百万个代码注释对的大型数据集
2利用BERT-based transformer生成每个示例的嵌入
3应用聚类算法,基于相似性对示例进行排序
4提取原始数据集的子集,以实现最大多样性

数据集扩充和模型训练

为了进一步提高训练效果,研究人员采用了Generator-Discriminator框架,通过GPT-4生成任务定义和指导性提示,并通过GPT-3.5生成相应的代码示例说明。鉴别器组件通过评估提示和代码与说明示例的组合,选择优秀的样本用于生成未来的训练样本。通过这一迭代过程,团队生成了2万个高质量的示例,涵盖了代码生成、代码摘要、语言翻译和代码修复四个编程任务类别。

WaveCoder的性能表现

WaveCoder在多个编程任务上的性能表现优于其他相似大小数据集上训练的编程语言模型。研究人员对StarCoder-15B、CodeLLaMA(7B和13B)、DeepseekCoder-6.7B等三个模型进行了微调,结果显示在HumanEval、MBPP和HumanEvalPack等三个编程评估基准上均取得显著改进。

模型任务改进情况
StarCoder-15B代码生成显著改进
CodeLLaMA (7B和13B)代码摘要显著改进
DeepseekCoder-6.7B代码修复显著改进

尽管WaveCoder在性能上仍然落后于GPT-4和Gemini等专有模型,与拥有7万个以上训练数据的WizardCoder相比,其性能差距并不显著。这表明“精细和多样化的指导性数据可以显著提高指导调整的效率”。

未来展望

虽然微软尚未公开发布WaveCoder和CodeOcean的模型、代码和数据,但在Hugging Face等平台上的讨论表明,微软可能会考虑发布这些成果。未来,研究人员计划研究更大规模数据集的影响,以及将CodeOcean与其他编程数据集结合的潜在益处。

通过这一研究,微软为在小规模自动生成的数据集下训练高效编程语言模型提供了有益的经验和方法,为更广泛的研究和应用奠定了基础。