比 Codex 還會寫 C 語言的 AI 代碼生成模型,現在開源了!
這段時間,用 AI 寫代碼可以說是大火,其中最著名的要屬 OpenAI 的 Codex 和 DeepMind 的 AlphaCode。
基于 Codex 的 Copilot
可是,這兩個 AI 模型,全都沒有開源:其中 AlphaCode 只給出了一些測試樣例,而 Codex 只開放了 API。
為此,來自 CMU 的幾個研究人員,用 GPT—2 搞出了一個名叫 PolyCoder 的 AI 代碼生成模型,而且還是開源的。
據研究人員表示,雖然 PolyCoder 最大只有 27 億參數,但它用 C 語言寫出來的代碼,比 Codex 的效果還要好。
這里面究竟有什么秘訣。
用 12 種編程語言代碼集訓練
首先來看訓練用的數據集,這也是 PolyCoder 的最大特點之一此前,包括 Codex,CodeParrot 等 AI 代碼生成模型,主要都是基于 Python 語言的代碼來訓練
例如 Codex 的評估數據集之一 HumanEval,評估的也是生成 Python 代碼的效果。
相比之下,PolyCoder 采用了多種編程語言代碼集來訓練,一共有 12 種:C,C#,C++,Go,Java,JavaScript,PHP,Python,Ruby,Rust,Scala 和 TypeScript。
其中,C 語言的代碼量是最多的,達到了 221GB,而 Python 代碼的數據量比 Codex 和 CodeParrot 用得都要少。
這里 PolyCoder 用的是 GitHub 上的公開代碼,主要選取的是各種編程語言中比較受歡迎的庫,每個庫至少有 50 Stars。
據研究人員表示,每種編程語言庫的 Stars 總數加起來不超過 25k,以避免模型生成的代碼效果太過于傾斜最流行的編程語言。
通過提取庫中的文件,經過簡單處理后,一共篩選出大約 254GB 的數據用于訓練。
然后是預訓練的方法。
語言模型的預訓練方法通常有三種第一種是自左向右的語言模型,根據上文預測下文,比較適用于代碼生成等,第二種是掩蔽語言模型,基于上下文預測屏蔽片段,比較適合代碼分類等,第三種是編解碼器模型,比較適用于代碼注釋等任務
這里 PolyCoder 主要采用的是第一種預訓練方法。
相比于同樣采用 GPT—2 訓練的 CodeParrot 和 Codex,PolyCoder 在超參數設置上也稍微有一些差異:
PolyCoder 一共提供了三種不同的模型,分別有 27 億參數,4 億參數和 1.6 億參數,研究人員可以根據自身需求和不同的訓練能力來選取合適的模型。
那么,最終訓練出來的 AI 模型,代碼生成效果如何。
C 語言寫得尤其好,但 Python 不行
研究人員將 PolyCoder 與已有的 AI 代碼生成模型進行了對比由于 AlphaCode 不好比較,所以研究人員主要分析了下面這些模型,包括 GPT—Neo,CodeParrot 和 Codex 等
其中藍色的是開源的,橙色的是沒開源的:
從參數量來看,PolyCoder 并不是最頂尖的,最大的 27 億參數模型也只有 Codex 的四分之一不到。
研究人員先是用語言模型評估常用的困惑度對一系列模型進行了比較。
困惑度,用于衡量語言模型的好壞困惑度越低,語言模型面對代碼感到困惑的程度就越低,模型生成效果越好
從圖中來看,PolyCoder 在 C 語言中意外取得了最好的效果。其次是TypeScript,JavaScript和Python,由在瀏覽器中本地運行的語言服務提供支持,語法高亮,單文件自動補全,語法錯誤提示等功能都有,使用體驗“良好”;。
用大量 C 語言訓練 PolyCoder 的結果說明,即使模型整體原理不變,單純改變訓練用的代碼集,也能訓練出擅長不同語言風格的 AI 代碼生成模型。
可惜的是,從其他語言來看,生成的效果就完全沒辦法和 Codex 相比了:
例如,在主要用于評估 Python 代碼的 HumanEval 上,PolyCoder 的能力遠不如 Codex 好:
據論文分析,這可能是 Python 代碼數據量,模型參數量不足等原因導致的。
目前代碼已經開源,無論是直接拿來用,還是試著在它的基礎上開發新模型都可以。
感興趣的小伙伴可以上手一試了~
一作許方正,目前在 CMU 讀博,研究方向是 NLP,信息抽取等,發表過多篇頂會論文,包括 ICLR,ACL 和 EMNLP 等本碩畢業于上海交通大學,師從朱其立教授
Uri Alon,在 CMU 進行博士后工作,研究方向是編程語言處理,NLP 和深度學習。
Graham Neubig,CMU 助理教授,研究方向是 NLP,機器翻譯和基于機器學習的自然語言理解。
Vincent J. Hellendoorn,CMU 計算機助理教授,主要研究方向是軟件工程和機器學習,致力于利用智能方法幫助軟件開發人員減少代碼調試,程序優化等繁瑣工作的時間。
項目地址:
論文地址:
。鄭重聲明:此文內容為本網站轉載企業宣傳資訊,目的在于傳播更多信息,與本站立場無關。僅供讀者參考,并請自行核實相關內容。
|