首頁 原創 深1度 24小時 洞見 突發 娛樂 傳媒 IT 電腦 軟件 手機 通信 科教 游戲 科技 網絡 物聯網 智汽車 云計算 大數據 醫療 電商 數碼 金融 教育 交通 物流 消費 AI 區塊鏈
當前位置: 首頁 > AI > 正文

會寫代碼的AI 開源了:C語言寫得比Codex還好 但 Python 不行

2022-03-09 14:26:33 來源:量子位   

  比 Codex 還會寫 C 語言的 AI 代碼生成模型,現在開源了!

  這段時間,用 AI 寫代碼可以說是大火,其中最著名的要屬 OpenAI 的 Codex 和 DeepMind 的 AlphaCode。

  

 

  △基于 Codex 的 Copilot

  然而,這兩個 AI 模型,全都沒有開源:其中 AlphaCode 只給出了一些測試樣例,而 Codex 只開放了 API。

  為此,來自 CMU 的幾個研究人員,用 GPT-2 搞出了一個名叫 PolyCoder 的 AI 代碼生成模型,而且還是開源的。

  據研究人員表示,雖然 PolyCoder 最大只有 27 億參數(相比 Codex 有 120 億參數),但它用 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,以避免模型生成的代碼效果太過于傾斜最流行的編程語言(通常編程語言越流行,庫的 Stars 就越多)。

  通過提取庫中的文件、經過簡單處理(包括消除重復代碼)后,一共篩選出大約 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 的四分之一不到。

  研究人員先是用語言模型評估常用的困惑度對一系列模型進行了比較。

  困惑度(Perplexity),用于衡量語言模型(LM)的好壞。困惑度越低,語言模型面對代碼感到困惑的程度就越低,模型生成效果越好。

  從圖中來看,PolyCoder 在 C 語言中意外取得了最好的效果(困惑度最低)。

  用大量 C 語言訓練 PolyCoder 的結果說明,即使模型整體原理不變(基于 GPT-2),單純改變訓練用的代碼集,也能訓練出擅長不同語言風格的 AI 代碼生成模型。

  可惜的是,從其他語言來看,生成的效果就完全沒辦法和 Codex 相比了:

  例如,在主要用于評估 Python 代碼的 HumanEval 上,PolyCoder 的能力遠不如 Codex 好:

  據論文分析,這可能是 Python 代碼數據量、模型參數量不足等原因導致的。

  此外,作者們也提到,做出 PolyCoder 的目的主要還是為了開源一個 AI 代碼生成模型,讓更多人參與研究和使用。

  目前代碼已經開源,無論是直接拿來用,還是試著在它的基礎上開發新模型都可以。

  感興趣的小伙伴可以上手一試了~

  作者介紹

  一作許方正(Frank Xu),目前在 CMU 讀博,研究方向是 NLP、信息抽取等,發表過多篇頂會論文,包括 ICLR、ACL 和 EMNLP 等。本碩畢業于上海交通大學,師從朱其立教授。

  Uri Alon,在 CMU 進行博士后工作,研究方向是編程語言處理(PLP)、NLP 和深度學習。

  Graham Neubig,CMU 助理教授,研究方向是 NLP、機器翻譯和基于機器學習的自然語言理解。

  Vincent J. Hellendoorn,CMU 計算機助理教授,主要研究方向是軟件工程和機器學習,致力于利用智能方法幫助軟件開發人員減少代碼調試、程序優化等繁瑣工作的時間。

  不知道作者們是否已經在用這個 AI 擼代碼了(手動狗頭)

標簽:
廣告、內容合作請點這里:尋求合作
亚洲国产成人在线_暖暖直播韩国免费完整版视频_卡一卡二卡三乱码厨房_最近中文字幕2018高清在线