
大规模预训练模型的出现,让人们看到了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)进行了约两个月的训练。在开发与训练过程中,我们还和华为昇腾团队共同对MindSpore框架进行了优化,大幅度提升了训练效率。研究团队还尝试进一步加入流水线优化(训练时未实装),整体训练效率再次提升,单日训练量达到841亿个标识符(含填充符),证明了国产深度学习平台与工具的快速迭代能力以及强大竞争力。
为了能让CodeGeeX模型能在真实的应用场景中被更多人使用和验证,智谱AI团队还为模型开发了VS Code插件,可以在实际的开发环境中通过注释生成代码或者做代码语言的翻译。基于CodeGeeX强大的少样本生成能力,插件还可化身为自定义的编程助手——用户只需通过提供自定义提示语句,即可实现一些有趣的功能。
比如,用户可以在提示中加入具有特定代码风格的代码,CodeGeeX会加以模仿,生成类似风格的代码。用户也可以加入一些特定格式的代码让CodeGeeX掌握新技能,如逐行解释代码(如动图所示)。插件已经在VS Code的Marketplace上架,所有用户均可以免费下载使用,在Marketplace搜索“codegeex”即可获取。

在输入中提供了额外提示----一段逐行解释代码的示例,CodeGeeX加以模仿,将现有的一段代码按照相同的方式进行解释。可以通过类似的方式,加入其他的提示,让模型掌握更多的能力。
除此之外,我们还在CodeGeeX主页(https://models.aminer.cn/codegeex/zh-CN)上提供了代码生成与代码翻译的在线Demo,欢迎来试玩体验。
CodeGeeX名字取自“代码”(Code)与“极客”(Geeks)有结合;“X”表示其多语言能力,也代表了对未来无限的幻想。在人工智能之路上不断探索,让大模型拥有了理解和生成多种编程语言代码的能力,就是智谱AI对极客精神的诠释。代码在一行行字符的背后,蕴藏的是缜密的逻辑与解决问题的智慧;让AI自动生成代码,不仅是让它在代码领域成为人类的得力助手,更证明了AI具有了自主分析推理的能力,为进一步探索大模型认知的过程打下了基础。终有一天,“让机器像人一样思考”将不只是我们的愿景,而是触手可及的未来。
CodeGeeX
CodeGeeX所有代码和模型权重将会开源,用作研究用途。我们正在适配除昇腾外的其它平台,并将在短期内开源(预计9月30日)。希望能让更多人用上CodeGeeX,并一起参与开发!
点击“阅读原文”,查看研究团队为CodeGeeX撰写的博客,了解更多信息,及获取开源代码。

