偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

CodeRAG-Bench:RAG遇到了Coder,哪個模型在RAG的加持下最會寫代碼?

發(fā)布于 2024-6-27 15:23
瀏覽
0收藏

1. CodeRAG-Bench是什么?

CodeRAG-Bench:RAG遇到了Coder,哪個模型在RAG的加持下最會寫代碼?-AI.x社區(qū)圖片

CodeRAG-Bench是本文作者為檢索增強(qiáng)代碼生成(Retrieval Augment Code Generation,RACG)任務(wù)設(shè)計的一個測試評估基準(zhǔn)。構(gòu)建理念來自三個核心要素:

? 任務(wù)多樣性:代碼生成任務(wù)覆蓋了從代碼行函數(shù)再到整個代碼庫的不同層面,以及封閉與開放的不同領(lǐng)域。

? 嚴(yán)謹(jǐn)且可復(fù)現(xiàn)的評估機(jī)制:提供了精確的文檔標(biāo)注,以支持檢索評估。

? 統(tǒng)一的接口設(shè)計:盡管現(xiàn)有數(shù)據(jù)集采用了多樣化的處理流程,代碼庫提供了一個統(tǒng)一的接口,用于實現(xiàn)檢索、增強(qiáng)生成及評估。

接下來的內(nèi)容里,作者從CodeRAG-Bench的構(gòu)建角度來向大家展示了CodeRAG-Bench的全貌:在本節(jié)中,我們將詳細(xì)介紹CodeRAG-Bench的構(gòu)建流程:編程問題分類、檢索資料收集、標(biāo)注標(biāo)準(zhǔn)文檔以及設(shè)置評估流程。

2. 如何將編程任務(wù)進(jìn)行分類

本文作者專注于Python編程任務(wù),將Python編程任務(wù)和數(shù)據(jù)集歸為四大類:代碼檢索、基礎(chǔ)編程、開放域問題、倉庫級代碼問題。

CodeRAG-Bench:RAG遇到了Coder,哪個模型在RAG的加持下最會寫代碼?-AI.x社區(qū)圖片

2.1.1 基礎(chǔ)編程問題

這一類問題通常以面試題目的形式出現(xiàn),主要依賴Python的內(nèi)置功能來解決算法挑戰(zhàn)。

選取了兩個廣泛使用的數(shù)據(jù)集:HumanEval 和 MBPP ,它們要求模型根據(jù)自然語言描述來補(bǔ)全函數(shù)。

然而,由于模型訓(xùn)練數(shù)據(jù)的公共信息有限,HumanEval 和 MBPP 數(shù)據(jù)集是否被模型用于訓(xùn)練數(shù)據(jù),從而帶來數(shù)據(jù)污染?

所以,作者還引入了LiveCodeBench ,收集了在相關(guān)語言模型訓(xùn)練截止后,來自編程網(wǎng)站的題目,以降低潛在的數(shù)據(jù)污染風(fēng)險。

2.1.2  開放領(lǐng)域問題

開放域問題是指一些超出了Python標(biāo)準(zhǔn)庫的編程問題。

作者采用了DS-1000和ODEX測試數(shù)據(jù)集,DS-1000收集了Pandas、numpy等7個常用相關(guān)庫的問題,ODEX包括了79個庫的問題,比如requests、sqlalchemy等庫的操作。

2.1.3  倉庫級別編碼問題

除了函數(shù)級別的編碼任務(wù)外,有些問題需要在GitHub倉庫的完整上下文中編輯文件。因此,采用了RepoEval 和 SWE-bench 進(jìn)行倉庫級別的代碼生成和問題解決任務(wù)。

2.1.4 代碼檢索問題

除了用于增強(qiáng)生成的檢索任務(wù)外,還采用了 CodeSearchNet(CSN)來測試代碼檢索任務(wù)。

3. 效果評估

3.1 檢索方面評估

在檢索方面,作者采用了NDCG、精確度、召回率來進(jìn)行評估,并將NDCG@10的百分比作為主要衡量標(biāo)準(zhǔn)。

NDCG的全稱是:Normalized Discounted Cumulative Gain(歸一化折損累計增益)。NDCG的核心思想是,一個高質(zhì)量的搜索結(jié)果應(yīng)該在列表中排在更靠前的位置。因此,它不僅考慮了檢索結(jié)果的相關(guān)性,還考慮了這些結(jié)果的排名順序。NDCG值越高,表示搜索或推薦系統(tǒng)的性能越好。

選擇了三大類別中的頂尖檢索工具:

  • 稀疏檢索器:BM25
  • 密集檢索器:BGE-base/large、GIST-base/large和SFR-Embedding-Mistral
  • API:voyage-code-2和openai-text-embedding-small-03

