7B超越百億級,北大開源aiXcoder-7B最強程式碼大模型,企業部署最佳選擇

机器之心發表於2024-04-10

對程式碼大模型而言,比能做程式設計題更重要的,是看是能不能適用於企業級專案開發,是看在實際軟體開發場景中用得順不順手、成本高不高、能否精準契合業務需求,後者才是開發者關心的硬實力。


當下,大語言模型整合至程式設計領域、完成程式碼生成與補全任務成為重要趨勢。業界已經出現了一批引人矚目的程式碼大模型,比如 OpenAI 的 CodeX、谷歌 DeepMind 的 AlphaCode、HuggingFace 的 StarCoder,幫助程式設計師更迅捷、更準確、更高質量地完成編碼任務,大幅提升效率。

有這樣一支研發團隊,在 10 年前便開始了將深度學習用於軟體開發的探索,並在程式碼理解和程式碼生成領域雙雙全球領先。他們就是來自北京大學軟體工程研究所的 aiXcoder 團隊(簡稱 aiXcoder 團隊),此次為開發者帶來了新的高效編碼利器。

4 月 9 日,該團隊開源了全自研 aiXcoder 7B 程式碼大模型,不僅在程式碼生成和補全任務中大幅領先同量級甚至超越 15B、34B 引數量級的程式碼大模型;還憑藉其在個性化訓練、私有化部署、定製化開發方面的獨有優勢,成為最適合企業應用、最能滿足個性化開發需求的程式碼大模型。

aiXcoder 7B 的全部模型引數和推理程式碼均已開源,可以透過 GitHub、Hugging Face、Gitee 和 GitLink 等平臺訪問。

「耳聽為虛眼見為實」,一切還是要用真實的測評資料和實際的任務效果說話。


越級體驗
能其他程式碼大模型所不能

一個程式碼大模型究竟好不好用, 當然要在對程式設計師最有幫助、用的最多的程式碼生成與補全任務中來驗證。

先看程式碼生成比較結果,在 OpenAI HumanEval(由 164 道 Python 程式設計問題組成)、谷歌 MBPP(由 974 個 Python 程式設計問題組成)和 HuggingFace MultiPL-E(包含了 18 種程式語言)等程式碼生成效果評估測試集上,aiXcoder 7B 版的準確率遠超當前主流程式碼大模型,成為十億乃至百億級引數中最強。

圖片

除了在 HumanEval 這樣偏向非真實開發場景的測試集上取得準確率新 SOTA,aiXcoder 7B 在程式碼補全等真實開發場景中的表現更是可圈可點,比如寫好上文讓程式碼大模型補下文或者跨檔案引用已經定義好的方法、函式、類等。

同樣用資料說話,在考慮上下文的單行補全測評集 SantaCoder 上,aiXcoder 7B Base 版在與 StarCoder 2、CodeLlama 7B/13B、DeepSeekCoder 7B 等主流同量級開源模型的較量中取得最佳效果,成為最適合實際程式設計場景的程式碼補全基礎模型。具體如下表所示:

圖片

aiXcoder 7B Base 版的補全效果最好,不單單是準確率更高,還在實際執行中表現出了其他程式碼大模型沒有或者遜於自己的能力。實現這些的背後是一系列針對程式碼特性的創新訓練方法,正是它們使得 aiXcoder 7B Base 版脫穎而出。

首先,aiXcoder 7B Base 版在預訓練時提供了 32k 的上下文長度,這在現有 7B 引數量級程式碼大模型中為最大,其他多為 16k。不僅如此,透過插值的方法可以直接在推理時將上下文長度擴充套件到 256k,並在理論上有能力擴充套件至更長。

在同量級模型中擁有最大預訓練上下文長度,並可彈性擴充套件,成為提升 aiXcoder 7B Base 版程式碼補全效果的重要基礎。

其次,aiXcoder 7B Base 版在程式碼補全過程中「知道」使用者什麼時候需要生成程式碼,並在程式碼內容已經完整不需要再生成時自動停止。這成為該模型比較獨特的功能,其他很多程式碼大模型無法做到這一點。

aiXcoder 團隊表示,該功能在技術上的實現離不開結構化 Span 技術。在模型訓練中,透過結構化 Span 技術來構建訓練資料和相關任務,讓模型學習到使用者應該在什麼時候生成程式碼或者補全的內容在語法和語義結構上是否完整。

這也就意味著 aiXcoder 7B Base 版能自動「知道」自己推理到了什麼位置,而其他模型想要終止的話,需要人為設定終止條件。自動推理則少了這種麻煩,有助於提升工作效率。

此外,在 aiXcoder 擴充套件基準測試集(aiXcoder Bench)上,aiXcoder 7B Base 版表現出了相較於其他程式碼大模型的又一大亮點,即傾向於使用較短程式碼來完成使用者指定的任務

