国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

從HumanEval到CoderEval: 你的代碼生成模型真的work嗎?

這篇具有很好參考價(jià)值的文章主要介紹了從HumanEval到CoderEval: 你的代碼生成模型真的work嗎?。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

本文分享自華為云社區(qū)《從HumanEval到CoderEval: 你的代碼生成模型真的work嗎?》,作者:華為云軟件分析Lab 。

本文主要介紹了一個(gè)名為CoderEval的代碼生成大模型評估基準(zhǔn),并對三個(gè)代碼生成模型(CodeGen、PanGu-Coder和ChatGPT)在該基準(zhǔn)上的表現(xiàn)進(jìn)行了評估和比較。研究人員從真實(shí)的開源項(xiàng)目中的選取了代碼生成任務(wù)來構(gòu)建CoderEval,并根據(jù)對外部依賴的程度為標(biāo)準(zhǔn)將這些任務(wù)分為6個(gè)等級、根據(jù)生成的目標(biāo)分為3類生成任務(wù),以更多維地評估不同大模型在不同上下文場景中的生成效果。實(shí)驗(yàn)結(jié)果表明,這三個(gè)模型在生成自包含函數(shù)方面的效果明顯優(yōu)于其他任務(wù),但實(shí)際項(xiàng)目中的函數(shù)大部分依賴不同程度的上下文信息,因此提高模型對上下文信息的考慮和利用能力對于代碼生成技術(shù)的實(shí)際可用性非常重要。該工作的論文已經(jīng)發(fā)表在軟件工程頂會(huì)ICSE 2024上。

一. 從HumanEval到CoderEval

就像ImageNet之于圖像識(shí)別,Defects4J之于缺陷檢測,在以工具和方法為主要貢獻(xiàn)的研究領(lǐng)域中,一個(gè)被廣泛接受和采用的評估數(shù)據(jù)集及其配套的基準(zhǔn)指標(biāo),對該領(lǐng)域的研究和發(fā)展至關(guān)重要。一方面,評估方式作為度量尺,可以在同一維度上起到橫向?qū)Ρ雀黝惙椒ǖ乃?,并估?jì)距離成熟實(shí)用的差距;另一方面,評估方式作為風(fēng)向標(biāo),直接指導(dǎo)著各種方法共同的優(yōu)化和迭代目標(biāo),決定了研究者們前進(jìn)的方向。

在代碼生成領(lǐng)域,當(dāng)前最廣泛被使用的是OpenAI在Codex論文中開源的HumanEval,該基準(zhǔn)測試集由164道由OpenAI工程師手動(dòng)編寫的編程任務(wù)組成,以一定程度上確保與訓(xùn)練集的不重疊性。初版的HumanEval僅支持Python語言,每個(gè)編程任務(wù)包括了任務(wù)描述、參考代碼、若干測試樣例等。近期有部分研究者將HumanEval擴(kuò)展到多種編程語言,例如:清華大學(xué)CodeGeex團(tuán)隊(duì)基于HumanEval開源了HumanEval-X,將HumanEval擴(kuò)展到C++、Java、JavaScript、Go等語言;于2022年8月19日發(fā)布在arXiv上發(fā)布的一篇論文提出了MultiPL-E,將HumanEval擴(kuò)展到了18種語言。

然而,HumanEval本身存在一些問題,這些問題使得它并不適合成為代碼生成任務(wù)的一個(gè)評估平臺(tái),特別是對于以實(shí)際開發(fā)為目標(biāo)的代碼生成研究和工具?;贖umanEval進(jìn)行擴(kuò)展的一類工作僅僅是將HumanEval中的任務(wù)描述、參考代碼、測試樣例以及執(zhí)行環(huán)境等翻譯或適配到了其他語言,實(shí)質(zhì)上并未解決HumanEval自身存在的一些問題。那么,這些問題有哪些呢?經(jīng)過對HumanEval中的任務(wù)和測試樣例、以及多個(gè)模型生成結(jié)果的人工檢視,我們主要?dú)w納出以下問題:

1. 領(lǐng)域單一,僅覆蓋了語言本身基礎(chǔ)的編程知識(shí),如數(shù)據(jù)結(jié)構(gòu)操作、簡單算法等;

2. 任務(wù)本身過于簡單,參考代碼均為自包含的單一函數(shù),并未考慮復(fù)雜類型、自定義類型、三方庫、跨過程調(diào)用等情況;

3. 測試不夠完備,容易產(chǎn)生誤判(根據(jù)AlphaCode論文的結(jié)論,HumanEval每任務(wù)平均有7.77個(gè)測試樣例,測試誤報(bào)率高達(dá)30%)。

根據(jù)我們對GitHub倉庫數(shù)據(jù)的統(tǒng)計(jì),HumanEval所對應(yīng)的自包含單一函數(shù)在Top 100的Python項(xiàng)目中只占11.2%,在Top 100的Java項(xiàng)目中只占21.3%,因此,HumanEval可能實(shí)際上無法準(zhǔn)確反映代碼生成模型在實(shí)際項(xiàng)目級開發(fā)中的表現(xiàn)。

針對HumanEval的限制和不足,我們提出了CoderEval,一個(gè)面向真實(shí)場景和實(shí)際用戶的代碼生成模型可用性評測系統(tǒng)。CoderEval在一定程度上解決了當(dāng)前被廣泛使用的評測基準(zhǔn)的問題,主要體現(xiàn)在以下幾點(diǎn):

1. 直接來源于真實(shí)的開源項(xiàng)目,覆蓋多個(gè)領(lǐng)域,從而可以全面評估代碼生成在不同領(lǐng)域中的表現(xiàn);

2. 考慮了復(fù)雜數(shù)據(jù)類型或項(xiàng)目代碼中開發(fā)者自定義的類型,支持面向?qū)ο筇匦院涂邕^程調(diào)用;

3. 具有更加完備的測試集,盡量保證覆蓋率和完備性,從而在一定程度上降低測試誤報(bào)率。

綜上所述,相比于HumanEval,CoderEval與實(shí)際開發(fā)場景中的生成任務(wù)更加對齊,在基于大模型的代碼生成工具逐步落地并商業(yè)化的背景下,可能更加真實(shí)地反映并比較不同模型在實(shí)際落地為工具之后的開發(fā)者體驗(yàn)。接下來,我們將簡要介紹CoderEval的組成部分、構(gòu)建過程以及使用方法。CoderEval論文目前已被ICSE2024接收(https://arxiv.org/abs/2302.00288?), CoderEval-GitHub目前已開源(https://github.com/CodeArtsSnap/CoderEval?)。

二. CoderEval:面向?qū)嶋H開發(fā)場景的代碼生成模型評估

CoderEval組成部分

整體而言,CoderEval主要由三部分組成:

1. 生成任務(wù):以函數(shù)/方法為基本單位的代碼生成任務(wù),包括任務(wù)描述(即自然語言注釋)、函數(shù)簽名、參考代碼(即原始代碼實(shí)現(xiàn))、所在文件所有上下文代碼、所在項(xiàng)目其他文件內(nèi)容等;

2. 測試代碼:針對某一編程任務(wù)的單元測試,一個(gè)編程任務(wù)可能對應(yīng)一到多個(gè)測試文件、一到多個(gè)測試方法,以及附加的測試數(shù)據(jù)(如操作文件的編程任務(wù)中的文件等);

3. 測試環(huán)境:由于CoderEval中的函數(shù)/方法允許使用自定義類型、調(diào)用語言標(biāo)準(zhǔn)庫或三方庫、調(diào)用項(xiàng)目中其他方法等,因此需要在配置好所在項(xiàng)目的環(huán)境中執(zhí)行。為此,CoderEval基于Docker構(gòu)建了沙箱測試環(huán)境,其中包含了所有被測項(xiàng)目及其依賴,并且附有單一入口的自動(dòng)化執(zhí)行程序。此測試環(huán)境預(yù)計(jì)將以線上服務(wù)的形式提供。

CoderEval構(gòu)建過程

圖1 | CoderEval的構(gòu)建過程

圖1展示了針對某一種編程語言(目標(biāo)語言)構(gòu)建CoderEval的一般性的過程,主要分為三個(gè)部分:

1. 目標(biāo)選取:從GitHub或CodeHub選擇目標(biāo)語言為主的項(xiàng)目中的高質(zhì)量目標(biāo)函數(shù)/方法,作為測試任務(wù)

