自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

完全開源的代碼大模型OpenCoder來了,躋身性能第一梯隊

人工智能 新聞
研究團隊推出了 OpenCoder,這是一系列能力達到第一梯隊的 CodeLLM,不僅在性能上可與領(lǐng)先模型媲美,還為研究社區(qū)提供了全方面的構(gòu)建細節(jié)。

本文的共同第一作者是墨爾本大學(xué)計算機科學(xué)碩士黃思明和復(fù)旦大學(xué)計算機科學(xué)碩士程天豪。OpenCoder 項目是二人在 INF 實習(xí)期間與 M-A-P 開源項目合作的成果,由 INF 主導(dǎo),M-A-P 積極參與,通訊作者為汪自力與褚崴。來自 INF 參與者包括:郝嘉然,宋劉一漢,徐陽,汪自力,褚崴,徐盈輝,漆遠。來自 M.A.P 的參與者包括:張舸,張晨晨,柴林政,J.Yang, J.H.Liu。其余合作者有:J.K.Liu;袁瑞峰;付杰;劉乾,Tiktok 研究員;張兆翔,中國科學(xué)院自動化研究所研究員。

代碼大型語言模型(CodeLLM) 在代碼生成、推理任務(wù)和智能代理系統(tǒng)等多個領(lǐng)域已變得不可或缺。盡管開源的代碼大模型性能正逐步接近專有模型的水平,但適合進行科學(xué)研究的高質(zhì)量 CodeLLM 仍然非常稀缺,尤其是數(shù)據(jù)清理流程、合成數(shù)據(jù)、模型訓(xùn)練流程全部可復(fù)現(xiàn)的全方位開源 CodeLLM。這一稀缺性源于多種挑戰(zhàn),包括資源限制、倫理考量、保持競爭優(yōu)勢等需求。

為彌補這一差距,研究團隊推出了 OpenCoder,這是一系列能力達到第一梯隊的 CodeLLM,不僅在性能上可與領(lǐng)先模型媲美,還為研究社區(qū)提供了全方面的構(gòu)建細節(jié)。不同于大多數(shù)以往的工作,OpenCoder 不僅公開了模型權(quán)重和推理代碼,還提供了可重復(fù)的訓(xùn)練數(shù)據(jù)、完整的數(shù)據(jù)處理流程、嚴謹?shù)膶嶒炏诮Y(jié)果以及詳細的訓(xùn)練細節(jié),為科學(xué)研究開放了全面的資源。

研究團隊發(fā)現(xiàn)構(gòu)建高質(zhì)量 CodeLLM 的關(guān)鍵因素有:(1) 數(shù)據(jù)質(zhì)量至關(guān)重要,代碼預(yù)訓(xùn)練數(shù)據(jù)需要精細的啟發(fā)式規(guī)則清洗與文件粒度的去重(2)預(yù)訓(xùn)練數(shù)據(jù)中添加互聯(lián)網(wǎng)網(wǎng)頁中召回的代碼相關(guān)語料(3)在退火和監(jiān)督微調(diào)階段使用高質(zhì)量的合成數(shù)據(jù)。

OpenCoder 團隊希望通過更高的開源程度,讓研究人員深入了解代碼大語言模型的各個細節(jié),使 OpenCoder 不僅成為強大的模型,更成為開放的基礎(chǔ)平臺,加速研究進展,推動代碼 AI 的可復(fù)現(xiàn)發(fā)展,縮小開源社區(qū)與工業(yè)界之間的差距。

圖片

  • 論文標(biāo)題:OpenCoder: The Open Cookbook for Top-Tier Code Large Language Model
  • 論文鏈接:https://arxiv.org/abs/2411.04905
  • 項目主頁:https://opencoder-llm.github.io/
  • 模型/數(shù)據(jù)集下載:https://huggingface.co/OpenCoder-LLM
  • 代碼倉庫:https://github.com/OpenCoder-llm/OpenCoder-llm

圖片

預(yù)訓(xùn)練階段

預(yù)訓(xùn)練數(shù)據(jù)構(gòu)成了大型語言模型能力的基礎(chǔ)。在開源社區(qū)中,The Stack v2 (Lozhkov et al., 2024a) 提供了一個有價值的代碼數(shù)據(jù)集,有力地支持了代碼語言模型的訓(xùn)練。然而,The Stack v2 的訓(xùn)練數(shù)據(jù)部分質(zhì)量不足,無法使語言模型達到頂尖性能。

