深度解析大模型代碼能力現(xiàn)狀
隨著人工智能技術(shù)的不斷發(fā)展,大模型在各個(gè)領(lǐng)域都有了廣泛的應(yīng)用。在軟件工程領(lǐng)域,大模型也被用于輔助代碼生成。大模型代碼生成工具可以從自然語言提示或部分代碼輸入中生成代碼,極大地提高了軟件開發(fā)的效率和質(zhì)量。
目前,已經(jīng)有許多研究人員和機(jī)構(gòu)開展了大模型代碼生成能力的評(píng)估研究。這些評(píng)估研究為了解大模型代碼生成工具的現(xiàn)狀和發(fā)展趨勢(shì)提供了重要參考。
本文中,將介紹大模型代碼生成最新排行,以及能力評(píng)估的常用評(píng)估指標(biāo)和數(shù)據(jù)集。
01.大模型代碼生成能力的評(píng)估指標(biāo)
"Papers with Code" 是一個(gè)知名的研究論文和代碼共享平臺(tái),為學(xué)者們提供了一個(gè)展示和對(duì)比研究成果的平臺(tái)。其中,HumanEval Benchmark (Code Generation) 部分列出了代碼生成領(lǐng)域的最新模型排名。為了深入理解這些排名,我們需要了解其背后的評(píng)估指標(biāo)。
1.數(shù)據(jù)集介紹
HumanEval是由OpenAI開發(fā)的廣泛使用的代碼生成基準(zhǔn)測(cè)試。它涵蓋了從簡(jiǎn)單的字符串操作到復(fù)雜的算法設(shè)計(jì)的多種編程任務(wù)。
如上圖所示,每個(gè)任務(wù)都包括一個(gè)函數(shù)簽名、注釋、主體和幾個(gè)單元測(cè)試。為了確保評(píng)估的公正性,這些任務(wù)都是手工編寫的。在模型訓(xùn)練過程中,模型沒有接觸過這些具體任務(wù)。模型接收的提示以白色背景顯示,而模型成功生成的代碼部分以黃色背景顯示。這樣的設(shè)計(jì)旨在為評(píng)估提供一個(gè)公正的基準(zhǔn),確保模型在實(shí)際應(yīng)用中的性能與在數(shù)據(jù)集上的表現(xiàn)是一致的。
2.數(shù)據(jù)集特點(diǎn)
1、多樣性:HumanEval涵蓋了從基礎(chǔ)到高級(jí)的各種編程任務(wù),確保了模型在各種情境下都能得到充分的評(píng)估。
2、實(shí)際應(yīng)用導(dǎo)向:該基準(zhǔn)測(cè)試的設(shè)計(jì)考慮了實(shí)際的編程需求,從而確保了模型的實(shí)用性和實(shí)際應(yīng)用價(jià)值。3、動(dòng)態(tài)更新:隨著編程領(lǐng)域的不斷進(jìn)步,HumanEval也會(huì)定期更新,加入新的編程任務(wù)和挑戰(zhàn),確保其始終保持與時(shí)俱進(jìn)。
3.評(píng)估方法
1、直接生成:評(píng)估模型在沒有任何先驗(yàn)知識(shí)或提示的情況下,直接生成代碼的能力。2、多次嘗試:評(píng)估模型在多次嘗試和修正后的代碼生成性能。3、代碼質(zhì)量:除了代碼的正確性,還會(huì)評(píng)估生成代碼的效率、可讀性和維護(hù)性。4、算法設(shè)計(jì):評(píng)估模型在設(shè)計(jì)和實(shí)現(xiàn)復(fù)雜算法時(shí)的性能。5、數(shù)據(jù)結(jié)構(gòu)操作:測(cè)試模型在操作如數(shù)組、鏈表、樹等常見數(shù)據(jù)結(jié)構(gòu)時(shí)的能力。6、實(shí)際編程場(chǎng)景模擬:模擬真實(shí)的編程任務(wù),如數(shù)據(jù)庫操作、網(wǎng)絡(luò)編程等,來評(píng)估模型的實(shí)際應(yīng)用能力。
4.評(píng)估指標(biāo)
其中,Pass@k是一個(gè)核心指標(biāo)。它衡量的是模型在生成k個(gè)樣本后至少有一個(gè)樣本是正確的概率。例如,Pass@1表示模型第一次嘗試生成代碼時(shí)的正確率;Pass@10表示模型在前10次嘗試中至少有一次生成了正確的代碼;而Pass@100則表示在前100次嘗試中,模型至少有一次生成了正確的代碼。
02.大模型代碼生成能力的最新排行
基于上述數(shù)據(jù)集,指標(biāo)與實(shí)驗(yàn)方法,下方列出了代碼生成任務(wù)的最新模型排名:
1.第一名介紹圖中根據(jù)Pass@1分?jǐn)?shù)從高到低排序,GPT系列位居前列:
Reflexion (GPT-4): 目前在HumanEval上的最佳模型,其Pass@1得分為91.0。其背后的研究成果為"Reflexion: Language Agents with Verbal Reinforcement Learning"。這篇于2023年發(fā)布的論文探討了如何通過語言反饋來強(qiáng)化語言代理,而不是通過更新權(quán)重。具體來說,Reflexion代理的工作方式是,當(dāng)完成一個(gè)任務(wù)并接收到反饋后,它會(huì)生成一段關(guān)于該反饋的描述或分析。這段反思文本隨后被存儲(chǔ)在一個(gè)特定的“情景記憶緩沖區(qū)”中。當(dāng)代理在后續(xù)的任務(wù)中遇到類似的情境時(shí),它會(huì)回顧這個(gè)緩沖區(qū)中的反思文本,從而幫助其做出更好的決策。這種獨(dú)特的方法使Reflexion在多種任務(wù)上獲得了顯著的改進(jìn),例如,在HumanEval編碼基準(zhǔn)測(cè)試上達(dá)到了91%的pass@1準(zhǔn)確率,超過了之前的最新技術(shù)GPT-4的80%。
2.第二名介紹
GPT-4: 排名第二,其Pass@1得分為86.6。相關(guān)論文為"OctoPack: Instruction Tuning Code Large Language Models",發(fā)布于2023年,文中探討了如何通過指令調(diào)優(yōu)來提高大型語言模型(LLMs)在自然語言任務(wù)上的性能。研究者采用了一種獨(dú)特的方法,利用Git提交(commits)的自然結(jié)構(gòu),將代碼更改與人類指令配對(duì),進(jìn)行指令調(diào)優(yōu)。
為此,他們編譯了名為"CommitPack"的數(shù)據(jù)集,包含了4TB的Git提交數(shù)據(jù),涵蓋了350種編程語言。他們將CommitPack與其他自然和合成的代碼指令(如xP3x、Self-Instruct、OASST)進(jìn)行了基準(zhǔn)測(cè)試,并在16B參數(shù)的StarCoder模型上取得了卓越的性能。在HumanEval Python基準(zhǔn)測(cè)試上,該模型達(dá)到了46.2%的pass@1準(zhǔn)確率。
此外,研究者還引入了"HumanEvalPack",將HumanEval基準(zhǔn)測(cè)試擴(kuò)展到了3種編碼任務(wù)(代碼修復(fù)、代碼解釋、代碼合成)和6種語言(Python、JavaScript、Java、Go、C++、Rust)。他們的模型,OctoCoder和OctoGeeX,在HumanEvalPack中的所有模型中表現(xiàn)最佳,證明了CommitPack在泛化到更廣泛的語言集和自然編碼任務(wù)上的優(yōu)勢(shì)。
3.第三名介紹
Parsel (GPT-4 + CodeT): 排名第三,其Pass@1得分為85.1,發(fā)布于2022年。相關(guān)論文為:"Parsel: Algorithmic Reasoning with Language Models by Composing Decompositions"
文中詳細(xì)探討了"Parsel",一個(gè)專為增強(qiáng)大型語言模型(LLMs)在代碼生成和層次化多步推理任務(wù)中的能力而設(shè)計(jì)的框架。為了更好地生成復(fù)雜的程序代碼,Parsel采用了一種獨(dú)特的方法:它首先自動(dòng)將算法任務(wù)分解為層次化的自然語言函數(shù)描述,然后利用測(cè)試來尋找可能的函數(shù)實(shí)現(xiàn)方式。這種方法不僅適用于代碼生成,還可以廣泛應(yīng)用于其他需要層次化推理的領(lǐng)域,如機(jī)器人規(guī)劃。實(shí)驗(yàn)結(jié)果證明,Parsel在代碼生成任務(wù)上,特別是在解決高難度的競(jìng)賽級(jí)問題時(shí),相較于傳統(tǒng)的直接生成方法,展現(xiàn)出了更為出色的性能。
4.第八名介紹
值得關(guān)注的是,中國(guó)的模型在這個(gè)排行榜上也有顯著的表現(xiàn)。
例如,PanGu-Coder2 15B,其Pass@1得分為61.64,而Pass@100得分高達(dá)91.76分。排名第八,緊隨GPT系列,相關(guān)論文為” PanGu-Coder2: Boosting Large Language Models for Code with Ranking Feedback”:
文中探討了關(guān)于OpenAI發(fā)布了Codex之后,許多其他的代碼生成模型如AlphaCode、PaLM-Coder和PanGu-Coder相繼發(fā)布。但是,大多數(shù)代碼LLM在性能上仍然落后于最新的商業(yè)模型,如OpenAI的GPT-3.5和GPT-4。
提出了RRTF框架:為了解決現(xiàn)有基于強(qiáng)化學(xué)習(xí)的方法的問題,并進(jìn)一步挖掘Code LLM的潛力,作者提出了RRTF框架。與之前的工作如CodeRL和RLTF不同,RRTF采用了與InstructGPT/ChatGPT相似的RLHF(Reinforcement Learning from Human Feedback)的思想,但采用了一種更簡(jiǎn)單且高效的訓(xùn)練方法,使用排名響應(yīng)作為反饋而不是獎(jiǎng)勵(lì)模型的絕對(duì)值。
通過廣泛的評(píng)估,PanGu-Coder2在多個(gè)基準(zhǔn)測(cè)試上都取得了最佳性能,盡管與如GPT系列的通用模型仍有一定差距,但是超越了之前所有發(fā)布的Code LLMs。
5.第29名介紹
清華大學(xué)開源的CodeGeeX-13B,其Pass@1得分為22.9分,排名29
相關(guān)論文為:”CodeGeeX: A Pre-Trained Model for Code Generation with Multilingual Evaluations on HumanEval-X”,介紹了CodeGeeX,用于代碼生成的多語言模型,擁有130億參數(shù)。CodeGeeX在2022年6月之前的23種編程語言上預(yù)訓(xùn)練了8500億個(gè)TOKENS。廣泛的實(shí)驗(yàn)表明,CodeGeeX在HumanEval-X上的代碼生成和翻譯任務(wù)上均超越了類似規(guī)模的多語言代碼模型。此外,清華團(tuán)隊(duì)還在Visual Studio Code、JetBrains和Cloud Studio上構(gòu)建了基于CodeGeeX的擴(kuò)展,每周為數(shù)萬活躍用戶生成47億TOKENS。用戶研究顯示,83.4%的用戶認(rèn)為CodeGeeX可以幫助提高編碼效率。并且開源了其代碼、模型權(quán)重、API、擴(kuò)展和HumanEval-X。
而后面緊跟的CodeGeeX2-6B,Pass@1得分為35.9分,能力大幅加強(qiáng),提升了12名
按照Pass@1分?jǐn)?shù)(35.9)排序,位列17名左右,在開源CODE LLM中有相當(dāng)?shù)母?jìng)爭(zhēng)力。
03.總結(jié)
總的來說,大型語言模型在代碼生成領(lǐng)域的進(jìn)展是顯而易見的,各大研究團(tuán)隊(duì)都在不斷推動(dòng)技術(shù)的邊界,努力提高模型的性能和實(shí)用性。特別是中國(guó)的模型,如PanGu-Coder2和CodeGeeX,不僅在排行榜上取得了驕人的成績(jī),更展現(xiàn)了中國(guó)在人工智能研究領(lǐng)域的實(shí)力和潛力。隨著技術(shù)的不斷進(jìn)步,我們有理由相信,未來的語言模型將為編程和軟件開發(fā)帶來更多的便利和創(chuàng)新。
參照文獻(xiàn)
1、Large Language Model Evaluation in 2023: 5 Methods (aimultiple.com)https://research.aimultiple.com/large-language-model-evaluation/
2、Evaluating the Code Quality of AI-Assisted Code Generation Tools: An Empirical Study on GitHub Copilot, Amazon CodeWhisperer, and ChatGPT https://arxiv.org/pdf/2304.10778.pdf
3、HumanEval Benchmark (Code Generation) | Papers With Codehttps://paperswithcode.com/sota/code-generation-on-humaneval
4、Evaluating Large Language Models Trained on Code https://arxiv.org/pdf/2107.03374.pdf
5、THUDM/CodeGeeX2: CodeGeeX2: A More Powerful Multilingual Code Generation Model (github.com)https://github.com/THUDM/CodeGeeX2
本文作者:海云安Secidea, 轉(zhuǎn)載請(qǐng)注明來自FreeBuf.COM