推薦語(yǔ):
近期,代碼的大型語(yǔ)言模型 (LM)在完成代碼和從自然語(yǔ)言描述合成代碼方面顯示出巨大的潛力。然而,當(dāng)前最先進(jìn)的代碼 LM(例如 Codex (Chen et al., 2021))尚未公開(kāi),留下了許多關(guān)于其模型和數(shù)據(jù)設(shè)計(jì)決策的問(wèn)題。
我們的目標(biāo)是通過(guò)對(duì)各種編程語(yǔ)言中最大的現(xiàn)有模型的系統(tǒng)評(píng)估來(lái)填補(bǔ)其中的一些空白:Codex、GPT-J、GPT-Neo、GPT-NeoX-20B 和 CodeParrot。盡管 Codex 本身不是開(kāi)源的,但我們發(fā)現(xiàn),針對(duì)自然語(yǔ)言建模,現(xiàn)有的開(kāi)源模型確實(shí)在某些編程語(yǔ)言中取得了接近的結(jié)果。我們進(jìn)一步確定了一個(gè)重要的缺失部分,即專門在多語(yǔ)言代碼語(yǔ)料庫(kù)上訓(xùn)練的大型開(kāi)源模型。我們發(fā)布了一個(gè)新模型 PolyCoder,它具有基于 GPT-2 架構(gòu)的 2.7B 參數(shù),該模型在單臺(tái)機(jī)器上使用 12 種編程語(yǔ)言的 249GB 代碼進(jìn)行了訓(xùn)練。在 C 編程語(yǔ)言中,PolyCoder 優(yōu)于包括 Codex 在內(nèi)的所有模型。我們訓(xùn)練有素的模型是開(kāi)源的,可在此 https URL 上公開(kāi)獲得,這使得該領(lǐng)域的未來(lái)研究和應(yīng)用成為可能。
—— MobTech袤博科技資深java開(kāi)發(fā)工程師 零零發(fā)
比Codex還會(huì)寫C語(yǔ)言的AI代碼生成模型,現(xiàn)在開(kāi)源了!
這段時(shí)間,用AI寫代碼可以說(shuō)是大火,其中最著名的要屬OpenAI的Codex和DeepMind的AlphaCode。

基于Codex的Copilot
然而,這兩個(gè)AI模型,全都沒(méi)有開(kāi)源:其中AlphaCode只給出了一些測(cè)試樣例,而Codex只開(kāi)放了API。
為此,來(lái)自CMU的幾個(gè)研究人員,用GPT-2搞出了一個(gè)名叫PolyCoder的AI代碼生成模型,而且還是開(kāi)源的。
據(jù)研究人員表示,雖然PolyCoder最大只有27億參數(shù)(相比Codex有120億參數(shù)),但它用C語(yǔ)言寫出來(lái)的代碼,比Codex的效果還要好。
這里面究竟有什么秘訣?
用12種編程語(yǔ)言代碼集訓(xùn)練
首先來(lái)看訓(xùn)練用的數(shù)據(jù)集,這也是PolyCoder的最大特點(diǎn)之一。
此前,包括Codex、CodeParrot等AI代碼生成模型,主要都是基于Python語(yǔ)言的代碼來(lái)訓(xùn)練。
例如Codex的評(píng)估數(shù)據(jù)集之一HumanEval,評(píng)估的也是生成Python代碼的效果。
相比之下,PolyCoder采用了多種編程語(yǔ)言代碼集來(lái)訓(xùn)練,一共有12種:
C、C#、C++、Go、Java、JavaScript、PHP、Python、Ruby、Rust、Scala和TypeScript。

其中,C語(yǔ)言的代碼量是最多的,達(dá)到了221GB;而Python代碼的數(shù)據(jù)量比Codex和CodeParrot用得都要少。
這里PolyCoder用的是GitHub上的公開(kāi)代碼,主要選取的是各種編程語(yǔ)言中比較受歡迎的庫(kù),每個(gè)庫(kù)至少有50 Stars。據(jù)研究人員表示,每種編程語(yǔ)言庫(kù)的Stars總數(shù)加起來(lái)不超過(guò)25k,以避免模型生成的代碼效果太過(guò)于傾斜最流行的編程語(yǔ)言(通常編程語(yǔ)言越流行,庫(kù)的Stars就越多)。
通過(guò)提取庫(kù)中的文件、經(jīng)過(guò)簡(jiǎn)單處理(包括消除重復(fù)代碼)后,一共篩選出大約254GB的數(shù)據(jù)用于訓(xùn)練。
然后是預(yù)訓(xùn)練的方法。
語(yǔ)言模型的預(yù)訓(xùn)練方法通常有三種。第一種是自左向右的語(yǔ)言模型,根據(jù)上文預(yù)測(cè)下文,比較適用于代碼生成
等;第二種是掩蔽語(yǔ)言模型,基于上下文預(yù)測(cè)屏蔽片段,比較適合代碼分類等;第三種是編解碼器模型,比較適用于
代碼注釋等任務(wù)。

