CMU 研究人员开源“PolyCoder”:具有 2.7B 参数的基于机器学习的代码生成器

2022-04-14 15:29:37 浏览数 (1)

语言模型 (LM) 通常用于自然语言文献中,以将概率分配给标记序列。LM 最近在用编程语言编写的源代码建模方面表现出出色的性能。这些模型特别擅长代码完成和从自然语言描述生成代码等工作。对于基于 AI 的编程支持,当前最先进的代码大语言模型已显示出巨大的改进。其中最大的模型之一 Codex 已被实现为 IDE 内的开发人员助手,可根据用户的上下文在真实世界的生产工具 GitHub Copilot 中自动编写代码。

尽管大规模的代码语言模型取得了巨大成功,但最强大的模型还没有向公众提供。这限制了该领域对资源匮乏的公司的研究,并阻止了在资源充足的公司之外使用这些模型。例如,Codex 允许通过黑盒 API 调用非自由访问模型的输出,但不允许访问模型的权重或训练数据。因此,研究人员无法对代码完成以外的领域和活动进行微调和采用这种方法。无法访问模型的内部也限制了研究人员研究这些模型的其他重要特征,例如可解释性、模型蒸馏以更有效地部署,以及引入额外的组件,如检索。

GPTNeo、GPT-J 和 GPT-NeoX 是三种公开可用的预训练语言模型,大小从中到大不等。尽管接受过各种内容的培训,包括新闻文章、互联网论坛和少量(GitHub)软件存储库,但这些语言模型能够以相当快的速度生成源代码。还有一些开源语言模型纯粹是在源代码上训练的。例如,CodeParrot 接受了 180 GB Python 代码的训练。

由于这些模型中使用的模型大小和训练策略的多样性以及它们之间缺乏比较,各种建模和训练设计决策的影响尚不清楚。例如,训练 Codex 和其他私有模型的实际数据集是未知的。一些公共模型接受了自然语言和各种编程语言代码组合的训练,而其他模型(例如 CodeParrot)只接受了一种编程语言代码的训练。由于不同的编程语言共享可比较的关键字和特征,多语言模型可以实现更好的泛化,正如多语言模型对真实语言和代码的有效性所证明的那样。这可能表明多语言 LM 可以跨语言泛化,优于单语模型,

卡内基梅隆大学的研究人员最近发表了一篇论文,比较了现有的代码模型——Codex、GPT-J、GPT-Neo、GPT-NeoX 和 CodeParrot——跨编程语言。通过比较和对比各种模型,他们希望为代码建模设计决策的前景提供更多信息,并填补一个主要空白:没有大型开源语言模型纯粹根据几种编程语言的代码进行训练。在“PolyCoder”的总称下,该团队提出了三个参数范围从 160M 到 2.7B 的此类模型。

首先,团队在训练和评估设置方面对 PolyCoder、开源模型和 Codex 进行了比较和对比。其次,该团队使用 HumanEval 基准研究了各种规模和训练步骤的模型如何扩展,以及不同的温度如何影响生成质量。最后,由于 HumanEval 只评估自然语言到 Python 合成,他们在 12 种语言中的每一种中创建了一个未知的评估数据集,以评估各种模型的复杂性。

研究人员发现,尽管 Codex 表面上专攻 Python,但它在其他编程语言中的表现令人钦佩,超过了在 Pile 上训练的 GPT-J 和 GPT-NeoX。尽管如此,PolyCoder 模型在 C 编程语言中实现的困惑度低于所有这些模型,包括 Codex。

在 C 编程语言中,PolyCoder 优于 Codex 和所有其他模型。在比较单独的开源模型时,PolyCoder 在 C、JavaScript、Rust、Scala 和 TypeScript 中的性能优于类似大小的 GPT-Neo 2.7B。在 C 以外的 11 种语言中,包括 Polycoder 在内的所有其他开源模型都比 Codex 差得多(更大的困惑)。PolyCoder 接受了不平衡的语言混合训练,其中 C 和 C 是相关的,而这两种语言在据研究人员称,整体训练语料库。由于总体积较大(由于文件较长),PolyCoder 认为 C 是“首选”语言。由于 C 语言的复杂性和 Codex 的显着更大的上下文窗口大小(4096 与 PolyCoder 的 2048),或者因为 Codex 可能接受了更多 C 训练数据的训练,

结论

研究人员在这项工作中对代码的大量语言模型进行了全面检查。一般来说,更大的模型和更多的训练时间有利于性能。他们还声称,GPT-superior Neo 在某些语言中的表现表明,对自然语言文本和代码的培训有助于代码建模。PolyCoder 是一个庞大的代码开源语言模型,仅在 12 种不同编程语言的代码上进行了训练,已发布以帮助该领域的未来研究。PolyCoder 在 C 编程语言中产生的困惑度低于所有其他模型,包括 Codex。

论文:

https://arxiv.org/pdf/2202.13169.pdf

Github:

https://github.com/vhellendoorn/code-lms

0 人点赞