Skip to content

Code 预训练相关

📅 发表于 2025/01/02
🔄 更新于 2025/01/02
👁️ -- 次访问
📝 0 字
0 分钟
codellm
#KAT-Dev
#Seed-Coder

论文阅读

(2510) KAT-Dev

MidTerm-Train

拓展模型的推理、规划、交互等能力。

Train Recipe

Train Recipe

  • 真实SWE语料库:20B token,包括PRIssueCommitPatch等。
  • 推理和反思增强:利用SOTA开源模型,生成CoT轨迹,解决复杂问题。
  • Agent交互模拟:构建模拟环境,合成Plan-Action-Observation轨迹。
  • 复杂质量遵循和约束对齐:构建可验证逻辑和结构指令跟随数据集

(2506) Seed-Coder

Seed-Coder 摘要

📕核心方法

Data Pipeline 概览

预训练数据处理 Pipeline 概览

原始数据

  • Github数据、Web数据

处理步骤 (预处理+过滤)

  • 预处理
    • 去重精确去重近似去重
    • Mini规则过滤:去掉不相关非代码数据
  • LLM质量过滤
    • 过滤后数据分为4类
      • 文件级代码 + 仓库级代码 + Github Commits + 代码相关的web数据

处理结果

  • 核心预训练数据
  • 继续预训练数据高质量数据 + 长上下文数据

Github 数据处理

Github 数据处理

数据预处理

  • 文件级去重 + 仓库级去重
    • 精准去重(SHA256)、近似去重(MinHash)
    • 文件级:短上下文学习;仓库级:保留项目结构,长上下文学习
  • 去掉存在语法错误的文件
    • 使用语法解析器检查文件是否存在语法错误
  • 最终减少98%原始数据。

质量过滤

  • 规则过滤存在挑战:需要多个专家共同编辑,很难一致,而且很难去评估。

  • 文件级质量评分模型

    • 四维度:可读性(注释合理)、模块化(结构好)、清晰度(少冗余)、复用性(易集成)。

    • 输出0-1分过滤低质量代码文件无需复杂标准。过滤一些自动生成的代码。

    • 微调1.3B模型回归Head,训练1个epoch,MSEloss,类别平均MAE观测指标。

    • 训练数据21种语言,使用GPT-4/DeepSeek-Coder-33B(V2-Chat)构造GT

  • 最终去除10%数据

Commit 数据处理

Commit 数据处理

Commit原始数据

  • 14w 高质量仓库7400w次提交
    • 高质量仓库:100star、10个fork、100次提交、100天的维护活动

Code Change 预测任务

  • Code change prediction 任务数据格式:
    • 给定提交信息上下文,模型预测被修改的文件代码变化
    • 上下文:README目录结构、BM25算法检索的top5相关文件
  • 经过去重和预处理后,获得100b tokens。
  • 提供 真实Code变化 强监督信号

Code-Web 数据处理

Code-Related Web Data

核心

  • web数据(common crawl等)中,提取出高质量代码相关的数据。

预处理

  • 代码提取:带有显示<code></code>>标签的数据,非显示代码标签的数据。
  • 去重:使用精确去重近似去重,同github数据一样。
  • 启发式过滤方法去掉低质量文档(如低于10个单词)。

质量过滤

  • 核心:识别代码相关内容 + 评估内容质量
  • FastText 召回代码内容
    • 没有代码标签的数据中召回代码内容
    • 提取并评分1000w个候选网页,标注数据,70%作为种子语料库、30%用于验证
    • 训练fastText模型识别检索代码内容。99%召回率、45%精确率。
    • 约3%识别为代码内容 (common crawl)
  • LLM 过滤低质数据:打0-10分
    • 不同类别的网站质量分数存在差异。
      • 电商平台/文档站点/等:结构清晰,分数较高
      • 社区论坛:得分较低,因为结构化低、混杂多

Continue Pretrain 数据处理

CPT-高质量数据
  • 数据来源:主流编程语言、算法、应用开发、jupyter、通用代码数据。
  • 高质量fastText 检索高质量数据
    • 针对每种特征的数据:划分小且多样高质量种子数据,10w样本,作为正样本,
    • 训练fastText模型
      • 使用10w正样本负样本随机选择精心构建2部分组成。
      • 迭代训练:训练->召回新数据->把最好的加入种子库->重新训练
    • 经过2-3轮fastText模型训练
      • 逐渐扩充正样本,最终得到130b高质量数据,用作CPT