2. 數(shù)據(jù)收集:針對每個(gè)候選測試任務(wù),分析和收集目標(biāo)函數(shù)/方法的元信息、自身信息、測試信息等

3. 環(huán)境構(gòu)建:準(zhǔn)備目標(biāo)項(xiàng)目和依賴,為測試代碼提供執(zhí)行環(huán)境,并通過執(zhí)行測試驗(yàn)證測試代碼和目標(biāo)代碼的正確性

作為第一個(gè)版本,CoderEval首先支持了兩大語言:

? CoderEval4Python:包含來自43個(gè)項(xiàng)目的230個(gè)生成任務(wù)

? CoderEval4Java:包含來自10個(gè)項(xiàng)目的230個(gè)生成任務(wù)

為了真實(shí)反映代碼生成模型在實(shí)際項(xiàng)目開發(fā)中的效果和價(jià)值,我們需要從真實(shí)、多元的開源項(xiàng)目中選取高質(zhì)量的生成任務(wù),并配備盡可能完善的測試。為此,我們首先爬取了GitHub上Python和Java項(xiàng)目的所有標(biāo)簽,根據(jù)最頻繁的14個(gè)標(biāo)簽和標(biāo)星數(shù)篩選出若干項(xiàng)目,然后抽取出項(xiàng)目中所有的測試代碼以及被測函數(shù)/方法,僅保留符合以下全部條件的部分:

? 并非以測試為目的的、deprecated的、接口形式的函數(shù)/方法

? 包含一段英文自然語言描述作為函數(shù)/方法級注釋

? 可以在測試環(huán)境中正確執(zhí)行并通過原始測試

經(jīng)過這些篩選保留下來的函數(shù)/方法,再經(jīng)過人工篩選和程序分析,構(gòu)成;了CoderEval中的代碼生成任務(wù),每個(gè)生成任務(wù)提供的信息有:

? 元信息(Meta):所在項(xiàng)目地址、文件路徑、行號范圍等

? 自身信息(Native):該函數(shù)/方法的原始注釋、簽名、代碼等

? 上下文信息(Context,可選):所在文件內(nèi)容、可訪問上下文信息、所使用上下文信息、運(yùn)行級別分類等

? 測試信息(Test):人工標(biāo)注的自然語言描述、在原始代碼上覆蓋率達(dá)100%的若干測試樣例等

CoderEval使用方法

CoderEval支持三類任務(wù):

1. 函數(shù)/方法塊級生成(Block Generation):根據(jù)注釋形式的任務(wù)描述和/或函數(shù)簽名,生成實(shí)現(xiàn)對應(yīng)功能的完整函數(shù)體

2. 代碼片段級生成(Snippet Generation):根據(jù)上下文代碼,生成整行代碼或整個(gè)代碼塊(如if/for/try-catch片段)

3. 代碼行級補(bǔ)全(Line Completion):根據(jù)一行代碼的前半部分,補(bǔ)全該行的后半部分代碼

CoderEval支持兩類指標(biāo):

1. 基于運(yùn)行的指標(biāo)(Comparison-based Metrics):與HumanEval一致,我們同樣采取了Pass@k作為測試指標(biāo),從而評估所生成代碼實(shí)際的運(yùn)行效果,允許模型生成不同版本的實(shí)現(xiàn)

2. 基于比較的指標(biāo)(Execution-based Metrics):同樣保留了CodeBLEU、Exact Match (EM)、Edit Similarity(ES)等指標(biāo),從而評估所生成代碼與參考代碼的差異

CoderEval支持更細(xì)粒度的評估:

1. 上下文感知能力評估:我們在研究中發(fā)現(xiàn),對于非自包含函數(shù)/方法,其代碼實(shí)現(xiàn)中的外部依賴信息對于其功能和行為非常關(guān)鍵。因此,模型的上下文感知能力(Context-awareness,即正確生成外部依賴信息的能力)是另一個(gè)重要指標(biāo)。CoderEval提供了生成任務(wù)所在項(xiàng)目以及文件內(nèi)容可作為輸入,原始代碼中實(shí)際用到的上下文信息作為期望輸出,因此,可以分析并計(jì)算生成代碼中上下文信息的準(zhǔn)確率以及召回率,作為上下文感知能力的評估指標(biāo)。

