Codex是OpenAI公司推出的GPT-3(Generative Pre-trained Transformer–3)的多個派生模型之一。它是基于GPT語言模型,使用代碼數(shù)據(jù)進(jìn)行Fine-Tune(微調(diào))而訓(xùn)練出的專門用于代碼生成/文檔生成的模型。Codex模型參數(shù)從12M到12B不等,是目前最強(qiáng)的編程語言預(yù)訓(xùn)練模型。Codex能夠幫助程序員根據(jù)函數(shù)名和注釋自動補(bǔ)全代碼、直接生成代碼、自動補(bǔ)充測試樣例,并支持多種編程語言。本期Azure OpenAI官方指南將詳解Codex的模型結(jié)構(gòu)如何幫助程序員實(shí)現(xiàn)自動代碼生成。
Codex的模型結(jié)構(gòu)╱01
Azure Codex模型家族簡介╱02
Codex的應(yīng)用場景示例╱03
01
Codex的模型結(jié)構(gòu)
OpenAI CTO兼聯(lián)合創(chuàng)始人Greg Brockman表示,“Codex將是一款能夠施展程序員力量的重要工具”。Codex項(xiàng)目負(fù)責(zé)人Wojciech Zaremba則將Codex視為編碼歷史演變的下一階段。那么,Codex是如何顛覆編碼的?
編程主要分為兩個階段,第一個階段是認(rèn)真思考問題并嘗試?yán)斫?,第二個階段是把這些小片段與現(xiàn)有代碼映射起來,包括庫、函數(shù)以及API。通過自然語言模型結(jié)構(gòu)與代碼數(shù)據(jù)集訓(xùn)練,在第二個階段,Codex模型的優(yōu)勢顯露無疑?!癈odex的出現(xiàn),讓專業(yè)程序員們告別了不少令人頭痛的苦差事?!?/p>
模型結(jié)構(gòu) 在GPT模型上加入額外token
Codex的模型結(jié)構(gòu)和GPT完全一樣,為了盡可能地利用GPT的文本表示,Codex使用了和GPT-3一樣的分詞器。但因?yàn)榇a中詞的分布和自然語言中詞的分布有很大區(qū)別,GPT-3的分詞器在表示代碼時可能不是非常有效。Codex論文顯示在GPT-3的分詞器中加入了額外的一些token來表示不同長度的空格,這樣在表示代碼時可以少使用30%的token。
推理時,使用核采樣不斷采樣Codex生成的token,直到碰見以下字符中的任何一個:"nclass","ndef","n#","nif",'nprint'。這樣可以大大減小模型第一和最后一層的參數(shù)量。實(shí)驗(yàn)證明Codex可以通過增加模型規(guī)模持續(xù)精進(jìn)。如下圖所示:
數(shù)據(jù)集 用于微調(diào)與評測
·Fine-Tuning數(shù)據(jù)集
首先是用來做Fine-Tuning的code數(shù)據(jù)集。在2020年5月,Codex從Github的54,000,000個公開代碼倉上收集了數(shù)據(jù),包括179 GB大小在1 MB以下的獨(dú)一無二的python文件,在經(jīng)過過濾后,最終的數(shù)據(jù)集大小為159GB。
·評測數(shù)據(jù)集
Codex將生成代碼的功能正確性作為評測指標(biāo),關(guān)注從docstrings生成python函數(shù)的任務(wù),并通過unit tests的方法來評測生成代碼的正確性。評測指標(biāo)采用的是pass k。評測數(shù)據(jù)集包含HumanEval和APPS兩個數(shù)據(jù)集。
HumanEval構(gòu)建了一個包括164個人工手寫的編程問題的數(shù)據(jù)集,其中每個編程問題包括函數(shù)頭、docstrings、函數(shù)體和幾個unit tests。HumanEval中的編程問題可以用來評估語言理解能力、推理能力、算法能力和簡單的數(shù)學(xué)能力,該數(shù)據(jù)集已經(jīng)開源。人工手寫是非常重要的:因?yàn)槿绻苯訌木W(wǎng)上找,比如說從leetcode上去扒,很有可能導(dǎo)致數(shù)據(jù)穿越。
Codex、GPT-Neo、GPT-J和TabNine在HumanEval上的實(shí)驗(yàn)結(jié)果對比如下圖所示,可以發(fā)現(xiàn)Codex-300M的效果優(yōu)于GPT-J 6B。
02 Azure Codex模型家族
Codex擅長Python,精通十多種語言,包括c#、JavaScript、Go、Perl、PHP、Ruby、Swift、TypeScript、SQL和Shell。Codex的模型包含:code-davinci-002、code-cushman-001(按能力大小排列)。
·Davinci
與GPT-3類似,Davinci是最強(qiáng)大的Codex模型,可以執(zhí)行其他模型能夠執(zhí)行的任何任務(wù),而需要更少的指令。對于需要深入理解內(nèi)容的應(yīng)用程序,Davinci可以產(chǎn)生最好的結(jié)果。更強(qiáng)大的功能需要更多的計(jì)算資源,因此Davinci的成本更高,速度也不如其它模型。
·Cushman
很強(qiáng)大,同時速度很快。當(dāng)談到分析復(fù)雜任務(wù)時,Davinci更強(qiáng),而Cushman是許多代碼生成任務(wù)的能干模型。Cushman通常也比Davinci跑得更快、更便宜。
上圖為Azure Codex模型概要
1該模型僅可根據(jù)要求進(jìn)行微調(diào)。目前我們不接受微調(diào)模型的新請求。
2由于需求量大,美國東部目前無法為新客戶提供微調(diào)服務(wù)。請使用美國中南部地區(qū)進(jìn)行培訓(xùn)。
03
Codex應(yīng)用場景示例
Codex模型主要應(yīng)用在IT科技部門的代碼研發(fā)流程自動化上。
·編寫程序
比如開發(fā)小游戲,準(zhǔn)確率高達(dá)72%!Codex不僅能夠收到指令后自行編程,還能夠開發(fā)小游戲。
·輔助編程
微軟、OpenAI、GitHub聯(lián)合推出了自動代碼生成AI Copilot,Copilot能夠在用戶輸入過程中隨時提供補(bǔ)全代碼行內(nèi)容的建議。