输出正文,tab 一下,几十行代码就进去了。

这便是咱们研发的大规模多语言代码生成模型 CodeGeeX。

一、原理

模型

CodeGeeX是一个基于transformers的大规模预训练编程语言模型。它是一个从左到右生成的自回归解码器,将代码或自然语言标识符(token)作为输出,预测下一个标识符的概率分布。

CodeGeeX含有40个transformer层,每层自注意力块的暗藏层维数为5120,前馈层维数为20480,总参数量为130亿。

模型反对的最大序列长度为2048,足以涵盖大部分应用场景。

语料

CodeGeeX的训练语料由两局部组成。

第一局部是开源代码数据集,The Pile与CodeParrot。The Pile蕴含GitHub上领有超过100颗星的一部分开源仓库,咱们从中选取了23种编程语言的代码。

第二局部是补充数据,间接从GitHub开源仓库中爬取Python、Java、C++代码。

为了让模型辨别不同语言,咱们在每个样本的结尾加上一个前缀,其模式为[正文符] language: [语言],例如:# language: Python。咱们对数据进行了去重和荡涤,整个代码语料含有23种编程语言、总计1587亿个标识符(不含填充符)。

平台

CodeGeeX 是由清华大学常识工程实验室研发,其中鹏城实验室提供了算力反对,智谱AI、华为MindSpore提供了技术支持。

具体而言,CodeGeeX 采纳了华为 MindSpore 框架来实现,应用了鹏城实验室“鹏城云脑II”平台中 192 节点昇腾910 AI处理器,在 20 多种编程语言的代码语料库历时两个月训练而成。

此外,咱们还将模型适配到了其余平台上,目前能同时反对昇腾和英伟达平台。

二、性能

如前所述,CodeGeeX采纳的是从左到右生成的自回归解码,因而CodeGeeX 可能实现许多生成类的编程问题,例如「依据正文生成代码」、「依据代码生成解释」、「依据上下文做代码补全」、「不同语言之间的代码翻译」等等,你齐全能够依据本人的需要,输出相应的提醒,从而生成有意思的内容。

咱们这里简要介绍两类性能:代码生成和代码翻译。

代码生成

代码生成,蕴含了「依据正文生成代码」、「依据上下文做代码补全」等生成类的能力。

目前,CodeGeeX 可能反对生成Python、C++、Java、JavaScript和Go等多种支流编程语言的代码。在HumanEval-X代码生成工作(咱们会在另外一篇文章中介绍)上获得47%~60%求解率,较其余开源基线模型有更佳的均匀性能。
这是在HumanEval-X中,CodeGeeX在 5 种语言下对各问题的解答率,咱们按Python下的解答率做了排序:

咱们察看了每道题目的具体解答状况,发现题目在不同语言上的解答率有着较大区别,某些题目更适宜用特定语言进行解答。

跨语言代码翻译

有时候,咱们会冀望把一种语言实现的代码,转换成另一种语言的代码,了解和重敲,很消耗精力。
CodeGeeX 能够实现一键式翻译,和自然语言的翻译一样丝滑:

咱们评测了模型在多语言间代码翻译上的性能:

上图显示了 4 种模型在 5 种语言之间的翻译性能。

4 种模型别离为:
InCoder-6.7B
CodeGen-Multi-16B
CodeGeeX-13B
CodeGeeX-13B-FT(即通过微调的CodeGeeX);
5 种语言别离为:
Python
C++
Java
JavaScript
Go

上表显示出,模型对特定语言存在偏好,比方CodeGeeX善于将其余语言翻译为Python与C++,而CodeGen-Multi-16B善于翻译为JavaScript和Go,这可能是因为训练集中的语料占比存在差别。

在20个翻译对中,咱们还察看到两种语言相互翻译的体现经常是呈负相关的,这可能阐明现有的模型还不足以学好所有的语言。

三、插件

1、VS Code插件
基于 CodeGeeX 的弱小性能,咱们开发了 VS Code 插件,在 VS Code 插件市场搜寻「codegeex」即可找到,该插件能够完全免费下载应用。

VS Code 版本的 CodeGeeX插件,咱们后续同样将齐全开源进去。任何人都能够在此基础上,做出更进一步的优化。

2、JetBrains 插件
咱们目前也公布了JetBrain IDE的插件,反对 IntelliJ IDEA、PyCharm、GoLand、CLion等。目前插件曾经在Jetbrain IDEs的插件市场正式上线。应用前,须要确保你的IDE版本为2021.1或更高版本,装置扩大并全局启用。
CodeGeeX for Jetbrains IDEs 反对两种应用模式:主动模式和交互模式。

3、其余 IDE平台插件
其余 IDE 平台的插件也正在开发当中,很快便能够上线。同时,咱们也欢送感兴趣的同学退出咱们,一起开发,独特促成 AI 辅助编程的生态。


*目前CodeGeeX,咱们有以下几个凋谢模式:
1)代码、模型,齐全开源凋谢:https://models.aminer.cn/code...
2)在线演示 demo:
代码生成:https://models.aminer.cn/code...
代码翻译:https://models.aminer.cn/code...
3)提供VS code插件:
https://marketplace.visualstu...
其余平台插件,如果感兴趣,咱们能够一起单干来开发
4)提供 API 接口:
https://tianqi.aminer.cn/open...
5)论文将于近期公布。*