全新代碼大模型Magicoder,,不到7B參數(shù),,就能在代碼生成領(lǐng)域與頂級(jí)代碼模型不相上下。
原文來(lái)源:新智元
圖片來(lái)源:由無(wú)界 AI生成
開(kāi)源「代碼大模型」來(lái)了,!
UIUC清華團(tuán)隊(duì)的研究人員發(fā)布了Magicoder,,不到7B參數(shù),,就能在代碼生成領(lǐng)域與頂級(jí)代碼模型不相上下。
值得一提的是,Magicoder的代碼,、權(quán)重和數(shù)據(jù),,毫無(wú)保留完全開(kāi)源。
論文地址:https://arxiv.org/abs/2312.02120
Magicoder依靠的OSS-INSTRUCT的方法,,是通過(guò)對(duì)現(xiàn)有頂級(jí)代碼模型(例如ChatGPT)的提示,,加上網(wǎng)絡(luò)上的種子代碼片段,來(lái)生成的代碼,。
這可真是取之于大模型,,用之于大模型,;就有網(wǎng)友轉(zhuǎn)發(fā)說(shuō)道:通過(guò)這些結(jié)果,看到了提高用于LLMs的合成數(shù)據(jù)的潛力也是一個(gè)非常有趣的領(lǐng)域,。
話不多說(shuō),,那就讓我們來(lái)具體了解一下Magicoder的來(lái)歷吧,!
代碼生成的發(fā)展史
代碼生成(Code Generation),也叫程序合成(Program Synthesis),,近幾十年來(lái),,一直都是學(xué)術(shù)界的一塊「硬骨頭」,在此領(lǐng)域進(jìn)行過(guò)的許多嘗試,,例如基于抽象的合成和基于示例的編程,,都沒(méi)有取得很好的效果。
直到最近,,使用在代碼上訓(xùn)練的大型語(yǔ)言模型取得了顯著的突破,,被廣泛應(yīng)用于輔助實(shí)際軟件開(kāi)發(fā)。
最初,,諸如GPT-3.5 Turbo和GPT-4之類(lèi)的閉源模型主導(dǎo)了各種代碼生成基準(zhǔn)和排行榜,。
為了推動(dòng)開(kāi)源LLM在代碼生成領(lǐng)域的應(yīng)用,SELF-INSTRUCT方法被開(kāi)發(fā)出來(lái),,通過(guò)使用強(qiáng)大的LLM生成合成的編碼指令,,并利用這些指令對(duì)較弱的學(xué)生模型進(jìn)行微調(diào),以從強(qiáng)大的教師模型中提取知識(shí),。
然而,,SELF-INSTRUCT在提高LLM的指令遵循能力時(shí),仍然依賴(lài)于狹窄范圍的預(yù)定義任務(wù)或啟發(fā)式方法。
為了解決這一問(wèn)題,,UIUC和清華的研究人員提出了Magicoder,,其中采用的OSS-INSTRUCT方法,旨在減輕LLM固有的偏見(jiàn),,通過(guò)直接學(xué)習(xí)開(kāi)源代碼釋放其創(chuàng)造高質(zhì)量和創(chuàng)意編碼指令的潛力,。
OSS-INSTRUCT通過(guò)從開(kāi)源中搜集的隨機(jī)代碼片段獲得靈感,自動(dòng)生成新的編碼問(wèn)題,。借助于不同的種子代碼片段,,OSS-INSTRUCT能夠直接產(chǎn)生多樣、真實(shí)和可控的編碼指令數(shù)據(jù),。
如下圖所示,,在這個(gè)例子中,LLM從兩個(gè)不同函數(shù)的不完整代碼片段中獲取靈感,,成功地將它們關(guān)聯(lián)起來(lái),,并構(gòu)建出一個(gè)現(xiàn)實(shí)的機(jī)器學(xué)習(xí)問(wèn)題。
由于OSS-INSTRUCT與現(xiàn)有的數(shù)據(jù)生成方法是正交的,OSS-INSTRUCT可以被同時(shí)結(jié)合使用,,進(jìn)一步推動(dòng)模型在編碼任務(wù)中的能力,。
為什么OSS-INSTRUCT如此神奇?
OSS-INSTRUCT的工作方式是通過(guò)對(duì)LLM(例如ChatGPT)進(jìn)行提示,,然后根據(jù)從互聯(lián)網(wǎng)搜集的一些種子代碼片段(例如來(lái)自GitHub)生成編程問(wèn)題及其解決方案,。
一方面,種子片段提供了生成的可控性,;
另一方面,,OSS-INSTRUCT加強(qiáng)了LLM創(chuàng)建編程問(wèn)題的多樣化,更符合真實(shí)的編程場(chǎng)景,。
我們可以從以下幾個(gè)指標(biāo)中一探究竟:
1. 類(lèi)別平衡
如下圖所示,,通過(guò)計(jì)算OSS-INSTRUCT中每個(gè)樣本的嵌入與這10個(gè)類(lèi)別之間的余弦相似性,可以看出其在不同類(lèi)別之間表現(xiàn)出了多樣性和平衡,。
2. 長(zhǎng)度分布
下圖展示生成問(wèn)題和解決方案的長(zhǎng)度分布,,良好的平衡性讓OSS-INSTRUCT更貼合實(shí)際應(yīng)用場(chǎng)景,。
3. 與HumanEval的相似性計(jì)算
下圖展示了與HumanEval樣本的余弦相似性,。
可以看出,OSS–INSTRUCT在所有研究的數(shù)據(jù)生成技術(shù)中表現(xiàn)出最低的平均相似度,這說(shuō)明OSS–INSTRUCT生成的數(shù)據(jù)是最富有多樣性的,。
但是,,既然OSS-INSTRUCT獲取到的種子片段來(lái)自于開(kāi)源代碼,,為什么不直接在這些開(kāi)源代碼上進(jìn)行微調(diào)呢?
為了回答這個(gè)問(wèn)題,,研究人員遵循CodeSearchNet,,使用基礎(chǔ)的CODELLAMA-PYTHON-7B對(duì)配對(duì)數(shù)據(jù)進(jìn)行了2個(gè)時(shí)期的微調(diào),遵循相同訓(xùn)練設(shè)置,。
對(duì)比結(jié)果如下表,,在75,000個(gè)配對(duì)注釋-函數(shù)數(shù)據(jù)上,微調(diào)甚至使基礎(chǔ)模型惡化,,而OSS-INSTRUCT有助于引入實(shí)質(zhì)性的提升。
研究人員推測(cè),,這種惡化可能是由這些配對(duì)數(shù)據(jù)固有的大量噪聲和不一致性導(dǎo)致的,。
這進(jìn)一步表明,數(shù)據(jù)的真實(shí)性對(duì)于代碼指令調(diào)整至關(guān)重要,,而非格式,。
該結(jié)果還凸顯了OSS-INSTRUCT的優(yōu)越性,可以將這些松散相關(guān)的代碼片段轉(zhuǎn)化為語(yǔ)義一致的指令調(diào)整數(shù)據(jù),。
Magicoder表現(xiàn)評(píng)估
研究團(tuán)隊(duì)首先構(gòu)建了使用OSS-INSTRUCT進(jìn)行訓(xùn)練的Magicoder系列,,同時(shí)進(jìn)一步組合使用OSS-INSTRUCT和Evol–INSTRUCT構(gòu)建了MagicoderS系列,,并在兩個(gè)系列上都進(jìn)行了測(cè)試。
代碼生成基準(zhǔn)使用的是HumanEval和MBPP,,這是目前兩個(gè)最廣泛使用的基準(zhǔn),。這些基準(zhǔn)中的每個(gè)任務(wù)都包括一個(gè)任務(wù)描述(例如docstring)作為提示,然后讓LLMs生成相應(yīng)的代碼,。其正確性由少量測(cè)試用例進(jìn)行檢查,。
為了更嚴(yán)格的評(píng)估,研究人員還使用了由EvalPlus框架支持的HumanEval+和MBPP+以獲取更多的測(cè)試,。
值得注意的是,,MagicoderS-CL和MagicoderS-DS在HumanEval+上的表現(xiàn)都優(yōu)于只有7B參數(shù)的ChatGPT。
讓我們具體看下Magicoder的表現(xiàn):
1. Python語(yǔ)言
我們首先可以觀察到Magicoder-CL相在HumanEval和HumanEval+上相對(duì)于CODELLAMA-PYTHON-34B有了實(shí)質(zhì)性的改進(jìn)。
MagicoderS-CL在HumanEval+上優(yōu)于ChatGPT和所有其他開(kāi)源模型。
此外,,盡管在HumanEval上得分略低于WizardCoder-CL-34B和ChatGPT,,但在更嚴(yán)格的HumanEval+數(shù)據(jù)集上超過(guò)了它們,這表明MagicoderS-CL可能生成更穩(wěn)健的代碼,。
2. 其他編程語(yǔ)言
在除了Python之外的語(yǔ)言對(duì)比中,,Magicoder-CL在所有研究過(guò)的編程語(yǔ)言中都大幅超過(guò)了基礎(chǔ)的CODELLAMA-PYTHON-7B,。
此外,MagicoderS-CL在所有編程語(yǔ)言上都進(jìn)一步改進(jìn)了Magicoder-CL,,僅使用7B參數(shù)就實(shí)現(xiàn)了與WizardCoder-CL-34B相當(dāng)?shù)男阅堋?/p>
值得注意的是,,Magicoder-CL僅使用非常有限的多語(yǔ)言數(shù)據(jù)進(jìn)行訓(xùn)練,但仍然優(yōu)于其他具有相似甚至更大規(guī)模的LLMs,。這意味著LLMs可以從數(shù)據(jù)中學(xué)習(xí)超出其格式的知識(shí),。
3. 數(shù)據(jù)科學(xué)庫(kù)
最后,,針對(duì)7個(gè)熱門(mén)Python數(shù)據(jù)科學(xué)庫(kù)的1,000個(gè)獨(dú)特的數(shù)據(jù)科學(xué)編碼問(wèn)題(DS-1000 dataset),研究人員也進(jìn)行了單元測(cè)試,,旨在評(píng)估LLMs在實(shí)際用例中的表現(xiàn),。
從表中可以看出,Magicoder-CL-7B已經(jīng)在所有評(píng)估的基線中表現(xiàn)出色,,包括最先進(jìn)的WizardCoder-SC-15B,,改善了8.3個(gè)百分點(diǎn)。
雖然Magicoder還不夠完美,,但作者認(rèn)為,,通過(guò)公開(kāi)分享所有的數(shù)據(jù)和代碼細(xì)節(jié),會(huì)有越來(lái)越多的先進(jìn)代碼模型出現(xiàn),。
讓我們也拭目以待,。
參考資料:
https://arxiv.org/abs/2312.02120
免責(zé)聲明:本文來(lái)自網(wǎng)絡(luò)收錄或投稿,,觀點(diǎn)僅代表作者本人,不代表芒果財(cái)經(jīng)贊同其觀點(diǎn)或證實(shí)其描述,,版權(quán)歸原作者所有,。轉(zhuǎn)載請(qǐng)注明出處:http://lequren.com/1084005.html
溫馨提示:投資有風(fēng)險(xiǎn),入市須謹(jǐn)慎,。本資訊不作為投資理財(cái)建議,。