詳細結果如下表所示,在針對 Java、C++、JavaScript 和 Python 程式語言的程式碼補全測評時,aiXcoder 7B Base 不僅效果最好,四處紅框圈出的生成答案長度明顯短於其他競品模型,並且非常接近甚至有時比標準答案(Ref)還要短。

圖片

aiXcoder 團隊指出,這一後驗發現仍離不開結構化 Span 技術。他們在整個訓練過程中特別注重程式碼結構,而結構化 Span 按照程式碼結構對程式碼進行拆分,這更有益於體現程式碼的語義,最終促成了模型「短」答案的同時效果又佔優。

除了在以上單檔案上下文程式碼補全任務中的卓越表現,aiXcoder 7B Base 版在跨多檔案補全場景中的表現同樣更勝一籌,不僅針對多檔案的程式設計效果提升最優,還在下表 CrossCodeEval 測評集上有了一個重要發現。

據 aiXcoder 團隊介紹,該模型在只透過游標上文搜尋到的結果作為 prompt(只看當前編寫的上文),同時其他模型拿 GroundTruth(把包含答案的檔案給到這些模型)搜尋到的結果作為 prompt,在這種條件下,前者的效果依然要強於後者。

如何做到的呢?對於其他模型來說,即使有更多的上下文資訊,它們也搞不清楚哪些是最核心、最關鍵的。而 aiXcoder 7B Base 版能從上下文件中揀出對當前編寫程式碼最有效、最核心的上下文細節,所以才有好的效果。

這裡感知到哪些資訊最有效最為關鍵,透過對上下文進一步資訊處理,結合檔案相關內容的聚類、程式碼 Calling Graph 來構建多檔案之間的相互注意力關係,進而獲取到對當前補全或生成任務最關鍵的資訊。

圖片

所有這些創新性訓練方法很大程度上決定了 aiXcoder 7B Base 版能夠在眾多程式碼大模型的比拼中勝出。此外, 1.2T 的高質量訓練資料同樣功不可沒,這一量級不僅在同型別模型中最大,還是獨有 token 資料。

其中 600G 優先放入的高質量資料對模型效果起了重要作用,其他資料主要來自 GitHub,以及 Stack Overflow、Gitee 等,自然語言部分還包括了一部分 CSDN 資料,並且全部資料進行了過濾處理。

Talk is cheap, Show me the code

顯然,aiXcoder 7B Base 版在測評資料上贏了其他程式碼大模型,但究竟能不能高效地幫助開發者完成編碼任務?還是要看實戰效果。

先看生成能力,對於前端開發,aiXcoder 7B Base 版可以透過註釋快速地生成對應網頁:
圖片
還可以處理高難度演算法題,比如經典的分糖果問題,透過貪心的策略,以左右兩次遍歷的方式得到最少糖果數。

圖片

再來看 aiXcoder 7B Base 版更得心應手的程式碼補全場景,比如長上下文補全。這裡用多個工具函式拼成 1500 多行的程式碼,要求模型在檔案末端進行註釋補全,模型識別到了檔案頂部的相關函式,併成功地結合函式資訊補全了相關方法:
圖片
還有以下跨檔案補全任務,在樹結構上應用動態規劃來實現編輯距離搜尋。模型補全的程式碼識別到了編輯距離的計算與另一個檔案中滾動陣列內部取最小值的計算之間的關係,並給出了正確的預測結果:
圖片
當然還可以智慧化匹配輸出長度。當使用者調整自己的採納內容時,模型能夠根據當前的採納情況自動調整補全長度:
圖片
一句話,有了 aiXcoder 7B Base 版程式碼大模型,無論是程式碼生成還是補全,程式設計師多了一個效率提升利器,節省時間,事半功倍。

拼效果,更拼應用
用核心競爭力成為企業首選

我們已經看到,aiXcoder 7B Base 版在程式碼補全這樣的真實開發場景中充分展現了自身的硬實力。不過,對於企業客戶來說,程式碼大模型只是效果好並不能完全打動他們。只有全方位滿足自身需求,企業客戶才會毫不猶豫地下手。

aiXcoder 7B Base 版正是奔著企業需要、解決他們的個性化需求來的。打造最適合企業應用的程式碼大模型,成為了 aiXcoder 7B Base 版的首要目標和有別於其他模型的又一核心優勢。

當然,想要成為企業應用的最佳選擇並不容易,必須圍繞著企業業務場景、需求、所能承擔的成本等實際情況做深文章。aiXcoder 模型不僅這樣做了,而且做到了極致。

簡而言之,為了實現企業級個性化的應用落地,aiXcoder 模型在私有化部署、個性化訓練和定製化開發三個方面齊發力,打造出了相較於其他程式碼大模型的核心優勢。

首先來看私有化部署。對於企業而言,程式碼大模型在本地伺服器的私有化部署和執行,首要考慮的是自身算力是否可以支撐。在這點上,aiXcoder 模型對企業 GPU 資源要求少,應用成本投入低,讓部署模型門檻大大降低。

