
字节跳动开源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咯咯 作者:基咯咯
