無(wú)需OpenAI數(shù)據(jù),躋身程式碼大模型榜單! UIUC發(fā)表StarCoder-15B-Instruct
Jun 13, 2024 pm 01:59 PM在軟件技術(shù)的前沿,UIUC張令明組攜手BigCode組織的研究者,近日公布了StarCoder2-15B-Instruct代碼大模型。
這一創(chuàng)新成果在代碼生成任務(wù)取得了顯著突破,成功超越CodeLlama-70B-Instruct,登上代碼生成性能榜單之巔。
StarCoder2-15B-Instruct的獨(dú)特之處在于其純自對(duì)齊策略,整個(gè)訓(xùn)練流程公開(kāi)透明,且完全自主可控。
該模型通過(guò)StarCoder2-15B生成了數(shù)千個(gè)指令,響應(yīng)對(duì)StarCoder-15B基座模型進(jìn)行微調(diào),無(wú)需依賴昂貴的人工標(biāo)注數(shù)據(jù),也無(wú)需從GPT4等商業(yè)大模型中獲取數(shù)據(jù),避免了潛在的版權(quán)問(wèn)題。
在HumanEval測(cè)試中,StarCoder2-15B-Instruct以72.6%的Pass@1成績(jī)脫穎而出,較CodeLlama-70B-Instruct的72.0%有所提升。
在LiveCodeBench數(shù)據(jù)集的評(píng)估中,這一自對(duì)齊模型的表現(xiàn)甚至超過(guò)了基于GPT-4生成數(shù)據(jù)訓(xùn)練的同類模型。這一成果證明了通過(guò)自身分布內(nèi)的數(shù)據(jù),大模型同樣能夠有效地學(xué)習(xí)如何與人類類似對(duì)齊,而無(wú)需依賴外部教師大模型的偏移分布。
該項(xiàng)目的成功實(shí)施得到了美國(guó)東北大學(xué)Arjun Guha課題組、加州大學(xué)伯克利分校、ServiceNow和Hugging Face等機(jī)構(gòu)的鼎力支持。
技術(shù)揭秘
StarCoder2-Instruct的數(shù)據(jù)生成流程主要包括三個(gè)核心步驟:
1. 種子代碼片段的采集:團(tuán)隊(duì)從The Stack v1中篩選出高質(zhì)量、多樣化的種子函數(shù),這些函數(shù)來(lái)自海量的獲得許可的源代碼語(yǔ)料庫(kù)。通過(guò)嚴(yán)格的過(guò)濾和篩選,確保了種子代碼的質(zhì)量和多樣性;
2. 多樣化指令的生成:基于種子函數(shù)中的不同編程概念,StarCoder2-15B-Instruct能夠創(chuàng)建出多樣化且真實(shí)的代碼指令。這些指令涵蓋了從數(shù)據(jù)反序列化到列表連接、遞歸等豐富的編程場(chǎng)景;
3. 高質(zhì)量響應(yīng)的生成:對(duì)于每個(gè)指令,模型采用編譯運(yùn)行引導(dǎo)的自我驗(yàn)證方式,確保生成的響應(yīng)是準(zhǔn)確且高質(zhì)量的。
每個(gè)步驟的具體操作如下:
精選種子代碼片段的過(guò)程
為了提升代碼模型在遵循指令方面的能力,模型需要廣泛接觸和學(xué)習(xí)不同的編程原理與實(shí)際操作。StarCoder2-15B-Instruct受到OSS-Instruct的啟發(fā),從開(kāi)源代碼片段中汲取靈感,尤其是The Stack V1中那些格式規(guī)范、結(jié)構(gòu)清晰的Python種子函數(shù)。
在構(gòu)建其基礎(chǔ)數(shù)據(jù)集時(shí),StarCoder2-15B-Instruct對(duì)The Stack V1進(jìn)行了深度挖掘,選取了所有配備文檔說(shuō)明的Python函數(shù),并借助autoimport功能自動(dòng)分析并推斷了這些函數(shù)所需的依賴項(xiàng)。
為了確保數(shù)據(jù)集的純凈性和高質(zhì)量,StarCoder2-15B-Instruct對(duì)所有選取的函數(shù)進(jìn)行了精細(xì)的過(guò)濾和篩選。
首先,通過(guò)Pyright類型檢查器進(jìn)行嚴(yán)格的類型檢查,排除了所有可能產(chǎn)生靜態(tài)錯(cuò)誤的函數(shù),從而保證了數(shù)據(jù)的準(zhǔn)確性和可靠性。
接著,通過(guò)精確的字符串匹配技術(shù),識(shí)別和剔除了與評(píng)估數(shù)據(jù)集存在潛在關(guān)聯(lián)的代碼和提示,以避免數(shù)據(jù)污染。在文檔質(zhì)量方面,StarCoder2-15B-Instruct更是采用了獨(dú)特的篩選機(jī)制。
它利用自身的評(píng)估能力,通過(guò)向模型展示7個(gè)樣本提示,讓模型自行判斷每個(gè)函數(shù)的文檔質(zhì)量是否達(dá)標(biāo),從而決定是否將其納入最終的數(shù)據(jù)集。
這種基于模型自我判斷的方法,不僅提高了數(shù)據(jù)篩選的效率和準(zhǔn)確性,也確保了數(shù)據(jù)集的高質(zhì)量和一致性。
最後,為了避免資料冗餘和重複,StarCoder2-15B-Instruct採(cǎi)用了MinHash和局部敏感雜湊演算法,對(duì)資料集中的函數(shù)進(jìn)行了去重處理。透過(guò)設(shè)定0.5的Jaccard相似度閾值,有效去除了相似度較高的重複函數(shù),確保了資料集的獨(dú)特性和多樣性。
經(jīng)過(guò)這一系列的精細(xì)篩選和過(guò)濾,StarCoder2-15B-Instruct最終從500萬(wàn)個(gè)帶有文檔的Python函數(shù)中,精選出了25萬(wàn)個(gè)高質(zhì)量的函數(shù)作為其種子資料集。此方法深受MultiPL-T資料收集流程的啟發(fā)。
多樣化指令的產(chǎn)生
#當(dāng)StarCoder2-15B-Instruct完成了種子函數(shù)的收集後,它運(yùn)用了Self-OSS-Instruct技術(shù)來(lái)創(chuàng)造多樣化的程式指令。這項(xiàng)技術(shù)的核心在於透過(guò)上下文學(xué)習(xí),讓StarCoder2-15B基座模型能夠自主地為給定的種子程式碼片段產(chǎn)生對(duì)應(yīng)的指令。
為實(shí)現(xiàn)這一目標(biāo),StarCoder2-15B-Instruct精心設(shè)計(jì)了16個(gè)範(fàn)例,每個(gè)範(fàn)例都遵循(程式碼片段,概念,指令)的結(jié)構(gòu)。指令的產(chǎn)生過(guò)程被細(xì)分為兩個(gè)階段:
程式碼概念識(shí)別:在這一階段,StarCoder2-15B會(huì)針對(duì)每一個(gè)種子函數(shù)進(jìn)行深入分析,並產(chǎn)生一個(gè)包含該函數(shù)中關(guān)鍵程式碼概念的清單。這些概念廣泛涵蓋了程式設(shè)計(jì)領(lǐng)域的基本原理和技術(shù),如模式匹配、資料類型轉(zhuǎn)換等,這些對(duì)於開(kāi)發(fā)者而言具有極高的實(shí)用價(jià)值。
指令建立:基於辨識(shí)出的程式碼概念,StarCoder2-15B會(huì)進(jìn)一步產(chǎn)生與之對(duì)應(yīng)的編碼任務(wù)指令。這個(gè)過(guò)程旨在確保產(chǎn)生的指令能夠準(zhǔn)確地反映程式碼片段的核心功能和要求。
透過(guò)上述流程,StarCoder2-15B-Instruct最終成功產(chǎn)生了高達(dá)238k個(gè)指令,極大地豐富了其訓(xùn)練資料集,並為其在程式設(shè)計(jì)任務(wù)中的表現(xiàn)提供了強(qiáng)有力的支持。
回應(yīng)的自我驗(yàn)證機(jī)制
#在取得Self-OSS-Instruct產(chǎn)生的指令後,StarCoder2-15B-Instruct的關(guān)鍵任務(wù)是為每個(gè)指令匹配高品質(zhì)的回應(yīng)。
傳統(tǒng)上,人們傾向於依賴如GPT-4等更強(qiáng)大的教師模型來(lái)獲取這些回應(yīng),但這種方式不僅可能面臨版權(quán)許可的難題,而且外部模型並非總是觸手可及或準(zhǔn)確無(wú)誤。更重要的是,依賴外部模型可能引入教師與學(xué)生之間的分佈差異,這可能會(huì)影響最終結(jié)果的準(zhǔn)確性。
為了克服這些挑戰(zhàn),StarCoder2-15B-Instruct引進(jìn)了一種自我驗(yàn)證機(jī)制。這機(jī)制的核心概念是,讓StarCoder2-15B模型在產(chǎn)生自然語(yǔ)言回應(yīng)後,自行建立對(duì)應(yīng)的測(cè)試案例。這個(gè)過(guò)程類似於開(kāi)發(fā)人員編寫(xiě)程式碼後的自測(cè)流程。
具體而言,對(duì)於每一個(gè)指令,StarCoder2-15B會(huì)產(chǎn)生10個(gè)包含自然語(yǔ)言回應(yīng)和對(duì)應(yīng)測(cè)試案例的樣本。隨後,StarCoder2-15B-Instruct會(huì)在一個(gè)沙盒環(huán)境中執(zhí)行這些測(cè)試案例,以驗(yàn)證回應(yīng)的有效性。任何在執(zhí)行測(cè)試中失敗的樣本都會(huì)被過(guò)濾掉。
經(jīng)過(guò)這嚴(yán)格的篩選過(guò)程,StarCoder2-15B-Instruct會(huì)從每個(gè)指令的通過(guò)測(cè)試的回應(yīng)中隨機(jī)選取一個(gè),加入最終的SFT資料集。整個(gè)過(guò)程中,StarCoder2-15B-Instruct為238k個(gè)指令產(chǎn)生了總計(jì)240萬(wàn)個(gè)回應(yīng)樣本(每個(gè)指令10個(gè)樣本)。在採(cǎi)用0.7的採(cǎi)樣策略後,有50萬(wàn)個(gè)樣本成功通過(guò)了執(zhí)行測(cè)試。
為了確保資料集的多樣性和質(zhì)量,StarCoder2-15B-Instruct也進(jìn)行了去重處理。最終,剩下5萬(wàn)條指令,每個(gè)指令都配有一個(gè)隨機(jī)選取的、經(jīng)過(guò)測(cè)試驗(yàn)證的高品質(zhì)回應(yīng)。這些反應(yīng)構(gòu)成了StarCoder2-15B-Instruct最終的SFT資料集,為模型的後續(xù)訓(xùn)練和應(yīng)用提供了堅(jiān)實(shí)的基礎(chǔ)。
StarCoder2-15B-Instruct的卓越表現(xiàn)與全面評(píng)估
在備受矚目的EvalPlus基準(zhǔn)測(cè)試中,StarCoder2- 15B-Instruct憑藉其規(guī)模優(yōu)勢(shì),成功脫穎而出,成為表現(xiàn)最出色的自主可控大型模型。
它不僅超越了規(guī)模更大的Grok-1 Command-R+和DBRX,還與Snowflake Arctic 480B和Mixtral-8x22B-Instruct等業(yè)界翹楚性能相當(dāng)。
值得一提的是,StarCoder2-15B-Instruct是首個(gè)在HumanEval基準(zhǔn)上達(dá)到70+得分的自主代碼大模型,其訓(xùn)練過(guò)程完全透明,數(shù)據(jù)和方法的使用均符合法律法規(guī)。
在自主可控代碼大模型領(lǐng)域,StarCoder2-15B-Instruct顯著超越了之前的佼佼者OctoCoder,證明了其在該領(lǐng)域的領(lǐng)先地位。
即便與擁有限制性許可的大型強(qiáng)力模型如Gemini Pro和Mistral Large相比,StarCoder2-15B-Instruct依然展現(xiàn)出卓越的性能,并與CodeLlama-70B-Instruct平分秋色。更令人矚目的是,StarCoder2-15B-Instruct完全依賴于自生成數(shù)據(jù)進(jìn)行訓(xùn)練,其性能卻能與基于GPT-3.5/4數(shù)據(jù)微調(diào)的OpenCodeInterpreter-SC2-15B相媲美。
除了EvalPlus基準(zhǔn)測(cè)試,StarCoder2-15B-Instruct在LiveCodeBench和DS-1000等評(píng)估平臺(tái)上也展現(xiàn)出了強(qiáng)大的實(shí)力。
LiveCodeBench專注于評(píng)估2023年9月1日之后出現(xiàn)的編碼挑戰(zhàn),而StarCoder2-15B-Instruct在該基準(zhǔn)測(cè)試中取得了最優(yōu)成績(jī),并且始終領(lǐng)先于使用GPT-4數(shù)據(jù)進(jìn)行微調(diào)的OpenCodeInterpreter-SC2-15B
盡管DS-1000專注于數(shù)據(jù)科學(xué)任務(wù),StarCoder2-15B-Instruct在訓(xùn)練數(shù)據(jù)中涉及的數(shù)據(jù)科學(xué)問(wèn)題相對(duì)較少,但其在該基準(zhǔn)測(cè)試中的表現(xiàn)依然強(qiáng)勁,顯示出廣泛的適應(yīng)性和競(jìng)爭(zhēng)力。
StarCoder2-15B-Instruct-v0.1的突破與啟示
StarCoder2-15B-Instruct-v0.1的發(fā)布,標(biāo)志著研究者們?cè)诖a模型自我調(diào)優(yōu)領(lǐng)域邁出了重要一步。這款模型的成功實(shí)踐,打破了以往必須依賴如GPT-4等強(qiáng)大外部教師模型的限制,展示了通過(guò)自我調(diào)優(yōu)同樣能夠構(gòu)建出性能卓越的代碼模型。
StarCoder2-15B-Instruct-v0.1的核心在于其自我對(duì)齊策略在代碼學(xué)習(xí)領(lǐng)域的成功應(yīng)用。這一策略不僅提升了模型的性能,更重要的是,它賦予了模型更高的透明度和可解釋性。這一點(diǎn)與Snowflake-Arctic、Grok-1、Mixtral-8x22B、DBRX和CommandR+等其他大型模型形成了鮮明對(duì)比,這些模型雖然強(qiáng)大,但往往因缺乏透明度而限制了其應(yīng)用范圍和可信賴度。
更令人欣喜的是,StarCoder2-15B-Instruct-v0.1已經(jīng)將其數(shù)據(jù)集和整個(gè)訓(xùn)練流程——包括數(shù)據(jù)收集和訓(xùn)練過(guò)程——完全開(kāi)源。這一舉措不僅彰顯了研究者的開(kāi)放精神,也為未來(lái)該領(lǐng)域的研究和發(fā)展奠定了堅(jiān)實(shí)的基礎(chǔ)。
有理由相信,StarCoder2-15B-Instruct-v0.1的成功實(shí)踐將激發(fā)更多研究者投入到代碼模型自我調(diào)優(yōu)領(lǐng)域的研究中,推動(dòng)該領(lǐng)域的技術(shù)進(jìn)步和應(yīng)用拓展。同時(shí),也期待這一領(lǐng)域的更多創(chuàng)新成果能夠不斷涌現(xiàn),為人類社會(huì)的智能化發(fā)展注入新的動(dòng)力。
作者簡(jiǎn)介
UIUC的張令明老師是一位在軟件工程、程序語(yǔ)言和機(jī)器學(xué)習(xí)交叉領(lǐng)域具有深厚造詣的學(xué)者。他領(lǐng)導(dǎo)的課題組長(zhǎng)期致力于基于AI大模型的自動(dòng)軟件合成、修復(fù)和驗(yàn)證研究,以及機(jī)器學(xué)習(xí)系統(tǒng)的可靠性提升。
近期,團(tuán)隊(duì)發(fā)布了多個(gè)創(chuàng)新性的代碼大模型和測(cè)試基準(zhǔn)數(shù)據(jù)集,并率先提出了一系列基于大模型的軟件測(cè)試和修復(fù)技術(shù)。同時(shí),在多個(gè)真實(shí)軟件系統(tǒng)中成功挖掘出上千個(gè)新缺陷和漏洞,為提升軟件質(zhì)量做出了顯著貢獻(xiàn)。
以上是無(wú)需OpenAI數(shù)據(jù),躋身程式碼大模型榜單! UIUC發(fā)表StarCoder-15B-Instruct的詳細(xì)內(nèi)容。更多資訊請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

