引言
對于NL2Code任務(wù)相信大家都不陌生。它主要目的就是將自然語言轉(zhuǎn)換成可執(zhí)行代碼來提高開發(fā)人員的工作效率,終極目標就是干翻所有程序員,最近,隨著大模型的出現(xiàn),距離這一天又稍稍進了一步?;谠摫尘埃窒碇锌圃汉臀④泚喼扪芯吭涸?a target="_blank">ACL2023國際頂會上一篇文章:他們調(diào)研了NL2Code領(lǐng)域中的「27個大型語言模型以及相關(guān)評價指標」,分析了「LLMs的成功在于模型參數(shù)、數(shù)據(jù)質(zhì)量和專家調(diào)優(yōu)」,并指出了「NL2Code領(lǐng)域研究的5個機遇挑戰(zhàn)」,最后作者建立了一個分享網(wǎng)站來跟蹤LLMs在NL2Code任務(wù)上的最新進展。https://nl2code.github.io
背景介紹
新手程序員,甚至是那些沒有任何編程經(jīng)驗的程序員,是否有可能僅僅通過用自然語言描述他們的需求來創(chuàng)建軟件?實現(xiàn)這一設(shè)想將對我們的生活、教育、經(jīng)濟和勞動力市場產(chǎn)生前所未有的影響。自然語言-代碼(NL2Code)因其廣闊的應用場景,是一項重要的研究任務(wù),在學術(shù)界和工業(yè)界都引起了廣泛的興趣。
關(guān)于NL2Code的發(fā)展,其實和自然語言理解的發(fā)展類似,一開始,基本都是基于專家規(guī)則進行算法設(shè)計,但是此類方法需要對不同編程語言進行設(shè)計,泛化性差;隨著技術(shù)發(fā)展,人們逐步開始使用靜態(tài)語言模型,并使用向量空間來描述文字,此類方法在初期一般向量空間比較稀疏,不能建立長期的依賴關(guān)系;再后來,就用到了我們比較熟悉的神經(jīng)網(wǎng)絡(luò),例如CNN、RNN、LSTM,此類方法通過標記數(shù)據(jù)進行訓練來構(gòu)建自然語言(NL)和代碼(Code)之間的關(guān)系,但實際效果對NL2Code任務(wù)的能力有限;現(xiàn)在,在ChatGPT風靡全球的背景下,越來越多的大型語言模型(LLMs)如雨后春筍一樣出現(xiàn),通過語言指令,它們可以在零樣本狀況下生成代碼,并在NL2Code任務(wù)上中取到了驚人的成績。具有標志性的一個LLM模型就是Codex,它擁有120億個參數(shù),在Python編程任務(wù)上測試,可解決72.31%的問題,并且該模型已經(jīng)商用可在實踐中提高開發(fā)人員的工作效率。
NL2Code任務(wù)與27個LLMs
對于NL2Code任務(wù),其主要目的是基于給定自然語言問題描述生成所需要的代碼。以下是一個關(guān)于Python編程問題的示例。其中灰色塊部分表示問題描述,綠色塊部分表示模型生成代碼,黃色塊部分表示測試樣例。
針對NL2Code任務(wù)對27個具有代表性的LLMs進行了全面調(diào)研,下表總結(jié)了每個模型的詳細信息,其中主要包括:模型架構(gòu)、模型大小、模型層數(shù)(L)、注意力頭數(shù)量(A)、隱藏維度(H)、模型參數(shù)是否開放(P)等五個方面。
為了更好地可視化,下圖按時間順序展示了這些模型,繪制了最大的模型大小。觀察到的一個趨勢是,隨著研究領(lǐng)域的發(fā)展,這些大型語言模型的規(guī)模也在不斷擴大。此外,只有解碼器的架構(gòu)更適合于規(guī)模較大的預訓練模型。
27個LLMs評估
上面總結(jié)了NL2Code現(xiàn)有的大型語言模型(LLMs),但是這些模型在架構(gòu)、模型規(guī)模等方面各不相同,無法進行統(tǒng)一的評估。為此,作者在HumanEval基準上進行了Zero-shot統(tǒng)一評估,其中HumanEval基準由164個手寫的Python編程問題組成,對于每個編程問題都提供了測試用例,以評估生成代碼正確性。使用pass@k作為評估指標,即通過k次嘗試可以正確回答的問題的比例。下表顯示根據(jù)模型大小進行分組,在該測試集上的測試結(jié)果。
從上表可以看出,這些LLM在該數(shù)據(jù)集上的性能差異很大,盡管模型參數(shù)相似但效果差異也是很大??梢园l(fā)現(xiàn)Codex 在各種尺寸上都處于領(lǐng)先地位。為什么會存在這個問題呢?影響模型效果的關(guān)鍵因素是啥呢?作者經(jīng)過分析給出的結(jié)論有:模型大小、數(shù)據(jù)質(zhì)量、專家調(diào)優(yōu)。
模型大小
根據(jù)前面的整理用于NL2Code的LLMs時間發(fā)展圖可以發(fā)現(xiàn),只要模型參數(shù)越多性能就越好。為了進一步說明模型參數(shù)大小和模型效果之間的關(guān)系,作者整理了10個比較有代表性的模型,在HumanEval基準上的pass@1結(jié)果,如下圖所示:
根據(jù)上圖,很明顯的可以「發(fā)現(xiàn)較大的模型通常會產(chǎn)生更好的結(jié)果」。此外,「當前模型無論大小,仍然可以通過進一步增加模型參數(shù)來實現(xiàn)性能的提升」。
數(shù)據(jù)質(zhì)量
隨著LLMs模型參數(shù)的增加,其訓練數(shù)據(jù)規(guī)模也在不斷的增加。這在數(shù)據(jù)選擇和預處理方面也有更高的要求。早期的模型,例如CodeSearchNet、CoST、XLCoST等都是基于人工標注數(shù)據(jù)對進行訓練(耗時耗力);GPT系列模型(GPT-3 、GPT-Neo、GPT-J )開始在大規(guī)模無監(jiān)督數(shù)據(jù)集上進行訓練,但是由于代碼數(shù)據(jù)限制,并沒有顯示出很強的代碼生成能力。由于LLMs模型的出現(xiàn),它們可以在更大規(guī)模的未標記代碼數(shù)據(jù)集上進行訓練,最終模型效果驚人。
在驚嘆于LLMs效果的同時,也要知道LLMs在訓練之前通常會對數(shù)據(jù)進行預處理。為此作者調(diào)研了Codex、AlphaCode、CodeGen、InCoder和PyCodeGPT等5個強大模型的數(shù)據(jù)預處理方法。發(fā)現(xiàn)它們具有幾個共同的特點:一是刪除可能自動生成或未完成的代碼文件,二是使用特定的規(guī)則來過濾不常見的代碼文件?!缚傊?,這些預處理策略的目標是實現(xiàn)一個不重復的、完整的、正確的、干凈的和通用的代碼語料庫」。
專家調(diào)優(yōu)
訓練一個優(yōu)秀的模型需要認真考慮模型訓練階段的各個參數(shù)。通過對27個LLMs模型的研究發(fā)現(xiàn),它們都有一些共同的設(shè)置,比如都應用了Adam相關(guān)優(yōu)化器并在初始化階段相差不大。除此之外,還有需要調(diào)節(jié)的超參數(shù),如lr、batch、窗口大小、預熱、梯度累積和temperature。對于學習率來說,隨著模型的增大,學習率會逐步變小。如下圖所示:
對于temperature,這里對比了兩個模型在HumanEval任務(wù)上使用不同temperature后模型的性能。結(jié)果發(fā)現(xiàn),更高的temperature產(chǎn)生更低的pass@1和更高的pass@100,這表明更高的temperature使LLM產(chǎn)生更多樣化的預測,反之亦然。如下圖所示:
此外,有研究表明窗口大小也是一個關(guān)鍵因素,具有大窗口的小模型會有時優(yōu)于具有小窗口的大模型。此外,強大的LLMs通常主要使用兩種技術(shù)在代碼語料庫上訓練新的標記器:字節(jié)級字節(jié)對編碼和sentencepece 。新的標記器可以更有效和準確地將代碼內(nèi)容拆分為Tokens。這些經(jīng)過驗證的調(diào)優(yōu)技術(shù)將為培訓更強大的llm提供有價值的參考。
評估基準指標
「對NL2Code任務(wù)的評估,高質(zhì)量的基準和可靠的度量是基礎(chǔ)和必要的」。作者總結(jié)了17個NL2Code基準測試,每個基準測試在大小、語言、復雜性和場景方面都有自己的特點,如下表所示。
但大多數(shù)基準測試只包含有限數(shù)量的實例。例如,HumanEval和MBPP分別有164和974個實例。這是因為這些基準通常是手寫的以防數(shù)據(jù)泄露?!冈诖笮驼Z言模型時代,在創(chuàng)建新基準時避免數(shù)據(jù)泄漏至關(guān)重要」。此外,大多數(shù)當前的基準測試都有英文的問題描述和Python的代碼解決方案。最近,已經(jīng)提出了幾個多語言基準,例如涵蓋「多種編程語言的MBXP,HumanEvalX和MultiPL ,以及涵蓋多種自然語言的ODEX」。多語言基準測試的詳細信息如下表所示:
「手動評估生成的代碼是不切實際的,這就需要自動度量」。上述基準均提供了基于執(zhí)行的評估的測試用例,其中指標如 pass@k、n@k、測試用例平均值和執(zhí)行精度。但是,「這種方法對測試用例的質(zhì)量有嚴格的要求,并且只能評估可執(zhí)行代碼。對于不可執(zhí)行的代碼」,使用了 BLEU 、ROUGE 和 CodeBLEU等指標,無法準確評估代碼的正確性。到目前為止,「在設(shè)計指標來評估代碼的各個方面(例如漏洞、可維護性、清晰度、執(zhí)行復雜性和穩(wěn)定性)方面存在許多開放性挑戰(zhàn)」。
NL2Code挑戰(zhàn)與機遇
大預言模型在NL2Code的應用對學術(shù)界和工業(yè)界都有相當大的影響。雖然取得了驚人的進展,但仍然有很多挑戰(zhàn)需求解決,這也為研究人員提供了充足的機會。下面作者總結(jié)了 NL2Code任務(wù)的五個挑戰(zhàn)和機會。
「1、理解能力」:人類能夠理解不同抽象層次的各種描述, 相比之下,當前的 LLM 往往對給定的上下文敏感,這可能會導致性能下降。作者認為探索LLM的理解能力是一個重要的研究方向。
「2、判斷能力」:人類能夠判定一個編程問題是否被解決。當前模型不論輸入什么都會給出答案,而且該答案正確與否都不能確定,這在實際應用中會存在一定的問題。目前為了提高LLM的判斷能力,需要根據(jù)用戶反饋采用強化學習的方式進行調(diào)優(yōu)。作者認為探索LLM自我判斷能力,也是一個比較重要的研究方向。
「3、解釋能力」:人類開發(fā)人員能夠解釋他們編寫的代碼,這對教育的和軟件維護至關(guān)重要。最近的研究表明,LLM 具有自動生成代碼解釋的潛力。作者認為針對該能力也需要進一步的研究和探索,以充分發(fā)揮LLM在這方面的潛力。
「4、自適應能力」:當前的大型語言模型與人類之間的一個根本區(qū)別是它們適應新知識和更新知識的能力。人類開發(fā)人員能夠根據(jù)文檔資料實現(xiàn)API的快速開發(fā),而LLM需要大量的知識和訓練。作者認為如何提高LLM快速自學習能力也是一個比較大挑戰(zhàn)。
「5、多任務(wù)處理能力」:LLM在多任務(wù)處理方面與人類存在較大差異。人類可以在任務(wù)之間無縫切換,而LLM可能需要復雜的提示工程。為此作者任務(wù)提升LLM多任務(wù)能力同樣是一個重要的研究方向。
審核編輯 :李倩
-
語言模型
+關(guān)注
關(guān)注
0文章
532瀏覽量
10300 -
python
+關(guān)注
關(guān)注
56文章
4801瀏覽量
84852 -
自然語言
+關(guān)注
關(guān)注
1文章
288瀏覽量
13367
原文標題:ACL2023 | 中科院 針對NL2Code任務(wù),調(diào)研了27個大模型,并指出5個重要挑戰(zhàn)
文章出處:【微信號:zenRRan,微信公眾號:深度學習自然語言處理】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論