今天小編分享的科學經驗:清華系「自然語言編程神器」上新!支持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