引言

俗话说:「巧妇难为无米之炊」。再先进的微调方法,如果没有高质量数据,也难以训练出效果优秀的模型。

在微调大模型的过程中,数据是决定成败的关键。本篇将介绍如何收集、清洗和准备数据。

数据收集来源

  1. 开源代码仓库
  • GitHub、GitLab 开放项目
  • 适合补全、重构等任务
  1. 技术问答平台
  • StackOverflow、知乎技术区
  • 获取「问题-解答」类数据
  1. 企业内部数据
  • 代码库、接口文档、设计规范
  • 最贴近实际需求,但需注意隐私与安全
  1. 合成数据
  • 使用大模型生成初步数据,再人工复核

数据清洗

在微调大模型的过程中,数据质量直接决定了模型性能。原始数据往往存在重复、错误、格式不统一或不相关内容,如果直接用于训练,会导致模型学习到错误模式或产生偏差。因此,数据清洗是保证微调效果的关键环节。

数据清洗的主要步骤:

  • 去重与格式统一
    • 去除重复的代码片段或指令-响应对,避免模型过度记忆重复样例
    • 将不同来源的数据统一格式,例如统一缩进、代码风格、注释规范
  • 去除低质量或错误样例
    • 移除语法错误、逻辑错误或不完整的数据
    • 确保训练数据的正确性和可执行性
  • 隐私和敏感信息处理
    • 删除密码、密钥、客户数据等敏感信息
    • 遵循企业数据安全和隐私规范,避免泄露敏感信息
  • 覆盖多样性
    • 不同编程语言、不同任务类型
    • 确保模型能够处理各种场景和需求,避免过拟合
  • 任务相关性筛选
    • 保证数据与微调目标任务高度相关
    • 例如用于代码生成的训练数据,应包含丰富的函数、类和业务逻辑示例

数据标注

高质量的数据不仅需要清洗,还需要合理标注,才能让大模型学到正确的模式和行为。数据标注是将原始数据转换为可用于模型训练的结构化形式的过程。

数据标注的主要内容:

  • 标注类型

    • 指令-响应对:将自然语言描述(如需求说明、问题)与目标输出(代码实现、修复方案)配对
    • 错误-修复对:输入有错误的代码,输出修复后的正确代码
    • 代码-解释对:输入代码片段,输出自然语言解释或注释
  • 标注方法

    • 人工标注:由专家或开发者手动标注,精确度高,但成本大
    • 半自动标注:先用模型生成初步标注,再由人工审核和修正,提高效率
    • 合成数据生成:利用大模型生成示例,再进行人工或自动筛选
  • 标注规范

    • 标注一致性:同一任务不同样例遵循统一格式
    • 任务相关性:只标注与目标任务直接相关的内容
    • 可执行性:尤其是代码类数据,标注后的代码应能正确编译或运行
  • 标注质量控制

    • 多人交叉审核:多人对标注数据进行审核,减少主观误差
    • 样本抽查和自动验证:对标注数据进行随机抽查,确保数据可靠
    • 定期更新和扩充标注数据:根据模型表现和任务需求,定期更新和扩充标注数据,保持数据的新鲜度和多样性

数据划分

在微调大模型时,除了收集、清洗和标注数据,还必须将数据合理划分为训练集、验证集和测试集,以保证模型能够有效学习,同时评估其泛化能力。

数据划分的重要性:

  1. 训练集(Training Set)
  • 用于模型参数的优化和学习
  • 数据量通常占总数据的 70–80%
  • 质量高且覆盖任务多样性,确保模型学到全面模式
  1. 验证集(Validation Set)
  • 用于调参、监控训练过程和防止过拟合
  • 数据量通常占 10–15%
  • 与训练集保持相似分布,但不重复
  • 可用于早停(Early Stopping)和选择最优模型
  1. 测试集(Test Set)
  • 用于最终模型性能评估
  • 数据量通常占 10–15%
  • 与训练集和验证集独立
  • 用于衡量模型在真实任务上的泛化能力

划分方法与注意事项:

  • 比例控制:常用比例为 8:1:1 或 7:2:1,根据数据量和任务复杂度调整
  • 分布一致性:确保训练、验证、测试集覆盖的任务类型、编程语言和代码风格一致
  • 避免数据泄漏:训练集和测试集不得有重复或高度相似样本
  • 迭代更新:随着新数据生成或收集,可适当更新验证集和测试集,保证评估结果可靠

合理的数据划分是微调成功的基础,它保证模型既能充分学习,又能在未见数据上保持良好表现。

数据质量评估

在微调前,对数据进行质量评估至关重要。高质量的数据能直接提升模型性能,而低质量数据可能导致模型学习错误模式或偏差输出。

数据质量评估的主要指标:

  1. 完整性(Completeness)
  • 检查每条数据是否包含必要信息
  • 例如,指令-响应对是否完整,代码片段是否可执行
  1. 正确性(Correctness)
  • 数据是否准确、无语法错误或逻辑错误
  • 对代码类数据,可通过静态检查或自动编译验证
  1. 一致性(Consistency)
  • 数据标注和格式是否统一
  • 同一类型任务的标注风格、命名规范应保持一致
  1. 相关性(Relevance)
  • 数据是否与微调任务紧密相关
  • 避免训练模型学习到无关或干扰信息
  1. 多样性(Diversity)
  • 数据是否覆盖多种情况、语言、任务类型
  • 保证模型能够泛化,而不是仅针对单一模式学习

评估方法:

  • 人工抽查:随机抽样检查数据质量
  • 自动化工具:使用静态分析、Lint 工具、格式检查脚本等
  • 统计分析:统计数据分布、重复率、标注一致性等

结论

对于大模型的微调,数据质量直接决定了模型效果的上限。建立一个持续收集、清洗和更新的数据管道,比一次性准备数据更重要。