译者:李锐。
虽然像 GPT-4 这样的大型语言模型 (LLM) 非常擅长编写软件**,但这些模型的成本和不透明度引发了人们对更实惠、规模更小的编码 LLM 的兴趣。
这些替代方案可以针对特定任务进行微调,并且价格低廉。 开发这些 LLM 的挑战之一是在训练数据集的大小和模型的性能之间找到最佳平衡。
为了应对这一挑战,Microsoft 在最近的一篇文章中引入了一种新技术,用于训练高效的编码语言模型,示例较少。 本文介绍了 w**ecoder 模型,并声称其性能优于在类似数量示例上训练的其他编码 LLM。
为了补充 w**ecoder,Microsoft 还开发了 CodeOcean,这是一个包含 20,000 个不同示例的精选数据集。 此数据集可以增强编码应用程序底层模型的微调。
图 1 CodeOcean 管道。
虽然 W**Ecoder 是一个令人印象深刻的 LLM 模型,但本文更有趣的部分是 CodeOcean,它是一个随附的数据集。 CodeOcean 解决了一个重大挑战:创建一个平衡成本效益和质量的数据集。 研究人员认为,具有最大多样性的数据集可以产生令人印象深刻的结果,即使它包含有限的示例。
研究团队从CodeSearchNet开始,这是一个包含200万对注释和**的广泛编码数据集。 他们使用基于 BERT 的 Transformer 模型为每个示例生成嵌入,将复杂的信息转换为数字列表。
他们将聚类算法应用于嵌入,根据样本的相似性对样本进行排名。 这种方法使研究人员能够从原始数据集中提取子集,从而最大限度地提高多样性。
添加说明
建立核心数据集后,研究人员必须创建一个包含 ** 和说明的训练示例。 为了实现这一目标,他们创建了一个生成器-鉴别器框架,用于根据原始示例生成指导性数据。 最初,他们使用 GPT-4 在特定场景中进行任务定义。 这些初始任务定义与教学提示相结合,已提供给 GPT-35 生成相应的指令作为附加示例。
图 2 CodeOcean 的生成器鉴别器框架。
对于鉴别器部分,研究人员制定了单独的评估提示。 此提示以及 ** 和指令示例提供给 GPT-4 进行评估。 然后,CodeOcean 管道使用好的示例来生成未来的训练示例。
通过这个迭代过程,研究人员生成了 20,000 个高质量的教学样本。 这些示例涵盖四个不同的编码任务类别:生成、汇总、语言翻译(从一种编程语言到另一种编程语言)和修复。 这四个类别涵盖了 LLM 编码任务的很大一部分。
图 3 W**Ecoder 优于在类似数量的示例上训练的其他编码 LLM
有许多方法可以生成用于编码 LLM 的训练示例。 但 Microsoft 的 CodeOcean 因其强调泛化和示例效率而脱颖而出。 与依赖大量数据的研究不同,CodeOcean 可以使用较小的数据集实现高性能。
为了证明CodeOcean的有效性,研究人员微调了三种编码语言模型:StarCoder-15B、Codellama(7b和13b)和DeepSeekCoder-67b。鉴于数据集的大小,微调是快速且具有成本效益的。 根据三个关键的编码基准对微调后的模型进行了评估:Humaneval、MBPP 和 HumanevalPack。
通过在 CodeOcean 上进行多次训练,所有模型在这些基准测试上都取得了显著改进。 在生成方面,研究人员描述了 w**ecoder 的效果和局限性:“经过微调过程,w**ecoder 模型的性能与基础模型和一些开源模型相比有了显着提高,但它仍然落后于专有模型(如 GPT-4 和 Gemini),以及用超过 70,000 个训练数据训练的指示性模型。 ”
w**ecoder 和 wizardcoder 之间的性能差异很小,有 78,000 个训练示例。 这表明,“细粒度和多样化的指令数据可以显著提高指令调优的效率。 ”
W**Ecoder 特别擅长总结和修正任务。 它在几乎所有编程语言上都优于其他开源模型。 这一成功凸显了“定义和分类”相关任务的“有效性”,以增强LLM的泛化能力。
虽然Microsoft尚未发布W**Ecoder和CodeOcean的模型,数据和数据,但有关Hugging Face的讨论表明,该公司正在考虑是否向公众发布它们。 展望未来,研究人员的目标是探索更大数据集的影响,以及将 CodeOcean 与其他编码数据集相结合的潜在好处。