熱AI工具

Undress AI Tool
免費(fèi)脫衣圖片

Undresser.AI Undress
人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門(mén)文章

熱工具

記事本++7.3.1
好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強(qiáng)大的PHP整合開(kāi)發(fā)環(huán)境

Dreamweaver CS6
視覺(jué)化網(wǎng)頁(yè)開(kāi)發(fā)工具

SublimeText3 Mac版
神級(jí)程式碼編輯軟體(SublimeText3)

用戶語(yǔ)音輸入通過(guò)前端JavaScript的MediaRecorderAPI捕獲並發(fā)送至PHP後端;2.PHP將音頻保存為臨時(shí)文件後調(diào)用STTAPI(如Google或百度語(yǔ)音識(shí)別)轉(zhuǎn)換為文本;3.PHP將文本發(fā)送至AI服務(wù)(如OpenAIGPT)獲取智能回復(fù);4.PHP再調(diào)用TTSAPI(如百度或Google語(yǔ)音合成)將回復(fù)轉(zhuǎn)為語(yǔ)音文件;5.PHP將語(yǔ)音文件流式返回前端播放,完成交互。整個(gè)流程由PHP主導(dǎo)數(shù)據(jù)流轉(zhuǎn)與錯(cuò)誤處理,確保各環(huán)節(jié)無(wú)縫銜接。