為此,研究團隊提出了 RefineCode,這是一種高質(zhì)量、可復(fù)現(xiàn)的數(shù)據(jù)集,包含了 9600 億個標(biāo)記 (token),涵蓋了 607 種編程語言,并融入了 130 多條語言特定規(guī)則及其自定義權(quán)重分配。該數(shù)據(jù)集由兩部分組成:原始代碼和代碼相關(guān)的網(wǎng)頁數(shù)據(jù)。

圖片

具體來說,團隊主要從 GitHub 上收集原始代碼(截至 2023 年 11 月),并結(jié)合了 The Stack v2 中的非 GitHub 數(shù)據(jù)。此外,代碼相關(guān)的網(wǎng)頁數(shù)據(jù)主要來源于網(wǎng)頁語料庫。研究團隊設(shè)計了一個復(fù)雜的數(shù)據(jù)處理流程來生成代碼預(yù)訓(xùn)練語料庫,包含預(yù)處理、去重、轉(zhuǎn)換、過濾與數(shù)據(jù)重配比。

  • 預(yù)處理:排除超過 8MB 的文件,以避免將非文本文件納入數(shù)據(jù)集,同時僅保留 607 種編程語言相關(guān)文件。
  • 去重:首先通過 SHA256 哈希進行精準去重,其次通過 MinHash+LSH 進行模糊去重,優(yōu)先保留 star 數(shù)更高的文件
  • 轉(zhuǎn)換:進行敏感信息識別檢測
  • 過濾:根據(jù) 130 多項啟發(fā)式過濾規(guī)則,進一步篩選高質(zhì)量代碼文件,確保數(shù)據(jù)的高質(zhì)量
  • 數(shù)據(jù)重配比:在確認保持原始分布的情況下,對 HTML 和 Java 兩類數(shù)量較為龐大的編程語言進行下采樣
  • 在以上一整套針對代碼清洗流程后,RefineCode 保留了約 730B 的 token 數(shù)量。

OpenCoder 首次提出一套針對不同編程語言的詳細過濾規(guī)則,并將代碼、調(diào)整參數(shù)完全開源。啟發(fā)式規(guī)則設(shè)計準則如下:1) 過濾掉 self-contained 程度過低的代碼;2) 過濾掉邏輯結(jié)構(gòu)差或結(jié)構(gòu)極簡的文件;3) 移除顯著偏離標(biāo)準代碼格式的文件。

可以注意到,當(dāng)使用 PCA 對比 The Stack V2 和 RefineCode 的 codebert embedding 時,觀察到這兩個數(shù)據(jù)集之間有明顯的區(qū)別。具體而言,在圖 3 中,The Stack V2 數(shù)據(jù)顯示出更多的離群點,而 RefineCode 的嵌入則更為緊密地聚集。此外,通過對離群數(shù)據(jù)的分析,OpenCoder 發(fā)現(xiàn)這些離群點通常表現(xiàn)出許多低質(zhì)量的特征,例如純文本注釋、僅包含十六進制數(shù)據(jù),以及缺乏計算邏輯的極短代碼,這些特征會擾亂預(yù)訓(xùn)練數(shù)據(jù)集的分布,最終影響預(yù)訓(xùn)練的效率。

圖片

OpenCoder 同樣從 Common Crawl 數(shù)據(jù)集中收集高質(zhì)量代碼相關(guān)數(shù)據(jù),通過三輪 FastText 訓(xùn)練、召回、手工網(wǎng)頁標(biāo)注,最終成功獲取了 330G 代碼相關(guān)網(wǎng)頁數(shù)據(jù)。

圖片

OpenCoder 采用了 WSD(Warmup, Steady, Decay)學(xué)習(xí)率調(diào)度策略,以在不同訓(xùn)練階段中確保模型的穩(wěn)定性與高效性。在訓(xùn)練初期,模型通過 2000 步的 warmup 階段逐步提升學(xué)習(xí)率,達到峰值后進入穩(wěn)定階段,保持較長時間的固定學(xué)習(xí)率。最后,在退火階段逐步降低學(xué)習(xí)率,實現(xiàn)模型的快速精細調(diào)優(yōu)。在退火階段中,除原始分布 RefineCode 外,OpenCoder 加入了算法相關(guān)語料庫,同時合成了高質(zhì)量代碼段與代碼教科書兩種形式的數(shù)據(jù),通過添加算法相關(guān)數(shù)據(jù)以及對算法知識進行反復(fù)改寫來進一步增強來提高模型的代碼邏輯能力。

指令微調(diào)階段

1. 數(shù)據(jù)組成

