Google推出開(kāi)源代碼大模型CodeGemma:AI編程新紀(jì)元,代碼自動(dòng)完成和生成技術(shù)再升級(jí) 精華
- 論文標(biāo)題: CodeGemma: Open Code Models Based on Gemma
- 機(jī)構(gòu): Google LLC
- 論文鏈接: https://arxiv.org/pdf/2406.11409.pdf
CodeGemma模型概述
CodeGemma是基于Google DeepMind的Gemma模型系列(Gemma Team et al., 2024)開(kāi)發(fā)的一系列開(kāi)放代碼模型。這些模型繼承了Gemma預(yù)訓(xùn)練模型的基礎(chǔ),并在此基礎(chǔ)上進(jìn)一步訓(xùn)練,使用的數(shù)據(jù)主要是代碼,訓(xùn)練數(shù)據(jù)量在5000億到1000億token之間。CodeGemma模型在代碼完成和生成任務(wù)中達(dá)到了最先進(jìn)的性能,同時(shí)在大規(guī)模情況下仍保持強(qiáng)大的理解和推理能力。
CodeGemma發(fā)布了三種模型:一個(gè)7B的代碼預(yù)訓(xùn)練模型,一個(gè)7B的指令調(diào)優(yōu)代碼模型,以及一個(gè)專門為代碼填充和開(kāi)放式生成訓(xùn)練的2B模型。這些模型的系譜在文中的圖1中有所展示。
在發(fā)布的第一個(gè)版本(v1.0)中,包括了所有三種模型,隨后在一個(gè)月后的第二個(gè)版本(v1.1)中,對(duì)預(yù)訓(xùn)練的2B模型和指令調(diào)優(yōu)的7B模型進(jìn)行了更新。如果速度不是關(guān)鍵考慮因素,建議使用v1.1版本,因?yàn)樗谫|(zhì)量上有較好的平衡提升。
模型訓(xùn)練和數(shù)據(jù)處理
1. 數(shù)據(jù)處理和預(yù)訓(xùn)練
所有CodeGemma v1.0模型都是在主要由英語(yǔ)網(wǎng)頁(yè)文檔、數(shù)學(xué)和代碼組成的5000億token數(shù)據(jù)上進(jìn)一步訓(xùn)練的。2B v1.1模型則在1萬(wàn)億token上訓(xùn)練。所有2B模型都是100%使用代碼訓(xùn)練的,而7B模型則是80%代碼和20%自然語(yǔ)言的混合。我們的代碼語(yǔ)料庫(kù)來(lái)源于公開(kāi)可用的代碼倉(cāng)庫(kù)。數(shù)據(jù)集經(jīng)過(guò)去重和過(guò)濾,以移除評(píng)估代碼中的污染以及某些個(gè)人和敏感數(shù)據(jù)。除了Gemma的處理步驟外,我們還為代碼數(shù)據(jù)執(zhí)行了額外的預(yù)訓(xùn)練步驟。
2. 指令調(diào)優(yōu)
指令調(diào)優(yōu)的7B v1.1模型與其1.0版本不同之處在于使用的強(qiáng)化學(xué)習(xí)算法(基于Gemma 1.1)和合成數(shù)據(jù)生成的具體細(xì)節(jié)。這些模型都遵循以下的一般方向。
為了提高模型與現(xiàn)實(shí)世界應(yīng)用的一致性,我們通過(guò)將代碼倉(cāng)庫(kù)中最相關(guān)的源文件共同定位,并盡最大努力將它們分組到相同的訓(xùn)練示例中來(lái)創(chuàng)建訓(xùn)練示例。具體來(lái)說(shuō),我們采用了兩種啟發(fā)式方法:基于依賴圖的打包和基于單元測(cè)試的詞匯打包。
為了構(gòu)建依賴圖,我們首先按倉(cāng)庫(kù)對(duì)文件進(jìn)行分組。對(duì)于每個(gè)源文件,我們從頂部N行中提取導(dǎo)入,并執(zhí)行后綴匹配以確定在倉(cāng)庫(kù)結(jié)構(gòu)中最長(zhǎng)的匹配路徑。我們確定文件之間的邊緣重要性(一種啟發(fā)式測(cè)量),并移除不重要的邊緣以打破循環(huán)依賴(在Python中常見(jiàn))。然后,我們計(jì)算圖中所有對(duì)的最短路徑,其中較短的距離表示文件關(guān)系更強(qiáng)。最后,我們使用拓?fù)渑判驅(qū)ξ募D進(jìn)行線性化,選擇基于到已排序節(jié)點(diǎn)的最小距離的下一個(gè)無(wú)父節(jié)點(diǎn),并使用字典順序來(lái)打破平局。
模型性能評(píng)估
1. 代碼完成和生成任務(wù)的性能
CodeGemma模型在代碼完成和生成任務(wù)中表現(xiàn)出色。特別是,2B預(yù)訓(xùn)練模型在代碼完成任務(wù)中表現(xiàn)突出,其低延遲特性對(duì)于需要快速響應(yīng)的用例非常關(guān)鍵。此外,7B模型在代碼生成任務(wù)中也顯示了強(qiáng)大的性能,尤其是在多語(yǔ)言代碼生成方面,如BabelCode測(cè)試所示(表4)。這些模型在HumanEval和Mostly Basic Python Problems基準(zhǔn)測(cè)試中的表現(xiàn)(表3)進(jìn)一步驗(yàn)證了其優(yōu)越性。
2. 自然語(yǔ)言理解能力
CodeGemma模型保留了基礎(chǔ)Gemma模型的自然語(yǔ)言處理能力。在自然語(yǔ)言理解方面,CodeGemma的表現(xiàn)優(yōu)于多個(gè)同類模型,例如Mistral 7B和Llama-2 13B模型。這一優(yōu)勢(shì)體現(xiàn)在多個(gè)自然語(yǔ)言處理基準(zhǔn)測(cè)試中,如BoolQ和PIQA(Clark et al., 2019; Bisk et al., 2019)。這些能力使得CodeGemma模型不僅在代碼相關(guān)任務(wù),也在需要理解和生成自然語(yǔ)言的任務(wù)中表現(xiàn)出色。
3. 數(shù)學(xué)推理能力
CodeGemma模型在數(shù)學(xué)推理能力方面也顯示出卓越的性能。通過(guò)在多個(gè)數(shù)學(xué)數(shù)據(jù)集上進(jìn)行訓(xùn)練,如Math Dataset和MathQA,模型的數(shù)學(xué)問(wèn)題解決能力得到了顯著提升。這些數(shù)據(jù)集包括從數(shù)學(xué)競(jìng)賽中收集的問(wèn)題以及基于程序生成的代數(shù)問(wèn)題,這些訓(xùn)練幫助模型在復(fù)雜的數(shù)學(xué)推理任務(wù)中表現(xiàn)優(yōu)異(表5)。
實(shí)際應(yīng)用和部署
CodeGemma模型的設(shè)計(jì)使其非常適合在實(shí)際應(yīng)用和部署中使用。2B模型由于其快速的代碼填充能力,特別適合集成到集成開(kāi)發(fā)環(huán)境(IDE)和本地環(huán)境中。這一模型在內(nèi)存和響應(yīng)速度方面的優(yōu)化,使其成為開(kāi)發(fā)者的有力工具。
7B模型則因其在代碼任務(wù)和自然語(yǔ)言理解任務(wù)中的強(qiáng)大表現(xiàn),更適合部署在托管環(huán)境中,如云計(jì)算平臺(tái)。這些模型在處理大規(guī)模和復(fù)雜的代碼生成和理解任務(wù)時(shí),能夠提供高質(zhì)量的輸出。
在部署這些模型時(shí),需要注意的是,應(yīng)選擇合適的輸出停止策略以適應(yīng)部署環(huán)境。例如,可以使用生成FIM哨兵令牌的方法來(lái)截?cái)噍敵觯源_保生成的代碼質(zhì)量和一致性。
總之,CodeGemma模型系列通過(guò)在代碼生成、自然語(yǔ)言理解和數(shù)學(xué)推理等多個(gè)方面的出色表現(xiàn),為各種實(shí)際應(yīng)用場(chǎng)景提供了強(qiáng)大的支持。
模型的優(yōu)勢(shì)和局限性
1. 模型的優(yōu)勢(shì)
CodeGemma模型在代碼生成和理解方面展現(xiàn)出了顯著的優(yōu)勢(shì)。這些模型不僅在自然語(yǔ)言處理任務(wù)中保持了強(qiáng)大的性能,而且在數(shù)學(xué)推理方面也顯示出了卓越的能力。例如,CodeGemma 7B模型在多種編程語(yǔ)言的代碼生成任務(wù)中表現(xiàn)優(yōu)異,這一點(diǎn)在BabelCode的評(píng)估中得到了驗(yàn)證(見(jiàn)表4)。此外,這些模型在處理大規(guī)模代碼數(shù)據(jù)集時(shí),能夠有效地進(jìn)行代碼補(bǔ)全和生成,特別是2B預(yù)訓(xùn)練模型在低延遲場(chǎng)景下表現(xiàn)出了極高的效率,這對(duì)于集成開(kāi)發(fā)環(huán)境(IDEs)等應(yīng)用場(chǎng)景非常關(guān)鍵。
2. 模型的局限性
盡管CodeGemma模型在多個(gè)方面表現(xiàn)出色,但它們也存在一些局限性。首先,盡管7B模型在代碼任務(wù)中表現(xiàn)優(yōu)異,但其在推理時(shí)需要較大的內(nèi)存,這可能限制了它們?cè)谫Y源受限的環(huán)境中的應(yīng)用。此外,根據(jù)Gemma團(tuán)隊(duì)的報(bào)告,所有模型都在處理某些特定類型的代碼或語(yǔ)言結(jié)構(gòu)時(shí)存在一定的局限性,尤其是在跨文件代碼依賴關(guān)系的自動(dòng)補(bǔ)全方面。此外,雖然模型在數(shù)學(xué)問(wèn)題解決方面表現(xiàn)良好,但在一些高難度的數(shù)學(xué)問(wèn)題上,模型的解決能力仍有待提高。
本文轉(zhuǎn)載自 ??AI論文解讀??,作者: 柏企科技圈