此外,不同企業擁有的軟硬體各異,既會有國產晶片,也會有國外如英偉達顯示卡。基於此,aiXcoder 模型進行針對性硬體適配以及進一步模型訓練和推理最佳化,比如在資訊處理層面採用快取記憶體技術,充分滿足多樣化部署要求。

其次也是 aiXcoder 模型著重強調的個性化訓練。我們知道,企業的實際情況不能一概而論,而 aiXcoder 模型做到了見招拆招,提供了「一攬子」的個性化模型訓練解決方案。

一方面構建企業專屬資料集和測評集,其中資料集構建基於企業程式碼特徵和員工編碼習慣,專門對程式碼及相關文件進行資料預處理;測評集構建則以真實開發場景為準繩,模擬並評估模型在實際應用中的預期效果。

另一方面,將企業程式碼這一內因與企業算力資源這一外因相結合,充分考慮到不同企業計算資源、程式碼量的多寡,為他們提供靈活的個性化訓練及最佳化方案,最大化提升專屬程式碼大模型的前期訓練效果和後續應用效果。

第三是定製化開發。aiXcoder 模型瞄準不同行業和企業的實際情況,結合企業個性化需求來為他們提供靈活的定製化服務。憑藉豐富和成熟的定製開發經驗,讓基於企業程式碼和計算資源打造的模型高度契合實際需求,讓業務效率的提升看得見摸得著。目前,客戶已經遍佈銀行、證券、保險、軍工、運營商、能源、交通等多個行業。

可以看到,相較於其他程式碼大模型,aiXcoder 能同時為企業提供個性化訓練的產品和服務,這在業內是唯一一個

背後團隊
十年深耕、厚積薄發

此次 aiXcoder 7B Base 版程式碼大模型展現出來的編碼能力,讓我們更加好奇模型背後的團隊。

據瞭解,aiXcoder 團隊從 2013 年開始了基於深度學習的程式碼分析研究,是全球最早將深度學習技術應用於程式碼生成與程式碼理解領域的團隊。

十年來,團隊在 NeurIPS、ACL、IJCAI、ICSE、FSE、ASE 等頂會上發表相關論文 100 餘篇,多篇論文被國際學者認為是「首創成果」並被廣泛引用,多次獲 ACM 傑出論文獎。

2017 年,aiXcoder 有了雛形,並在 2018 年正式釋出 aiXcoder 1.0,提供程式碼自動補全與搜尋功能。

圖片

2021 年 4 月,團隊推出完全自主智慧財產權的十億級引數程式碼大模型 aiXcoder L 版,支援程式碼補全和自然語言推薦。這也是國內⾸個基於「⼤模型」的智慧程式設計商⽤產品。

而後,團隊持續攻堅,2022 年 6 月再次推出了國內首個支援方法級程式碼生成的模型 aiXcoder XL 版,同樣具有完全自主智慧財產權。

2023 年 8 月,聚焦企業適配的 aiXcoder Europa 上線,可以根據企業的資料安全和算力要求,為他們提供私有化部署和個性化訓練服務,有效降低程式碼大模型的應用門檻,提升開發效率。

到了此次,aiXcoder 團隊開源 aiXcoder 7B Base 版,將已經住考驗的全新程式碼大模型帶給大家。一方面,該模型以 7B 引數規模在程式碼補全等真實開發場景中表現出的越級能力及其在企業適配方面的多項核心競爭力,有助於推動程式碼大模型行業的整體進步。另一方面,該模型將對更廣泛的軟體開發自動化產生深遠的影響,在加速這一程序的同時為各行各業持續提升業務效率、變革生產方式保駕護航。

不僅如此,相較於同樣具備程式碼能力的通用模型,aiXcoder 7B Base 版讓我們看到了專用程式碼大模型更低訓練和推理成本、企業部署成本以及在企業專案級程式碼上更好、更穩定效果的全方位優勢。

目前,aiXcoder 已服務大量銀行、證券、保險、軍工、高科技、運營商、能源、交通等行業頭部客戶,深耕服務金融行業,其中與某行業知名券商的「程式碼大模型在證券行業的應用實踐」專案榮獲 2023AIIA 人工智慧十大潛力應用案例、中國信通院 AI4SE 銀彈優秀案例等殊榮。

同時,aiXcoder 也因其極具前瞻性的探索方向、踏踏實實的落地實踐,不斷受到資本市場的追捧,高瓴、清流、彬復等極具行業引領性的基金紛紛加註 aiXcoder 團隊,使其得以迅速成長!

顯然,在未來 AIGC 的這場較量中,aiXcoder 團隊已經做好了準備。

aiXcoder 開源連結:
https://github.com/aixcoder-plugin/aiXcoder-7B
https://gitee.com/aixcoder-model/aixcoder-7b
https://www.gitlink.org.cn/aixcoder/aixcoder-7b-model
https://wisemodel.cn/codes/aiXcoder/aiXcoder-7b

相關文章