3.1.1 密集檢索器和稀疏檢索器哪個更好?

作者發(fā)現(xiàn):密集嵌入模型在很多情況下能夠超越BM25。這可能是因為許多競爭力強(qiáng)的檢索模型經(jīng)過了多領(lǐng)域、多樣化任務(wù)的訓(xùn)練,包括代碼數(shù)據(jù)的處理[1, 36],從而在代碼檢索環(huán)境中展現(xiàn)出更強(qiáng)的魯棒性。

3.1.2 更大尺寸的檢索模型是否表現(xiàn)更佳?

在密集檢索模型中,模型規(guī)模的擴(kuò)大往往與檢索性能的提升成正比,這與語言模型中觀察到的趨勢一致。

以GIST-large(0.34B)為例,它的表現(xiàn)始終超越了GIST-base(0.11B)。而SFR-Mistral(7B)在各項任務(wù)中均展現(xiàn)出了最好的性能,力壓所有開放源代碼的稀疏與密集模型,甚至在某些任務(wù)上超越了OpenAI的嵌入技術(shù)。

3.1.3 處理效率

雖然大尺寸的檢索模型通常表現(xiàn)更優(yōu),但它們也常常帶來顯著的成本。作者對處理效率進(jìn)行了分析,重點關(guān)注兩個方面:

  • 編碼延遲:文檔離線編碼的延遲
  • 搜索延遲:查詢/文檔編碼及相似度計算的延遲
  • 模型存儲需求
  • 索引存儲需求

CodeRAG-Bench:RAG遇到了Coder,哪個模型在RAG的加持下最會寫代碼?-AI.x社區(qū)圖片

3.2 代碼生成評估

在代碼生成方面,采納pass@k指標(biāo)[5]來評價程序執(zhí)行的正確性。同時在規(guī)范檢索和開放檢索兩種設(shè)置下對RAG的綜合表現(xiàn)進(jìn)行評估。

采用了StarCoder2、CodeGemma、CodeLlama和DeepSeekCoder等不同規(guī)模的模型作為測試基準(zhǔn)進(jìn)行對比。

對于通用文本語言模型,我們涵蓋了三款表現(xiàn)最佳的模型:Llama3、專為RAG優(yōu)化的Command-R,以及專有的GPT模型gpt-3.5-turbo-0125和gpt-4。

在代碼生成方面,我們設(shè)定溫度參數(shù)0.2,top_p采樣比例為0.95。

通過兩種方式來界定RACG性能的理論極值:

  • 一種是完全不使用檢索的生成
  • 另一種是結(jié)合了標(biāo)準(zhǔn)答案文檔的生成

CodeRAG-Bench:RAG遇到了Coder,哪個模型在RAG的加持下最會寫代碼?-AI.x社區(qū)圖片

注:上圖中,斜杠前的是完全不使用檢索,斜杠后是使用標(biāo)準(zhǔn)文檔后。綠色標(biāo)注(ii)超過(i)的成果,顏色越深表示增加超過10次,否則用紅色標(biāo)示。

開放域: 大多數(shù)代碼專屬的語言模型得分激增,最高可達(dá)5.2分,這顯示出它們能夠高效地消化間接有益的文檔資料。在眾多通用語言模型中,Command-R獨(dú)樹一幟,它在兩個數(shù)據(jù)集的上下文中均顯示出增益,這與其卓越的RAG能力相吻合。然而,即便是最強(qiáng)的GPT模型,似乎也沒有從上下文中獲得額外優(yōu)勢,這可能歸因于它對這些庫的先前熟悉度,因為訓(xùn)練有素的模型傾向于記憶流行知識點,對于它們來說,檢索的增益微乎其微。

代碼庫: 所有模型通過RepoEval的標(biāo)準(zhǔn)片段得分提升了7.5至17.2分。然而,SWE-bench Lite的難度顯著增加,即便是頂尖的GPT模型,在標(biāo)準(zhǔn)測試中也僅達(dá)到了2.7%的準(zhǔn)確率。這種難度的提升可能源于復(fù)雜的多文件編輯任務(wù)和冗長的上下文,這些都極大地考驗了大多數(shù)模型的處理極限。將探索更高效的推理策略與RAG結(jié)合的可能性,作為未來研究的方向。

更大的模型與它們的小型對應(yīng)版本一樣,均能獲得顯著的性能提升,這表明RACG普遍有助于提升不同規(guī)模模型的能力。然而,要充分激發(fā)RACG的潛力,較弱的語言模型需要:

  • 擴(kuò)展它們的上下文長度,以納入更多的文檔資料
  • 進(jìn)一步提升它們處理上下文的能力。