在PHP中搭建社交分享功能的核心方法是通過(guò)動(dòng)態(tài)生成符合各平臺(tái)要求的分享鏈接。 1.首先獲取當(dāng)前頁(yè)面或指定的URL及文章信息;2.使用urlencode對(duì)參數(shù)進(jìn)行編碼;3.根據(jù)各平臺(tái)協(xié)議拼接生成分享鏈接;4.在前端展示鏈接供用戶點(diǎn)擊分享;5.動(dòng)態(tài)生成頁(yè)面OG標(biāo)籤優(yōu)化分享內(nèi)容展示;6.務(wù)必對(duì)用戶輸入進(jìn)行轉(zhuǎn)義以防止XSS攻擊。該方法無(wú)需複雜認(rèn)證,維護(hù)成本低,適用於大多數(shù)內(nèi)容分享需求。

要實(shí)現(xiàn)PHP結(jié)合AI進(jìn)行文本糾錯(cuò)與語(yǔ)法優(yōu)化,需按以下步驟操作:1.選擇適合的AI模型或API,如百度、騰訊API或開(kāi)源NLP庫(kù);2.通過(guò)PHP的curl或Guzzle調(diào)用API並處理返回結(jié)果;3.在應(yīng)用中展示糾錯(cuò)信息並允許用戶選擇是否採(cǎi)納;4.使用php-l和PHP_CodeSniffer進(jìn)行語(yǔ)法檢測(cè)與代碼優(yōu)化;5.持續(xù)收集反饋並更新模型或規(guī)則以提升效果。選擇AIAPI時(shí)應(yīng)重點(diǎn)評(píng)估準(zhǔn)確率、響應(yīng)速度、價(jià)格及對(duì)PHP的支持。代碼優(yōu)化應(yīng)遵循PSR規(guī)範(fàn)、合理使用緩存、避免循環(huán)查詢、定期審查代碼,並藉助X