除開源代碼指令數(shù)據(jù) (Evol-Instruct, Infinity-Instruct, MCEVal) 外,OpenCoder 從 wildChat,ShareGPT 中采樣了代碼相關(guān)的真實用戶指令數(shù)據(jù)。此外研究團隊還獨立合成了大規(guī)模多樣指令數(shù)據(jù)、教育意義指令數(shù)據(jù)集與外部庫調(diào)用指令數(shù)據(jù)集,進一步增強了指令微調(diào)數(shù)據(jù)的質(zhì)量與多樣性。

圖片

2. 兩階段訓(xùn)練策略

OpenCoder 在指令微調(diào)期間使用了兩階段的訓(xùn)練策略。在微調(diào)過程的第一階段,重點是廣泛的真實用戶指令與計算機科學(xué)理論相關(guān)知識。第一階段的微調(diào)使 OpenCoder 能夠理解和響應(yīng)各種真實的用戶需求。這些指令涵蓋了計算機科學(xué)的各個方面,從基礎(chǔ)編程到高級算法設(shè)計,再到復(fù)雜的數(shù)據(jù)結(jié)構(gòu)操作。由于涵蓋了廣泛的代碼相關(guān)指令,OpenCoder 在處理不同類型的編程問題時表現(xiàn)出卓越的適應(yīng)性,能夠靈活應(yīng)對多種場景下的編碼需求。

另一個顯著優(yōu)勢是提升了模型的泛化能力。面對用戶的不同表述和習(xí)慣用語,OpenCoder 能夠快速理解意圖并生成適切的解決方案。這種廣覆蓋的訓(xùn)練使模型不僅在特定任務(wù)上表現(xiàn)出色,還能在多樣化的編程需求中提供準確、高效的幫助。

在指令微調(diào)的第二階段,OpenCoder 使用高質(zhì)量的下游任務(wù)相關(guān)數(shù)據(jù)進行訓(xùn)練,確保模型接觸到現(xiàn)實世界中維護良好、格式規(guī)范的代碼實例,且能在具體下游任務(wù)中表現(xiàn)出色。這種兩階段的微調(diào)方法使模型在理論知識和實際編程任務(wù)上都表現(xiàn)出色,避免了只關(guān)注某一方面的局限性。

消融分析

1File-level 去重是代碼數(shù)據(jù)去重的最優(yōu)選擇

OpenCoder 在全量 Github 上 485 百萬個 Python 文件上進行了 repo-level,file-level 的去重處理,并在相同參數(shù)下訓(xùn)練了兩個 1.5B 大小的 LLM。首先 repo-level 去重保留的 token 數(shù)量近乎是 file-level 的三倍,其次從下游數(shù)據(jù)集性能表現(xiàn)發(fā)現(xiàn) file-level 去重效果顯著優(yōu)于 repo-level

對于 repo-level 的去重,進一步研究發(fā)現(xiàn)約有 52B 文件存在完全相同的另一份文件,且約 68B token(約占數(shù)據(jù)的 68.4%)可以被進一步 file-level 去重,這說明了 repo-level 去重并不充分。綜上,對于大規(guī)模代碼數(shù)據(jù)集,首先執(zhí)行精確去重,其次進行文件層面的 MinHash 去重是一種高效且節(jié)省 CPU 的方案。

2. 高質(zhì)量合成數(shù)據(jù)對于性能提升至關(guān)重要

在退火階段訓(xùn)練過程中,研究團隊消融了高質(zhì)量合成數(shù)據(jù)的影響。從下游 Benchmark 性能可發(fā)現(xiàn),當(dāng)高質(zhì)量訓(xùn)練數(shù)據(jù)被移除后,模型性能明顯下降,這表明高質(zhì)量數(shù)據(jù)在退火階段具有顯著的有效性。

圖片

3. Github Star 數(shù)并不是好的過濾標(biāo)準

從直覺角度講,更高 Star 的代碼往往具有更清晰的注釋,更優(yōu)秀的代碼組織方式。研究團隊訓(xùn)練了兩個 1.5B 的 LLM,其中一個使用原始數(shù)據(jù)訓(xùn)練,另一個則使用 GitHub 星級(星級 >=5)過濾后的數(shù)據(jù)進行訓(xùn)練,二者的 Benchmark 表現(xiàn)如下圖所示:

圖片

