推薦語:
近期,代碼的大型語言模型 (LM)在完成代碼和從自然語言描述合成代碼方面顯示出巨大的潛力。然而,當前最先進的代碼 LM(例如 Codex (Chen et al., 2021))尚未公開,留下了許多關于其模型和數據設計決策的問題。
我們的目標是通過對各種編程語言中最大的現有模型的系統評估來填補其中的一些空白:Codex、GPT-J、GPT-Neo、GPT-NeoX-20B 和 CodeParrot。盡管 Codex 本身不是開源的,但我們發現,針對自然語言建模,現有的開源模型確實在某些編程語言中取得了接近的結果。我們進一步確定了一個重要的缺失部分,即專門在多語言代碼語料庫上訓練的大型開源模型。我們發布了一個新模型 PolyCoder,它具有基于 GPT-2 架構的 2.7B 參數,該模型在單臺機器上使用 12 種編程語言的 249GB 代碼進行了訓練。在 C 編程語言中,PolyCoder 優于包括 Codex 在內的所有模型。我們訓練有素的模型是開源的,可在此 https URL 上公開獲得,這使得該領域的未來研究和應用成為可能。
這段時間,用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代碼生成模型,讓更多人參與研究和使用。
目前代碼已經開源,無論是直接拿來用,還是試著在它的基礎上開發新模型都可以。
感興趣的小伙伴可以上手一試了~
審核編輯 黃昊宇
-
C語言
+關注
關注
180文章
7599瀏覽量
136213 -
編程
+關注
關注
88文章
3595瀏覽量
93600 -
人工智能
+關注
關注
1791文章
46872瀏覽量
237595 -
開源
+關注
關注
3文章
3254瀏覽量
42408 -
python
+關注
關注
56文章
4782瀏覽量
84457
發布評論請先 登錄
相關推薦
評論