大规模预训练模型的出现,让人们看到了AI在自然语言生成和图像生成方面的惊人能力。除此之外,大模型还能给我们什么惊喜呢?几个月前,智谱AI与清华知识工程实验室的研究人员向新的任务发起了挑战:用大模型生成各种编程语言的程序代码。今天,我们就向大家介绍一下我们最新的成果:代码生成模型“CodeGeeX”。
CodeGeeX是一个具有130亿参数的多编程语言代码生成预训练模型,在20多种编程语言的代码语料库(>8500亿Token)上经过历时两个月预训练得到。CodeGeeX采用华为MindSpore框架实现,在鹏城实验室的“鹏城云脑ll”平台上训练而成。CodeGeeX支持Python、C++、Java、JavaScript和Go等十多种主流编程语言的代码生成,且具有较高精度。
通过输入自然语言或者代码片段,为模型指定任务,即可让模型生成代码实现对应功能。此外,CodeGeeX还支持不同语言代码之间的相互翻译,输入一段代码后,可以使用另一种语言写出功能相同的代码。那么,CodeGeeX的多语言能力究竟如何呢?已有的多语言基准大多基于语义相似性的评价指标,并不能很好反映生成代码的正确性。
为了更好验证CodeGeeX模型的性能,我们构建了全新的多编程语言评测基准HumanEval-X。它是第一个支持功能正确性评测的多语言、多任务的基准,包含820个人工编写的高质量代码生成题目、测试用例与参考答案,覆盖5种编程语言(Python、C++、Java、JavaScript、Go),支持代码生成与代码翻译能力的评测。
在HumanEval-X基准上,CodeGeeX在代码生成任务上取得47%~60%求解率,较其他开源基线模型有更佳的平均性能;在代码翻译任务上也展示出了超越了其它基线模型的性能。在研究过程中,华为和智谱AI为CodeGeeX提供了模型训练和评测所需的计算资源支持。CodeGeeX采用了华为MindSpore 1.7框架,并在鹏城实验室的全国产计算平台上进行训练。
模型训练过程使用了一个计算集群中的1536个昇腾910 AI处理器(32GB)进行了约两个月的训练。为了能让CodeGeeX模型能在真实的应用场景中被更多人使用和验证,智谱AI团队还为模型开发了VS Code插件,可以在实际的开发环境中通过注释生成代码或者做代码语言的翻译。CodeGeeX所有代码和模型权重将会开源,用作研究用途。我们正在适配除昇腾外的其它平台,并将在短期内开源(预计9月30日)。
希望能让更多人用上CodeGeeX,并一起参与开发!