【資料圖】
機(jī)器之心報(bào)道機(jī)器之心編輯部
大型語(yǔ)言模型 (LLMs) 最近在代碼層面的一系列下游任務(wù)中表現(xiàn)十分出彩。通過(guò)對(duì)大量基于代碼的數(shù)據(jù) (如 GitHub 公共數(shù)據(jù)) 進(jìn)行預(yù)訓(xùn)練,LLM 可以學(xué)習(xí)豐富的上下文表征,這些表征可以遷移到各種與代碼相關(guān)的下游任務(wù)。但是,許多現(xiàn)有的模型只能在一部分任務(wù)中表現(xiàn)良好,這可能是架構(gòu)和預(yù)訓(xùn)練任務(wù)限制造成的。 從架構(gòu)的角度來(lái)看,現(xiàn)有的 LLMs 通常采用純編碼器或純解碼器的模型,這些模型通常只在一些理解或生成任務(wù)上執(zhí)行的效果出色。純編碼模型通常適用于理解文本、代碼檢索之類(lèi)的任務(wù),而生成代碼類(lèi)的生成任務(wù)用純解碼器模型能有更出色的性能表現(xiàn)。并且,最近的一些模型用編碼器 - 解碼器這種更統(tǒng)一的架構(gòu)來(lái)應(yīng)對(duì)不同的任務(wù)。雖然這些模型可以同時(shí)支持理解型、生成型任務(wù),但在特定任務(wù)中沒(méi)法達(dá)到最佳性能。在檢索和代碼完成任務(wù)上,編碼器 - 解碼器模型還是不如最先進(jìn) (SOTA) 的純編碼器和純解碼器基線。單模塊架構(gòu)雖然通常可以適用于所有任務(wù),但它的局限性也會(huì)導(dǎo)致編碼器 - 解碼器模型的不足??傊惹暗姆椒ㄔ谠O(shè)計(jì)時(shí)并沒(méi)有考慮如何讓單個(gè)組件可以被激活以更好地適應(yīng)不同類(lèi)型的下游任務(wù)。 從學(xué)習(xí)對(duì)象的角度來(lái)看,目前的模型通常采用一組有限的預(yù)訓(xùn)練任務(wù)。由于預(yù)訓(xùn)練和微調(diào)階段的差異,這些預(yù)訓(xùn)練任務(wù)會(huì)使一些下游任務(wù)性能下降。例如,基于 T5 的模型通常以跨度去噪目標(biāo)進(jìn)行訓(xùn)練。然而,在代碼生成等下游任務(wù)中,大多數(shù)最先進(jìn)的模型都是用下一個(gè) token 預(yù)測(cè)目標(biāo)進(jìn)行預(yù)訓(xùn)練的,該目標(biāo)可以逐 token 自回歸地預(yù)測(cè)處理。學(xué)習(xí)對(duì)比代碼表征對(duì)于理解文本、代碼檢索等任務(wù)至關(guān)重要,但許多模型沒(méi)有接受過(guò)這一方面訓(xùn)練。盡管近期一些研究嘗試引入對(duì)比學(xué)習(xí)任務(wù)來(lái)緩解這個(gè)問(wèn)題,但這些方法忽略了文本和代碼表征之間的細(xì)粒度跨模態(tài)對(duì)齊。 為解決上述限制,來(lái)自 Salesforce 的研究者提出了「CodeT5+」—— 一個(gè)新的基礎(chǔ) LLM 系列編碼器 - 解碼器,可用于廣泛的代碼理解和生成任務(wù)。 論文地址:https://arxiv.org/pdf/2305.07922.pdf 項(xiàng)目地址:https://github.com/salesforce/CodeT5/tree/main/CodeT5%2B CodeT5 + 是基于編碼器 - 解碼器的模型,但可以靈活地在純編碼器、純解碼器以及編碼器 - 解碼器模式下操作,來(lái)適應(yīng)不同的下游應(yīng)用??傮w架構(gòu)如下圖 1: 這種靈活性是基于預(yù)訓(xùn)練任務(wù)實(shí)現(xiàn)的,包括代碼數(shù)據(jù)上的跨度去噪和因果語(yǔ)言建模 (CLM) 任務(wù),以及文本 - 代碼對(duì)比學(xué)習(xí)、匹配和文本 - 代碼數(shù)據(jù)上的 CLM 任務(wù)。如此廣泛的預(yù)訓(xùn)練任務(wù)可以幫助在代碼和文本數(shù)據(jù)中學(xué)習(xí)豐富的表征,并彌合各種應(yīng)用中的預(yù)訓(xùn)練 - 微調(diào)差距。研究者發(fā)現(xiàn),將匹配任務(wù)與對(duì)比學(xué)習(xí)相結(jié)合,對(duì)于捕捉細(xì)粒度的文本 - 代碼對(duì)齊和提高檢索性能至關(guān)重要。 通過(guò)利用現(xiàn)成的 LLM 代碼來(lái)初始化 CodeT5 + 的組件,用高效計(jì)算的預(yù)訓(xùn)練策略來(lái)擴(kuò)展 CodeT5 + 的模型大小。CodeT5 + 采用了「淺編碼器和深解碼器」架構(gòu),其中編碼器和解碼器都從預(yù)訓(xùn)練的 checkpoints 中進(jìn)行初始化,并由交叉注意力層連接。此外,該研究還凍結(jié)了深度解碼器 LLM,只訓(xùn)練淺層編碼器和交叉注意力層,從而大大減少了有效調(diào)優(yōu)的可訓(xùn)練參數(shù)數(shù)量。最后,受 NLP 領(lǐng)域的啟發(fā),研究者開(kāi)始探索 CodeT5 + 在指令調(diào)優(yōu)上的效果,以更好地使模型與自然語(yǔ)言指令保持一致。 該研究在 20 多個(gè)與代碼相關(guān)的基準(zhǔn)測(cè)試中對(duì) CodeT5 + 進(jìn)行了廣泛的評(píng)估,包括零樣本、微調(diào)和指令調(diào)優(yōu)。結(jié)果表明,與 SOTA 基線相比,CodeT5 + 在許多下游任務(wù)上有著實(shí)質(zhì)性的性能提升,例如,8 個(gè)文本到代碼檢索任務(wù) (+3.2 avg. MRR), 2 個(gè)行級(jí)代碼補(bǔ)全任務(wù) (+2.1 avg. Exact Match) 和 2 個(gè)檢索增強(qiáng)代碼生成任務(wù) (+5.8 avg. BLEU-4)。 在 MathQA 和 GSM8K 基準(zhǔn)上的兩個(gè)數(shù)學(xué)編程任務(wù)中,低于十億參數(shù)大小的 CodeT5 + 模型明顯優(yōu)于許多多達(dá) 137B 參數(shù)的 LLM。特別是,在 HumanEval 基準(zhǔn)上的零樣本文本到代碼生成任務(wù)中,指令調(diào)優(yōu)后的 CodeT5+ 16B 與其他開(kāi)源代碼 LLM 相比,達(dá)到了新的 SOTA 結(jié)果,為 35.0% pass@1 和 54.5% pass@10,甚至超過(guò)了閉源 OpenAI code- cusherman -001 模型。最后,該研究發(fā)現(xiàn) CodeT5 + 可以無(wú)縫的看作半?yún)?shù)檢索增強(qiáng)生成系統(tǒng),在代碼生成方面明顯優(yōu)于其他類(lèi)似方法。所有的 CodeT5 + 模型都將開(kāi)源,以支持研究和開(kāi)發(fā)者社區(qū)。 CodeT5+:開(kāi)源大型語(yǔ)言模型本文開(kāi)發(fā)了 CodeT5+,一個(gè)新的開(kāi)源代碼大型語(yǔ)言模型家族,用于代碼理解和生成任務(wù)?;诰幋a器 - 解碼器架構(gòu),CodeT5 + 通過(guò)本文提出的在單模態(tài)和雙模態(tài)數(shù)據(jù)上混合預(yù)訓(xùn)練目標(biāo)的方式,增強(qiáng)了在不同下游任務(wù)中以不同模式運(yùn)行的靈活性。 架構(gòu)細(xì)節(jié)預(yù)訓(xùn)練細(xì)節(jié)在單模態(tài)預(yù)訓(xùn)練階段,研究者使用大量的代碼數(shù)據(jù),用計(jì)算高效的目標(biāo)預(yù)訓(xùn)練模型。在雙模態(tài)預(yù)訓(xùn)練階段,繼續(xù)用較小的具有跨模態(tài)學(xué)習(xí)目標(biāo)的代碼 - 文本數(shù)據(jù)集預(yù)訓(xùn)練模型。對(duì)于每個(gè)階段,使用相同的權(quán)重聯(lián)合優(yōu)化多個(gè)預(yù)訓(xùn)練目標(biāo)。 研究者發(fā)現(xiàn)這種分階段訓(xùn)練方法可以有效地讓模型接觸更多樣化的數(shù)據(jù),以學(xué)習(xí)豐富的上下文表征。此外,他們探索了用現(xiàn)成的代碼 LLM 初始化 CodeT5+,以有效地?cái)U(kuò)展模型。最后,CodeT5 + 中的模型組件可以動(dòng)態(tài)組合以適應(yīng)不同的下游應(yīng)用任務(wù)。 實(shí)驗(yàn)研究者實(shí)現(xiàn)了一系列 CodeT5 + 模型,模型大小從 220M 到 16B 不等。 CodeT5+ 220M 和 770M 采用與 T5 相同的架構(gòu),并從頭開(kāi)始進(jìn)行預(yù)訓(xùn)練,而 CodeT5+ 2B、6B、16B 采用「淺層編碼器和深層解碼器」架構(gòu),編碼器分別從 CodeGen-mono 350M 初始化,解碼器從 CodeGen-mono 2B、6B、16B 初始化。研究者將 CodeT5 + 與 SOTA 代碼模型進(jìn)行了比較,這些 LLM 可以分為 3 種類(lèi)型:純編碼器、純解碼器和編碼器 - 解碼器模型。 文本到代碼生成任務(wù)的零樣本評(píng)估在給定自然語(yǔ)言規(guī)范的情況下,研究者評(píng)估了模型在零樣本設(shè)置下生成 Python 代碼的能力,通過(guò)在單元測(cè)試中測(cè)試生成的代碼來(lái)評(píng)估模型性能。表 2 中展示了合格率 pass@k。 評(píng)估數(shù)學(xué)編程任務(wù)研究者同時(shí)考察了其他代碼生成任務(wù),特別是兩個(gè)數(shù)學(xué)編程基準(zhǔn) MathQAPython 和 GSM8K 。如表 3 所示,CodeT5 + 取得了顯著的性能提升,超過(guò)了許多更大規(guī)模的代碼 LLM。 圖 6 展示了通過(guò) MathQA-Python 上數(shù)學(xué)編程問(wèn)題的復(fù)雜性來(lái)分析模型性能。對(duì)于每個(gè)問(wèn)題,提取解決問(wèn)題所需的推理步驟數(shù)。與 CodeT5 相比,CodeT5 + 對(duì)問(wèn)題的復(fù)雜性 (即所需的推理步驟數(shù)量) 更魯棒。 評(píng)估代碼摘要任務(wù)代碼摘要任務(wù)旨在將代碼片段總結(jié)為自然語(yǔ)言文檔字符串。研究者使用了六種編程語(yǔ)言的 Clean 版本的 CodeSearchNet 數(shù)據(jù)集來(lái)評(píng)估這項(xiàng)任務(wù)的模型。 從表 4 中可以發(fā)現(xiàn),編碼器 - 解碼器模型 (CodeT5 和 CodeT5+) 的性能通常優(yōu)于純編碼器模型、純解碼器模型以及 UniLM-style 的模型 UniXcoder 。 評(píng)估代碼補(bǔ)全任務(wù)研究者通過(guò) line-level 補(bǔ)全任務(wù)評(píng)估了 CodeT5 + 僅解碼器的生成能力,旨在根據(jù)上下文完成下一行代碼。 如表 5 所示,CodeT5+(在純解碼器的模式下) 和純解碼器模型 (top block) 的性能都明顯優(yōu)于編碼器 - 解碼器模型(the middle block),驗(yàn)證了純解碼器的模型可以更好地適應(yīng)代碼補(bǔ)全任務(wù)。 評(píng)估文本到代碼的檢索任務(wù)研究者還通過(guò)跨多個(gè) PL 的文本到代碼檢索任務(wù)評(píng)估 CodeT5 + 的代碼理解能力。 從表 6 中可以看出,CodeT5+ 220M 明顯優(yōu)于所有現(xiàn)有的純編碼器 / 純解碼器模型 (頂部塊) 和編碼器 - 解碼器模型 (中間塊)。 更多研究細(xì)節(jié),可參考原論文。?THE END
轉(zhuǎn)載請(qǐng)聯(lián)系本公眾號(hào)獲得授權(quán)
投稿或?qū)で髨?bào)道:content@jiqizhixin.com
標(biāo)簽: