字節跳動開源Seed-Coder,用六萬億token語料庫訓練的LLM 原創
在當今數字化時代,代碼數據對于訓練大型語言模型(LLM)的重要性不言而喻。它不僅對編程任務有著直接的推動作用,還能提升模型更廣泛的推理能力。然而,目前許多開源模型在構建代碼數據集時,往往依賴于人工篩選和專家制定的規則,這種方式不僅耗時費力,還容易受到人為偏見的影響,難以在不同編程語言之間進行大規模擴展。而像 Claude 3.7 和 OpenAI o3 這樣的專有模型雖然在編程任務上表現出色,卻對它們的數據細節守口如瓶。即使是 DeepSeek 和 Qwen2.5 這樣的開源模型,也仍然在很大程度上依賴于人工設計的過濾器。這種對人工干預的過度依賴,無疑限制了代碼 LLM 訓練的進步,這不禁讓人想起 “The Bitter Lesson”,即真正的突破來自于可擴展的數據驅動方法,而非手工制作的啟發式規則。
一、Seed-Coder模型家族的創新之處
字節跳動的研究人員帶來了 Seed-Coder,這是一個包含 8B 開源 LLM 的模型家族,涵蓋了基礎模型、指令模型和推理模型,其核心目標是減少人類在代碼數據整理過程中的參與度。與傳統依賴人工規則的方法不同,Seed-Coder 的模型驅動管道利用 LLM 本身來對來自 GitHub 和代碼相關網站等來源的大規模代碼數據進行評分和篩選,最終構建了一個包含 6 萬億 token 的龐大語料庫。
在預訓練階段,首先會進行基礎過濾,剔除存在語法問題或包含不當內容的文件。隨后,大型語言模型登場,對剩余代碼進行評估和打分,以此確保數據的高質量,而無需依賴手工制作的規則。預訓練分為兩個階段:第一階段使用核心代碼和網絡數據;第二階段則引入更復雜的結構,比如完整的代碼倉庫和長上下文任務,例如填空任務,以此來增強模型的編程能力。
二、后訓練階段的優化
預訓練完成后,Seed-Coder 還要經歷兩個后訓練階段的進一步打磨。首先,指令模型通過在由 LLM 生成并篩選的多樣化合成指令數據上進行監督微調來接受訓練,這有助于它更好地理解和遵循人類的指令。接著,通過直接偏好優化(DPO),使模型的響應更貼近人類的偏好。對于復雜的推理任務,推理模型則借助長鏈思考(LongCoT)強化學習得到提升,從而增強其應對多步編碼挑戰的能力。這些優化步驟顯著提高了 Seed-Coder 在各種代碼生成和推理任務中的表現。
三、Seed-Coder的卓越表現
評估結果顯示,Seed-Coder 的三個模型——基礎模型、指令模型和推理模型,在一系列編程任務中都展現出了非凡的性能。基礎模型在代碼生成任務上超越了其他同尺寸的開源模型,在 HumanEval 和 MultiPL-E 等基準測試中取得了優異的成績。指令模型在需要代碼編輯和遵循指令的任務中表現出色,在 CodeEditorBench 和 FullStack 等評估中名列前茅。推理模型經過長鏈思考技術訓練后,在 LiveCodeBench 和 Codeforces 等具有挑戰性的基準測試中展現出了卓越的多步問題解決能力,甚至超過了尺寸大好幾倍的模型。
四、開源意義與未來展望
Seed-Coder 作為一套高效且性能卓越的開源語言模型,專為編程任務量身打造。它主要依靠 LLM 而非人工來篩選和整理訓練數據,大幅減少了人工勞動。盡管與一些大型模型相比,Seed-Coder 的訓練 token 數量較少,但它在代碼生成、補全、編輯和推理等任務上的表現卻十分出色。不過,由于缺乏廣泛的網絡數據和數學內容,其在通用語言理解方面的能力仍有待提升。未來,Seed-Coder 計劃擴充模型家族,并提升不同尺寸模型的能力,以推動代碼 LLM 領域的進一步發展。
本文轉載自??Halo咯咯?? 作者:基咯咯