CPT-长上下文数据
  • 长上下文数据
    • 文件级:结合LLM过滤,从中筛选出长上下文数据
    • 仓库级:根据文件的平均质量分数选择高质量仓库
      • 主流语言(python/java/c):基于文件依赖关系拼接
      • 其他语言(HTML/SQL/Shell):随机拼接
      • 每个仓库,作为一个单一的字符串
  • 32k长上下文,两个阶段:原始 -> 8k -> 32k

预训练策略

预训练策略

模型架构

  • LLama3,8.2B参数,36层,隐藏层大小为4096,中间层大小为14336,
  • 采用GQA,32个query头,8个key-value头。

上下文长度

  • 初期:8k
  • CPT:32k

Token和学习率参数

  • 初期(基础):3e-4,1万亿token,代码web+数学web数据
  • 中期(专业数据)4万亿token精选代码数据
  • CPT(冲刺)高质量长上下文数据
    • 学习率降低10倍,训400b token
    • 学习率降低到3e-5,继续训练600b token
FIM任务
  • Prefix Suffix Middle vs Suffix Prefix Middle

    • 实验SPM效果更好,可能和Attention机制有关系,Prefix后面紧接Middle。
  • FIM训练比例

    • 初期:50%时间在训练FIM,非常重视代码补全能力
    • 后期:降到10%,需要探索长文本和整体生成能力

策略

预训练基础知识

模型训练阶段

预训练

数据收集和处理

  • 爬取海量数据:web 网页、书籍、学术文献、专有材料等。
  • 数据处理:去重、过滤、tokenize、格式标准化、统一编码、增加特殊标记等。
    • 清洗过滤:去掉低质量、敏感数据等。具体可看主要工作怎么清洗的。

预训练

  • 随机初始化参数进行训练,消耗最大的部分。
  • 目标:NTP/MTP/FIM等任务,自监督学习,预测mask的部分。

CPT

  • 在预训练模型基础上,喂大量代码数据继续预训练,做领域适配等等。

退火策略

  • 在训练后期,动态调整参数,重点是学习率。
  • 训练初期学习率较大,加速收敛,后期需要逐渐降低学习率,帮助收敛至最优解。
后训练

SFT

  • 给定输入-输出,教模型回答,
  • 如Repo SFT,角膜型理解多文件直接的依赖关系。

RL

  • 通过人类反馈、奖励机制,进一步提升模型性能。

预训练任务

基模预训练任务

NTP

  • 猜下一词
  • 最大化条件概率 P(xt+1|x1,...,xt)

MTP

  • 一次猜多个词,预判了你的预判。

Fill-in-the-Middle (FIM)

  • 背景:在文件中间插入代码, 需要看前面的代码prefix,也要看后面的代码suffix
  • 代码模型的特有能力之一,增强代码补全能力。

Diffusion Coder Training Task

  • 加噪:把一段好代码随机替换成乱码/噪声
  • 去噪:让模型把乱码逐步还原成清晰的代码
任务名称核心逻辑典型应用场景优势
NTP (Next Token Prediction)猜下一个词所有的 GPT 类模型基础能力,学会语法和逻辑
MTP (Multi-Token Prediction)猜下面 N 个词高级模型训练提高推理速度,增强逻辑连贯性
FIM (Fill-in-the-Middle)完形填空IDE 里的光标补全能同时看上下文,补全更准
Diffusion (扩散任务)降噪去模糊探索性架构生成多样性高,可并行生成

预训练数据

预训练数据

整体趋势

  • 从追求庞大数量 -> 追求数据质量/许可等。即粗放收集 -> 精细化清洗 -> 合规与大规模。

Github 数据

  • The Stack v1
    • 358种编程语言,3.1TB数据,宽松许可源代码。
    • 两阶段去重策略:精准匹配hash和近似去重hash。
  • The Stack v2(当前行业标准)
    • 数据扩大四倍,900B token,600种语言,32TB
    • 来源引入Software Heritage,加入PR&Issues,包含人类如何讨论修改代码的逻辑过程
  • Open Coder
    • 3.3TB,13种语言

StarCoder 数据

  • 从The Stack里精选出来的一部分数据,783GB,86种语言。
  • 策略:去掉bench数据更干净,增加github issue和commit。

其他数据

  • The Pile:825GB,有代码、论文、网页等混合数据,早期数据。
  • RedPajama:1T,包括59B的代码数据,宽松许可证。最初用来复现LLaMA模型的。
  • CodeParrot:专注于python的高质量数据集,去重过滤了70%的原始数据。
总访客数:   ·   总访问量:
PLM's Blog @ 2016 - 2026