3.4 檢索輔助的代碼生成實驗

在全面的RACG場景中進(jìn)行實驗,這不僅需要檢索相關(guān)文檔,還需基于這些文檔進(jìn)行生成代碼。精選了各類中的頂尖檢索模型:BM25、GIST-large,以及OpenAI和Voyager的嵌入技術(shù)。

在生成方面,挑選了:

? StarCoder2-7B

? DeepSeekCoder-7B

? GPT-3.5-turbo。

CodeRAG-Bench:RAG遇到了Coder,哪個模型在RAG的加持下最會寫代碼?-AI.x社區(qū)圖片

3.4.1 基礎(chǔ)編程問題

大部分檢索到的上下文對StarCoder2的生成過程大有裨益。在MBPP數(shù)據(jù)集上,RACG的表現(xiàn)甚至超越了僅使用標(biāo)準(zhǔn)文檔設(shè)置的15.6至17.8個百分點。然而,對于DeepSeekCoder而言,RACG并未帶來提升,當(dāng)存在額外上下文時,其生成過程會變得過于復(fù)雜,且重復(fù)性高,缺乏規(guī)范性。這可能意味著DeepSeekCoder對額外上下文的處理不夠穩(wěn)健,因此在面對不同的輸入時可能會產(chǎn)生不理想的行為。與此相反,GPT-3.5-turbo能夠通過增加上下文有效提升性能,顯示出其在利用增強(qiáng)上下文方面的卓越能力。

3.4.2 開放域問題

StarCoder2在兩個數(shù)據(jù)集上通過檢索到的庫文檔獲得了顯著的性能提升,而DeepSeekCoder僅在ODEX數(shù)據(jù)集上有所進(jìn)步,GPT-3.5則在兩個數(shù)據(jù)集上均未見提升。

我們推測,模型對某一領(lǐng)域的陌生程度越高,它從檢索文檔中獲得的幫助就越大。同時,不佳的檢索結(jié)果也可能削弱RACG的有效性。

DeepSeekCoder能夠從真實文檔中獲益,但對于那些可能質(zhì)量不高的、由模型檢索出的文檔則沒有獲益,這表明我們需要更高效的代碼檢索模型。

3.4.3  倉庫級別問題

所有模型都能從RepoEval檢索到的代碼片段中獲益,尤其是使用openai-embeddings的RACG經(jīng)常能夠超越僅使用標(biāo)準(zhǔn)文檔設(shè)置的表現(xiàn)。盡管某些文件并未像標(biāo)準(zhǔn)文檔那樣直接包含問題的解決方案,但它們可能包含有益于最終生成過程的函數(shù)定義或使用示例,這表明openai-embeddings對倉庫的理解相當(dāng)深入,能夠檢索到隱含的支持性上下文。然而,SWE-bench-lite的復(fù)雜性極高,以至于沒有任何RACG設(shè)置能夠取得顯著的成果。

3.5 究竟需增補(bǔ)多少文檔?

各類模型在上下文長度限制和利用上下文的能力上存在差異。探究了在提供不同數(shù)量文檔作為上下文時,模型表現(xiàn)如何變化。

針對每個任務(wù)類別精選了一個數(shù)據(jù)集進(jìn)行試驗:HumanEval因其廣泛的應(yīng)用;ODEX因其跨領(lǐng)域的廣泛覆蓋;RepoEval因其適中的難度。

CodeRAG-Bench:RAG遇到了Coder,哪個模型在RAG的加持下最會寫代碼?-AI.x社區(qū)圖片

對比了在提供前1、2、5和10個文檔時RACG的性能差異。大多數(shù)情況下,包含Top5能帶來最優(yōu)結(jié)果,盡管在RepoEval中StarCoder2更傾向于使用Top8。盡管StarCoder2和DeepseekCoder在上下文限制上存在巨大差異,但最佳選擇始終是前5個文檔。雖然適量增加文檔能帶來有益的上下文,但過多低相關(guān)性的文檔可能會引入干擾,影響生成質(zhì)量,這歸咎于檢索系統(tǒng)的不完善之處。

4. 開放檢索下的RACG

4.1 RACG能否助力弱勢模型?

我們使用三個頂尖檢索器和StarCoder2生成模型,檢驗RACG是否能夠助力較弱的代碼語言模型。