PHP不直接進(jìn)行AI圖像處理,而是通過(guò)API集成,因?yàn)樗瞄L(zhǎng)Web開(kāi)發(fā)而非計(jì)算密集型任務(wù),API集成能實(shí)現(xiàn)專業(yè)分工、降低成本、提升效率;2.整合關(guān)鍵技術(shù)包括使用Guzzle或cURL發(fā)送HTTP請(qǐng)求、JSON數(shù)據(jù)編解碼、API密鑰安全認(rèn)證、異步隊(duì)列處理耗時(shí)任務(wù)、健壯錯(cuò)誤處理與重試機(jī)制、圖像存儲(chǔ)與展示;3.常見(jiàn)挑戰(zhàn)有API成本失控、生成結(jié)果不可控、用戶體驗(yàn)差、安全風(fēng)險(xiǎn)和數(shù)據(jù)管理難,應(yīng)對(duì)策略分別為設(shè)置用戶配額與緩存、提供prompt指導(dǎo)與多圖選擇、異步通知與進(jìn)度提示、密鑰環(huán)境變量存儲(chǔ)與內(nèi)容審核、雲(yún)存

PHP通過(guò)數(shù)據(jù)庫(kù)事務(wù)與FORUPDATE行鎖確保庫(kù)存扣減原子性,防止高並發(fā)超賣(mài);2.多平臺(tái)庫(kù)存一致性需依賴中心化管理與事件驅(qū)動(dòng)同步,結(jié)合API/Webhook通知及消息隊(duì)列保障數(shù)據(jù)可靠傳遞;3.報(bào)警機(jī)制應(yīng)分場(chǎng)景設(shè)置低庫(kù)存、零/負(fù)庫(kù)存、滯銷、補(bǔ)貨週期和異常波動(dòng)策略,並按緊急程度選擇釘釘、短信或郵件通知責(zé)任人,且報(bào)警信息需完整明確,以實(shí)現(xiàn)業(yè)務(wù)適配與快速響應(yīng)。