可以發(fā)現(xiàn)使用原始數(shù)據(jù)訓(xùn)練的 LLM 優(yōu)于使用過濾數(shù)據(jù)訓(xùn)練的 LLM,這一結(jié)果與 SantaCoder 的研究結(jié)果一致。此外,研究團隊進一步展示了這兩個 LLM 的訓(xùn)練損失,可以觀察到使用過濾數(shù)據(jù)訓(xùn)練的 LLM 的損失低于使用原始數(shù)據(jù)訓(xùn)練的 LLM。對此現(xiàn)象,研究團隊推測使用星級作為過濾信號能夠提升數(shù)據(jù)質(zhì)量,但相較于原始數(shù)據(jù),數(shù)據(jù)的多樣性有所限制。通過對二者數(shù)據(jù)分布的可視化分析,團隊進一步驗證了星級過濾顯著影響了整體數(shù)據(jù)分布,削弱了數(shù)據(jù)多樣性這一推斷。

此外,通過人工檢查被過濾部分的數(shù)據(jù)可以發(fā)現(xiàn)其仍包含大量結(jié)構(gòu)良好且具有算法豐富性的代碼。因此,研究團隊認為星級作為過濾標(biāo)準并非最佳選擇。

圖片

4. 兩階段 SFT 方法在 Benchmark 和實際應(yīng)用中取得雙重收益

研究團隊在 1.5B 模型上驗證了兩階段 SFT 的收益。通過觀察發(fā)現(xiàn),Stage 1 的數(shù)據(jù)展現(xiàn)出顯著的多樣性,但平均質(zhì)量相對較低。相比之下,Stage 2 的數(shù)據(jù)由高質(zhì)量的代碼特定 SFT 數(shù)據(jù)組成。該兩階段 SFT 策略使得模型在 Stage 1 中獲得廣泛的能力,隨后在 Stage 2 中針對代碼相關(guān)任務(wù)進行針對性提升。此外,類似于 Chatbot Arena,研究團隊采用包含近 400 個人工創(chuàng)建樣本的 Code Arena 測試集,以模擬真實環(huán)境中的用戶代碼相關(guān)提示。Code Arena 以 GPT-4 作為基準,并用 GPT-4 來判斷哪個大語言模型(LLM)具有更好的響應(yīng)能力,報告的結(jié)果為相對于 GPT-4 的勝率。結(jié)果展示了兩階段 SFT 訓(xùn)練策略在下游 Benchmark 上與體現(xiàn)真實應(yīng)用能力的 Code Arena 上皆有收益。

圖片

評估結(jié)果

OpenCoder 模型在 HumanEval、MBPP 兩主流模型評估任務(wù)上顯著超過了現(xiàn)有開源模型,驗證了其數(shù)據(jù)處理流程與合成數(shù)據(jù)的有效性。

為了檢驗 OpenCoder 的代碼生成能力,研究團隊在多個基準上將它與其他流行的開源模型(如 StarCoder2 、Qwen2.5-Coder 等)進行了比較,包括 HumanEval、MBPP、BigCodeBench 和 LiveCodeBench。結(jié)果表明,OpenCoder 在這些評估中達到了開源模型的一流水準。

此外,在多語言代碼生成評估基準 MultiPL-E ,綜合多語言代碼評估基準 McEval 和多語言代碼調(diào)試基準 MdEval 中,OpenCoder 表現(xiàn)也同樣突出,證實了其出色的多語言性能。

圖片

圖片

圖片

圖片

實際使用

以下是由 OpenCoder-8b-Instruct 生成的貪吃蛇 demo。使用的 prompt 為 “Write a greedy snake game with randomly generated obstacles using pygame”。可以看到生成的代碼可以不經(jīng)過任何修改正常運行,且符合 prompt 中的設(shè)計要求。

圖片

責(zé)任編輯:張燕妮 來源: 機器之心
相關(guān)推薦

2023-09-18 16:24:33

數(shù)據(jù)研究

2021-07-28 15:50:47

數(shù)字化

2023-02-10 13:30:18

AI人工智能

2015-09-25 10:20:18

華三

2023-02-08 20:04:25

2020-07-30 14:53:17

云計算

2015-11-04 10:55:52

馬云batatm

2018-04-10 15:44:28

華為云服務(wù)網(wǎng)絡(luò)技術(shù)

2020-09-27 12:43:35

金融科技浙大螞蟻

2017-12-19 10:51:54

IBMOracle云服務(wù)

2024-04-19 10:39:35

2011-02-11 11:47:09

2017-09-19 13:32:31

混合云云計算AWS

2022-11-28 13:44:30

TiPlus7100
點贊
收藏

51CTO技術(shù)棧公眾號