基礎(chǔ)編程: HumanEval 在所有來源中,StackOverflow(SO)的帖子能提升結(jié)果1.8至4.3個百分點,與選擇的檢索器無關(guān)。只有當(dāng)使用GIST-large神經(jīng)檢索器時,教程才能提升結(jié)果2.1個百分點,這可能是因為其適應(yīng)性。通過手動檢查結(jié)果,發(fā)現(xiàn)許多檢索到的帖子和教程與HumanEval示例是相同編程問題的變體,包含代碼和詳細(xì)的文本解釋,因此可能暗示或直接給出答案。其他檢索來源通常不包含相關(guān)上下文,因此對生成沒有改進(jìn)。混合文檔生成的表現(xiàn)與使用最佳文檔相當(dāng),表明模型能夠從混合文本中識別并整合最有用的內(nèi)容。

開放領(lǐng)域: ODEX 編程解決方案是最有益的資源,能帶來3.8至4.3個百分點的增益;GitHub文件也提升了0.9至2.3個百分點。盡管檢索到的解決方案/文件有時在功能上與ODEX示例相關(guān),但它們展示了如regex和requests等庫的正確用法,從而引導(dǎo)生成更加功能正確。

倉庫級別: RepoEval 來自開放來源的文檔不如從本地倉庫檢索的代碼片段有用。

4.2 RACG對更強(qiáng)模型的助力如何?

開放檢索的RACG能顯著提升StarCoder2這一相對弱勢模型的性能。為了探究RACG的這種提升效果是否同樣適用于更為強(qiáng)大的模型,對一系列頂尖的專有模型進(jìn)行了測試:GPT-4o、Claude-3的haiku/sonnet版本,以及Gemini-1.5的flash/pro版本。

基礎(chǔ)編程: HumanEval 利用所有文檔資源時,RACG能穩(wěn)定提升GPT-4和Claude-3-sonnet的表現(xiàn)。然而,對于像Claude-3-haiku和Gemini-1.5-flash這樣的較弱模型,RACG只有在整合多個資源時才有效,若僅依賴單一資源(哪怕它是標(biāo)準(zhǔn)解決方案資源)則效果不佳。值得注意的是,性能更強(qiáng)的Claude-3-sonnet在某些情況下表現(xiàn)不如較弱的Claude-3-haiku,但它能從所有檢索資源中獲益,并在標(biāo)準(zhǔn)編程資源文檔的輔助下超越haiku,這暗示了它可能具有更出色的RAG能力。雖然更強(qiáng)大的Claude能從額外的上下文中獲得實質(zhì)性的好處,但更強(qiáng)大的Gemini-1.5-pro在非標(biāo)準(zhǔn)資源上的表現(xiàn)卻與其較弱的對應(yīng)版本相似,無法有效執(zhí)行RACG。

開放領(lǐng)域: ODEX 所有模型通過利用庫文檔來增加ODEX任務(wù)的復(fù)雜度,所獲得的提升有限,唯一的例外是GPT-4o,它通過將編程解決方案融入上下文,分?jǐn)?shù)提升了4.6分。

由于大多數(shù)情況下性能會下降,我們進(jìn)行了深入分析,以確定模型在何時失敗。大多數(shù)模型傾向于復(fù)制上下文中的函數(shù),有時甚至?xí)采w正在查詢的函數(shù),導(dǎo)致所有針對該查詢函數(shù)的測試用例均告失敗。此外,由于上下文中程序眾多,模型傾向于生成過于復(fù)雜的程序,這些程序往往無法通過測試用例。

總體而言,大多數(shù)模型容易受到額外上下文的干擾或分心,未能完成指定的代碼生成任務(wù),這表明RACG還有很大的提升空間。

倉庫級別: RepoEval GPT-4o在解決RepoEval任務(wù)時,能夠以合理的成功率完成,而所有Claude模型在這項任務(wù)上都遇到了挑戰(zhàn),大多數(shù)情況下pass@1的成功率不足10%。發(fā)現(xiàn)Claude模型通常以解釋不完整的輸入代碼作為回應(yīng),而不是提供待完成的代碼,即使給出了正確的指令,這可能是由于未知的訓(xùn)練數(shù)據(jù)特性所致。Gemini-1.5-flash在解決任務(wù)上也幾乎無能為力,經(jīng)常生成文本解釋;然而,其更強(qiáng)大的pro版本在得分上提高了10至25分,顯示出其在倉庫級代碼補(bǔ)全方面更強(qiáng)的能力。

本文轉(zhuǎn)載自 ??大語言模型論文跟蹤??,作者:HuggingAGI

CodeRAG-Bench:RAG遇到了Coder,哪個模型在RAG的加持下最會寫代碼?-AI.x社區(qū)

標(biāo)簽
已于2024-6-27 16:21:24修改
收藏
回復(fù)
舉報
回復(fù)
相關(guān)推薦