選擇合適AI語(yǔ)音識(shí)別服務(wù)並集成PHPSDK;2.用PHP調(diào)用ffmpeg將錄音轉(zhuǎn)為API要求格式(如wav);3.上傳文件至雲(yún)存儲(chǔ)並調(diào)用API異步識(shí)別;4.解析JSON結(jié)果並用NLP技術(shù)整理文本;5.生成Word或Markdown文檔完成會(huì)議記錄自動(dòng)化,全過(guò)程需確保數(shù)據(jù)加密、訪問(wèn)控制與合規(guī)性以保障隱私安全。

選擇AI寫(xiě)作API需考察穩(wěn)定性、價(jià)格、功能匹配度及是否有免費(fèi)試用;2.PHP用Guzzle發(fā)送POST請(qǐng)求並用json_decode處理返回的JSON數(shù)據(jù),注意捕獲異常和錯(cuò)誤碼;3.將AI內(nèi)容融入項(xiàng)目需建立審核機(jī)制並支持個(gè)性化定制;4.優(yōu)化性能可採(cǎi)用緩存、異步隊(duì)列和限流技術(shù),避免高並發(fā)下瓶頸。

PHP在智能客服中扮演連接器和大腦中樞角色,負(fù)責(zé)串聯(lián)前端輸入、數(shù)據(jù)庫(kù)存儲(chǔ)與外部AI服務(wù);2.實(shí)現(xiàn)時(shí)需構(gòu)建多層架構(gòu):前端接收用戶消息,PHP後端預(yù)處理並路由請(qǐng)求,先匹配本地知識(shí)庫(kù),未命中則調(diào)用外部AI服務(wù)如OpenAI或Dialogflow獲取智能回復(fù);3.會(huì)話管理由PHP寫(xiě)入MySQL等數(shù)據(jù)庫(kù),保障上下文連續(xù)性;4.集成AI服務(wù)需用Guzzle發(fā)送HTTP請(qǐng)求,安全存儲(chǔ)APIKey,做好錯(cuò)誤處理與響應(yīng)解析;5.數(shù)據(jù)庫(kù)設(shè)計(jì)需包含會(huì)話、消息、知識(shí)庫(kù)、用戶表,合理建索引、保障安全與性能,支撐機(jī)器人記憶
