游乐游手机版
首页/AI热点日报/热点详情

会写代码的AI已正式开源并可自动生成代码

类型:热点整理2026-07-07
卡内基梅隆大学研发的开源AI代码生成模型PolyCoder基于GPT-2架构,最大27亿参数。在C语言代码生成上困惑度低于闭源模型Codex,但Python表现较弱。提供三种参数版本,训练数据覆盖12种编程语言,全部开源。

PolyCoder:专注C语言的开源AI代码生成模型

近年来,大型语言模型(LM)在代码补全以及根据自然语言描述生成代码方面表现出色。然而,主流的高性能代码LM(如Codex)大多没有开源,这给研究带来了诸多不确定性。为填补这一空白,卡内基梅隆大学(CMU)的研究团队推出了PolyCoder——一个基于GPT-2架构、完全开源的AI代码生成工具。尽管PolyCoder的最大参数量仅为27亿(Codex为120亿),但在C语言代码生成任务中,其表现甚至超越了Codex。本文将详细介绍PolyCoder的设计理念、训练过程、性能表现以及实际使用方法。


1. 背景:为什么需要PolyCoder?

目前,业界知名的代码生成模型如Codex(OpenAI)和AlphaCode(DeepMind)虽然效果出众,但均未向公众开源:

  • AlphaCode仅公布了少量测试样例。
  • Codex只开放了API接口,模型本身并不公开。

这使得科研人员难以深入分析其模型设计与数据选择策略,也限制了社区的二次开发与创新。PolyCoder正是为了解决这一困境而生的开源替代方案。

2. 模型特点:多语言训练 + 完全开源

PolyCoder的核心特点包括:

  • 多语言支持:使用12种编程语言的代码进行训练,并非仅局限于Python。
  • 开源发布:模型权重、训练代码以及数据集处理工具全部公开,支持自由研究与应用。
  • C语言优势:在C语言上的困惑度(Perplexity)低于所有对比模型,包括Codex。

小提示:如果您主要处理C语言项目,PolyCoder是目前开源选项中最值得尝试的模型之一。

3. 训练数据集:多语言精选代码库

与Codex、CodeParrot等模型主要依赖Python代码不同,PolyCoder的训练数据覆盖了12种编程语言

  • C、C#、C++
  • Go、Java、JavaScript
  • PHP、Python、Ruby
  • Rust、Scala、TypeScript

数据来源与筛选

  • 所有代码均来自GitHub上的公开仓库,每个仓库至少获得50个Stars
  • 为避免模型偏向流行语言,每种语言的Stars总数不超过25k
  • 经过文件提取、去重等简单处理后,最终得到约254GB的有效训练数据。

其中,C语言代码量最大(221GB),而Python代码量相对较少,这也是PolyCoder在C语言上表现优异、但在Python上不如Codex的重要原因。

4. 预训练方法:自左向右语言模型

语言模型的预训练方法主要有三种:

  • 自左向右语言模型:根据上文预测下文,适用于代码生成等任务。
  • 掩蔽语言模型:基于上下文预测被屏蔽的片段,适用于代码分类等。
  • 编解码器模型:适用于代码注释等任务。

PolyCoder采用第一种自左向右的预训练方式(基于GPT-2)。与同样使用GPT-2的CodeParrot和Codex相比,PolyCoder在超参数设置上略有调整,具体差异如下表所示:

小提示:如果您计划在PolyCoder基础上继续预训练,建议参考其原论文中的超参数设置。

5. 模型规模:三种尺寸可选

PolyCoder提供了三种不同参数量的模型,以适应不同的算力与使用场景:

  • 1.6亿参数(small)
  • 4亿参数(medium)
  • 27亿参数(large)

研究人员可根据自身需求选择合适的版本。其中,27亿参数的版本在C语言上表现最佳。

6. 性能评估:C语言惊艳,Python仍需改进

研究人员将PolyCoder与现有开源及闭源模型进行了对比,对比模型包括:

  • 开源模型(蓝色):GPT-Neo、GPT-J、CodeParrot、GPT-NeoX-20B等。
  • 闭源模型(橙色):Codex。

困惑度(Perplexity)对比

  • 在C语言上,PolyCoder的困惑度最低,优于包括Codex在内的所有模型。
  • 在其他语言上,PolyCoder的效果不如Codex,尤其在Python上差距明显。

HumanEval基准测试(Python)

  • PolyCoder的表现远逊于Codex,论文分析主要原因在于Python训练数据量不足以及模型参数规模较小。

小提示:如果您的主要语言是Python,建议优先使用Codex或基于它微调的模型;若您主要使用C语言,PolyCoder是不二之选。

7. 常见问题(FAQ)

Q1: PolyCoder是否支持中文注释?
A: 训练数据主要来自GitHub上的英文代码库,但代码注释可以是任意语言。不过模型对英文注释的理解更好,建议在生成中保持英文注释。

Q2: 如何在自己的项目中使用PolyCoder?
A: 模型已开源在Hugging Face等平台,您可以直接加载预训练权重,使用Transformers库进行推理或微调。具体代码示例请查看官方GitHub仓库。

Q3: 我能用PolyCoder做代码补全吗?
A: 可以。PolyCoder作为自左向右语言模型,天然适合代码补全任务。只需提供上文(部分代码),模型即可生成后续代码。

Q4: PolyCoder的C语言表现好,是否意味着所有C语言项目都适用?
A: 是的,但不建议用于超大型项目或需要严格安全性的代码生成。模型生成的代码仍需要人工审查和测试。

8. 总结与开源信息

PolyCoder的核心目标是为社区提供一个开源、可复现的代码生成模型,让更多人能够参与研究和应用。尽管在Python上不如Codex,但其在C语言上的出色表现证明了训练数据构成对模型能力的巨大影响。

目前,PolyCoder的代码、模型权重以及数据处理工具已全部开源,您可以从以下地址获取:

  • 官方GitHub仓库(请参考论文中的链接)

无论您是直接使用,还是在其基础上进行二次开发,PolyCoder都是一个值得尝试的开源选择。

来源:https://m.elecfans.com/article/1878433.html

相关热点

继续查看同栏目近期热点。

延伸阅读

补充最近整理过的热点入口。