2. 分級評估:如圖1所示,依據(jù)所依賴的上下文信息,CoderEval進(jìn)一步將生成任務(wù)分成了6個(gè)級別(self_contained、slib_runnable、plib_runnable、class_runnable、project_runnable),代表所對應(yīng)代碼可執(zhí)行的環(huán)境(標(biāo)準(zhǔn)庫、第三方庫、當(dāng)前文件、當(dāng)前項(xiàng)目等)。CoderEval支持更細(xì)粒度地測試和分析模型在每個(gè)級別上的生成能力,從而可以全面地分析當(dāng)前模型的不足和待優(yōu)化的方向(如引入課程學(xué)習(xí)、針對性微調(diào)、上下文可感知度的針對性提升等)。

圖2 | CoderEval中按依賴級別的數(shù)據(jù)分布

3. Prompt評估:CoderEval同時(shí)提供了原始注釋和開發(fā)者另外標(biāo)注的代碼功能描述,從而研究模型記憶效應(yīng)、Prompt形式、Prompt質(zhì)量對不同模型的影響。

對于同一個(gè)模型,兩類指標(biāo)在三類任務(wù)上都可以同時(shí)計(jì)算,結(jié)果可以互為參考,從而綜合多個(gè)角度得出更有價(jià)值的結(jié)論。例如,對于同一個(gè)模型,若Pass@k指標(biāo)較低但CodeBLEU指標(biāo)較高,說明模型生成了較為接近正確代碼的結(jié)果,但在部分關(guān)鍵細(xì)節(jié)代碼上出現(xiàn)了錯(cuò)誤,此時(shí)可以考慮通過基于軟件分析的程序修復(fù)技術(shù)嘗試進(jìn)行修復(fù);若出現(xiàn)相反的情況,即CodeBLEU等指標(biāo)較低但Pass@k較高,則說明模型并非依靠記憶復(fù)制了原代碼,而是生成了不同但正確的其他解決方案。通過多個(gè)維度的分析,CoderEval可以為研究者針對性優(yōu)化模型表現(xiàn)提供更好的方向性參考。

由于CoderEval源于實(shí)際的開源項(xiàng)目,并且我們無法精確獲得或控制各個(gè)模型訓(xùn)練數(shù)據(jù),因此可能無法避免存在因模型的記憶效應(yīng)和復(fù)制機(jī)制產(chǎn)生的誤差。CoderEval緩解此類誤差的主要措施包括:

1. 為所有任務(wù)補(bǔ)充了人工改寫的注釋替代原注釋,該部分可確保不存在于訓(xùn)練集中。為此,我們同時(shí)會(huì)測試

2. 可增大采樣次數(shù)并綜合基于運(yùn)行的指標(biāo)和基于比較的指標(biāo)進(jìn)行分析,從而分析模型是否能實(shí)現(xiàn)與原代碼不同、但又可通過測試的方案。

3. 可同時(shí)得出Pass@K與ES指標(biāo),互相比對這兩項(xiàng)指標(biāo),若Pass@K和ES均高,說明模型可能存在較多復(fù)制行為;若Pass@K高而ES較低,說明模型生成了不同但正確的其他實(shí)現(xiàn)方式;若Pass@K低而ES高,則說明模型已經(jīng)接近正確結(jié)果,但在關(guān)鍵的代碼部分有細(xì)節(jié)錯(cuò)誤。

CoderEval實(shí)測結(jié)果

我們測試了工業(yè)界為主提出的、具有代表性的三個(gè)模型在CoderEval上的表現(xiàn),被測模型包括:

1. CodeGen(Salesforce):采用GPT-2架構(gòu),在自然語言上先進(jìn)行預(yù)訓(xùn)練,再在多種編程語言混合語料上繼續(xù)訓(xùn)練,最后在單一編程語言上進(jìn)行微調(diào)

2. PanGuCoder(Huawei):基于PanGu-alpha架構(gòu),采用<自然語言描述, 程序語言代碼>對的形式和多階段預(yù)訓(xùn)練方法,專注于Text2Code任務(wù),對中文支持較好

3. ChatGPT(OpenAI):基于GPT-3.5系列模型使用人類反饋進(jìn)行微調(diào),可以根據(jù)用戶的指令或問題來生成代碼。

部分實(shí)驗(yàn)結(jié)果如下:

1. 如表1所示,在CoderEval和HumanEval上,ChatGPT的效果都大幅超出其他兩個(gè)模型,原因可能來自于更大的模型規(guī)模、更充分的訓(xùn)練度、更優(yōu)的超參數(shù)等方面。

表1 | 三個(gè)模型在CoderEval上和HumanEval上的總體效果對比

2. 如表1所示,在HumanEval上,ChatGPT的效果更是大幅超過其他模型,幅度要遠(yuǎn)大于在CoderEval上三個(gè)模型的差距??紤]到HumanEval的局限性,這一結(jié)果從側(cè)面表明HumanEval可能已經(jīng)不適合作為單一的代碼生成Benchmark;

3. 如圖2所示,在CoderEval上,三個(gè)模型正確生成的任務(wù)存在較大的交集(Python:32,Java:56),說明三個(gè)模型在解決部分任務(wù)上有共性能力;同時(shí),對于僅有一個(gè)模型能正確生成、而其他兩個(gè)模型未正確生成的任務(wù)而言,ChatGPT在Python和Java上都是最多的(Python:18,Java:27),說明ChatGPT在解決這部分任務(wù)上的能力具有顯著優(yōu)勢;最后,三個(gè)模型一共解決的任務(wù)數(shù)仍僅占CoderEval所有任務(wù)數(shù)的約40%(Python:91/230)和59%(Java:136/230),說明三個(gè)模型的能力具有一定的互補(bǔ)性,且各自仍有較大提升空間。

圖3 | 三個(gè)模型在CoderEval上和HumanEval上正確生成的題目數(shù)對比

4. 如表2所示,在CoderEval的standalone子集上,三個(gè)模型的表現(xiàn)與HumanEval上基本接近,ChatGPT的表現(xiàn)大幅超過另外兩個(gè)模型;但是,在其他依賴于上下文信息的生成任務(wù)上(占實(shí)際情況的60%以上),三個(gè)模型的表現(xiàn)都有較大下降,即使是最強(qiáng)大的ChatGPT的表現(xiàn)也有很大波動(dòng),甚至在部分級別上三個(gè)模型生成10次的結(jié)果均錯(cuò)誤,這一定程度上說明了依賴上下文的代碼生成任務(wù)是大模型代碼生成下一步優(yōu)化的重點(diǎn)方向。

表2 | 三個(gè)模型在CoderEval的兩類子集上的表現(xiàn)對比

更多的實(shí)驗(yàn)數(shù)據(jù)以及分析過程,請見CoderEval論文。

三. 總結(jié)

CoderEval論文目前已發(fā)表在ICSE2024(https://arxiv.org/abs/2302.00288?),其開源項(xiàng)目版可在GitHub獲得(https://github.com/CodeArtsSnap/CoderEval?),歡迎大家關(guān)注并一鍵Follow+Star。我們致力于將CoderEval打造為一個(gè)客觀、公正、全面的Benchmark,不過,盡量我們已努力完善,但它仍然不可避免地存在一些限制和錯(cuò)誤。因此,我們希望借助代碼生成研究者社區(qū)的力量,持續(xù)迭代和更新CoderEval的版本,以擴(kuò)展和完善其語言支持、數(shù)據(jù)集、測試方式等方面,從而持續(xù)推動(dòng)代碼智能社區(qū)的研究與落地。

PaaS技術(shù)創(chuàng)新Lab隸屬于華為云,致力于綜合利用軟件分析、數(shù)據(jù)挖掘、機(jī)器學(xué)習(xí)等技術(shù),為軟件研發(fā)人員提供下一代智能研發(fā)工具服務(wù)的核心引擎和智慧大腦。我們將聚焦軟件工程領(lǐng)域硬核能力,不斷構(gòu)筑研發(fā)利器,持續(xù)交付高價(jià)值商業(yè)特性!加入我們,一起開創(chuàng)研發(fā)新“境界”?。?span id="n5n3t3z" class="juejin-editor-bold">詳情歡迎聯(lián)系:?bianpan@huawei.com;?mayuchi1@huawei.com)

點(diǎn)擊關(guān)注,第一時(shí)間了解華為云新鮮技術(shù)~

?文章來源地址http://www.zghlxwxcb.cn/news/detail-746307.html

到了這里,關(guān)于從HumanEval到CoderEval: 你的代碼生成模型真的work嗎?的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包