這里PolyCoder主要采用的是第一種預(yù)訓(xùn)練方法。
相比于同樣采用GPT-2訓(xùn)練的CodeParrot和Codex,PolyCoder在超參數(shù)設(shè)置上也稍微有一些差異:

PolyCoder一共提供了三種不同的模型,分別有27億參數(shù)、4億參數(shù)和1.6億參數(shù),研究人員可以根據(jù)自身需求和不同的訓(xùn)練能力來(lái)選取合適的模型。

那么,最終訓(xùn)練出來(lái)的AI模型,代碼生成效果如何?
C語(yǔ)言寫得尤其好,但Python不行
研究人員將PolyCoder與已有的AI代碼生成模型進(jìn)行了對(duì)比。由于AlphaCode不好比較
(接口沒(méi)開(kāi)放)
,所以研究人員主要分析了下面這些模型,包括GPT-Neo、CodeParrot和Codex等。其中藍(lán)色的是開(kāi)源的,橙色的是沒(méi)開(kāi)源的:

從參數(shù)量來(lái)看,PolyCoder并不是最頂尖的,最大的27億參數(shù)模型也只有Codex的四分之一不到。研究人員先是用語(yǔ)言模型評(píng)估常用的困惑度對(duì)一系列模型進(jìn)行了比較。
困惑度(Perplexity),用于衡量語(yǔ)言模型(LM)的好壞。困惑度越低,語(yǔ)言模型面對(duì)代碼感到困惑的程度就越低,模型生成效果越好。
從圖中來(lái)看,PolyCoder在C語(yǔ)言中意外取得了最好的效果(困惑度最低)。
用大量C語(yǔ)言訓(xùn)練PolyCoder的結(jié)果說(shuō)明,即使模型整體原理不變(基于GPT-2),單純改變訓(xùn)練用的代碼集,也能訓(xùn)練出擅長(zhǎng)不同語(yǔ)言風(fēng)格的AI代碼生成模型??上У氖?,從其他語(yǔ)言來(lái)看,生成的效果就完全沒(méi)辦法和Codex相比了:

例如,在主要用于評(píng)估Python代碼的HumanEval上,PolyCoder的能力遠(yuǎn)不如Codex好:

據(jù)論文分析,這可能是Python代碼數(shù)據(jù)量、模型參數(shù)量不足等原因?qū)е碌摹?/p>
此外,作者們也提到,做出PolyCoder的目的主要還是為了開(kāi)源一個(gè)AI代碼生成模型,讓更多人參與研究和使用。
目前代碼已經(jīng)開(kāi)源,無(wú)論是直接拿來(lái)用,還是試著在它的基礎(chǔ)上開(kāi)發(fā)新模型都可以。
感興趣的小伙伴可以上手一試了~
審核編輯 黃昊宇
-
C語(yǔ)言
+關(guān)注
關(guān)注
180文章
7632瀏覽量
141722 -
編程
+關(guān)注
關(guān)注
88文章
3689瀏覽量
95248 -
人工智能
+關(guān)注
關(guān)注
1806文章
49014瀏覽量
249444 -
開(kāi)源
+關(guān)注
關(guān)注
3文章
3688瀏覽量
43828 -
python
+關(guān)注
關(guān)注
56文章
4827瀏覽量
86735
發(fā)布評(píng)論請(qǐng)先 登錄
【AI學(xué)習(xí)】第 1 篇--活用創(chuàng)新模板學(xué) AI
《AI概論:來(lái)來(lái)來(lái),成為AI的良師益友》高煥堂老師帶你學(xué)AI
開(kāi)源代碼中直接提供了camera.hap包,誰(shuí)有相應(yīng)源代碼?潤(rùn)和的能否提供下嗎?
《來(lái)來(lái)來(lái),成為AI的良師益友》高煥堂老師AI學(xué)習(xí)資料大集合
如何實(shí)現(xiàn)瘋殼AI開(kāi)源無(wú)人機(jī)遙控整機(jī)代碼走讀/編譯與燒寫?
中國(guó)開(kāi)源未來(lái)發(fā)展峰會(huì)“問(wèn)道 AI 分論壇”即將開(kāi)幕!
openharmony分支代碼開(kāi)源
為什么有時(shí)候會(huì)寫出爛代碼

AI開(kāi)源浪潮的領(lǐng)軍力量!OPEN AI LAB Edge AI推理框架Tenigne全解讀

評(píng)論