今天小编分享的科学经验:清华系「自然语言编程神器」上新!支持100+种编程语言,效率upup,欢迎阅读。
清华和智谱 AI 联合打造的多语言代码生成模型 CodeGeeX,更新了!
它支持的编程语言种类从原来的 20 种增加到 100 多种。
通过 IDE 中的插件,可以轻松实现「无缝自然语言编程」。
由于使用了新版基础模型,CodeGeeX2 的功能更加强大。
据了解,这次的新版本,精度和速度分别是原来的两倍和三倍,内存消耗却只有 1/5。
代码生成、解释、翻译、纠错和编程问答等工作,效率都比以前有显著提高。
作为「课代表」,我们把 CodeGeeX 的更新概括成了下面这几个方面:
代码能力更强了
模型特性得到了优化
AI 编程助手功能更全面了
用户協定更加开放
插件版本也将全面更新
模型用起来太繁琐?没关系,除了模型本身的更新,CodeGeeX 的插件版本很快也将全面更新至新版。
新插件同样支持超过 100 种编程语言,说不定比我们知道的还要多。
这之中除了 Python、Java 等我们耳熟能详的语言之外,还包括 Swift、Kotlin 等移动端新兴势力。
甚至像 Rust 这种系统级的编程语言,也在 CodeGeeX2 的能力范围之内。
比如下面这张动图就展示了 CodeGeeX2 生成 Kotlin 代码的场景。
代码生成的速度简直比人类输入指令的速度还快。
而且从中我们可以看到,CodeGeeX2 添加注释或 debug 都能一键完成。
不仅是设计算法,实用程式的编写也是小菜一碟。
补全个 vue.js 代码,搭建出网页,效率杠杠的!
除了这些代码相关的任务,CodeGeeX2 还有很多其他应用场景。
比如查询 SQL 数据库。
只要打开问答模式,用自然语言描述想要查询的内容,CodeGeeX2 就能自动生成 SQL 查询语句。
模型变强之后,会不会收费呢?不必担心,新版 CodeGeeX 插件将继续对个人用户免费开放。
而 6B 参数的 CodeGeeX2,也已经进行了开源,相关代码可以到 GitHub 仓库中查看。
GitHub Copilot 的模型也不是对手
OpenAI 的 HumanEval 评测标准可以很好地评价生成代码的表现。
这个名字很容易理解:模型生成的代码质量如何将由人类来评价。
在 HumanEval 评测中,6B 参数的 CodeGeeX2 的得分比 15B 参数的 StarCoder 模型还要高,可谓是四两拨千斤。
而 GitHub Copilot 中曾使用的 Code-Cushman-001 模型同样不是 CodeGeeX2 的对手。
不过,CodeGeeX 毕竟是一个多语言模型,而 HumanEval 却只支持 Python。
所以,为了更加准确地测试 CodeGeeX 的表现,智谱团队在其基础上增加了 Go、C++、Java 和 JS 四种语言的测试数据,得到了 HumanEval-X 数据集。
结果显示,在多语言方面,新版 CodeGeeX2 的表现和在 Python 中一样优异。
相较于第一代,CodeGeeX2 的 Pass@1 指标在各个语言上的平均表现提升了 107%。
其中,Rust 语言的性能提升显著,提升了 321%;C++ 和 JS 语言上的表现也提升了 70% 以上。
而在代码翻译方面,CodeGeeX2 的表现同样碾压对手。
「不看广告看疗效」,CodeGeeX 不仅测试结果优异,用户的认可度也是很高的。
在「CodeGeeX 是否提高了编程效率」这一问题中,有83.4% 的用户给出了正面的答案。
除了调查结果,用户们也在「用脚投票」。
这是个什么概念呢?如果只看代码行数,相当于不到一周的时间就写出一套 Windows XP。
说了这么多,CodeGeeX 又该如何体验呢?
快速体验
第一种方式就是 IDE 中的插件,VScode 和 JetBrains 系列 IDE 的插件仓库中均有收录。
除了使用 IDE 中的插件之外,CodeGeeX 也可以在 Transformer 中快速调用。
from transformers import AutoTokenizer, AutoModel
tokenizer = AutoTokenizer.from_pretrained ( "THUDM/codegeex2-6b", trust_remote_code=True )
model = AutoModel.from_pretrained ( "THUDM/codegeex2-6b", trust_remote_code=True, device='cuda' )
model = model.eval ( )
# remember adding a language tag for better performance
prompt = "# language: pythonn# write a bubble sort functionn"
inputs = tokenizer.encode ( prompt, return_tensors="pt" ) .to ( model.device )
outputs = model.generate ( inputs, max_length=256, top_k=1 )
response = tokenizer.decode ( outputs [ 0 ] )
>>> print ( response )
# language: python
# write a bubble sort function
没有支持的 IDE,Transformer 又觉得麻烦,但还是想体验怎么办?
没关系,这里还有个还有在线版 DEMO。
传送门:https://codegeex.cn/zh-CN/playground
赶快来感受一下「无缝自然语言编程」吧!
论文地址:
https://arxiv.org/abs/2303.17568
Github 项目页 :
https://github.com/THUDM/CodeGeeX2
Hugging Face 项目页:
https://huggingface.co/THUDM/codegeex2-6b