大模型微调系列教程(三)——如何构建微调数据集?

2,298 阅读6分钟

💡高质量且与任务高度相关的数据是确保微调模型达到预期性能、准确性和特定行为模式的基石。数据质量直接决定了模型学习的细微差别、可能继承或减轻的偏见,以及其泛化能力。业界普遍认同“输入垃圾,输出垃圾”的原则,这在LLM微调中尤为突出。

💡微调数据集的质量对模型性能的影响,往往比预训练语料库的绝对规模更为显著。

💡小规模、高质量、任务针对性强的微调数据集能够带来显著的性能提升。

低质量的微调数据甚至可能导致性能下降,例如灾难性遗忘或偏见放大。

微调数据集的构建是一个多阶段的生命周期,涵盖了从初始规划、数据搜集、清洗与预处理、格式化,到可能的数据增强与标注,以及严格的质量评估。这些阶段环环相扣,每一个环节都对最终数据集的性能至关重要。

数据

初始规划

任务的性质直接决定了所需数据的类型、范围、格式和标注要求。例如,对于问答任务,需要收集问答对或能够从中提取答案的文档。对于情感分析,则需要收集带有情感标签(如积极、消极、中性)的文本。代码生成任务则需要包含代码片段及其对应的自然语言描述的数据集。

数据搜集

LLM微调数据一般有四种来源

  • 公共数据集:是LLM微调数据的重要来源之一。常见的平台包括Hugging Face Datasets Hub、Kaggle、GitHub项目、Google Dataset Search以及UCI机器学习知识库等。
  • 网络抓取数据:网络抓取是通过爬虫和抓取器系统性地从网站上提取公开信息的过程。
  • 专有数据:组织内部的专有数据是另一个极具价值的数据来源,包括内部文档、客户交互记录(如聊天记录、支持工单、电子邮件)、数据库内容以及内部知识库(wiki)等。(真正能帮我们解决问题的数据)
  • 合成数据:当真实世界数据有限(例如,罕见病症数据、边缘案例)、需要解决隐私问题、平衡非均衡数据集或为全新任务创建数据时,合成数据便有了用武之地。

数据清洗

原始数据通常充满噪声、不一致性,并包含大量不相关信息。数据清洗和预处理是将原始数据转化为结构化、高质量、适合模型训练的格式的关键步骤,下面介绍一些常见的清洗技术。

Image

数据格式化

大型语言模型(LLM)需要特定结构格式的数据才能有效地理解任务并进行学习。整个数据集中格式的一致性至关重要。下面是两种常见的格式

Alpaca

  • 指令监督微调数据集

    [  {    "instruction":"人类指令(必填)",    "input":"人类输入(选填)",    "output":"模型回答(必填)",    "system":"系统提示词(选填)",    "history":[      ["第一轮指令(选填)","第一轮回答(选填)"],
          ["第二轮指令(选填)","第二轮回答(选填)"]
        ]
    }
    ]
    
  • 预训练数据集

    [  {"text""document"},  {"text""document"}]
    
  • 偏好数据集

    [  {    "instruction""人类指令(必填)",    "input""人类输入(选填)",    "chosen""优质回答(必填)",    "rejected""劣质回答(必填)"  }]
    
  • 多模态数据集

    [  {    "instruction""人类指令(必填)",    "input""人类输入(选填)",    "output""模型回答(必填)",    "images": [      "图像路径(必填)"    ]
      }
    ]
    

ShareGPT

  • 指令监督微调数据集

    [  {    "conversations":[      {        "from":"human",        "value":"人类指令"      },      {        "from":"function_call",        "value":"工具参数"      },      {        "from":"observation",        "value":"工具结果"      },      {        "from":"gpt",        "value":"模型回答"      }    ],
        "system":"系统提示词(选填)",
        "tools":"工具描述(选填)"
    }
    ]
    
  • 偏好数据集

    [  {    "conversations":[      {        "from":"human",        "value":"人类指令"      },      {        "from":"gpt",        "value":"模型回答"      },      {        "from":"human",        "value":"人类指令"      }    ],
        "chosen":{
          "from":"gpt",
          "value":"优质回答"
        },
        "rejected":{
          "from":"gpt",
          "value":"劣质回答"
        }
    }
    ]
    

数据增强(高级)

微调数据集,特别是针对专业化任务的数据集,其规模往往有限。数据增强技术通过扩展数据集的规模和多样性,有助于提升模型的泛化能力、减少过拟合,并增强模型对输入变化的鲁棒性。

Image

数据评估

在进行微调之前评估数据集质量至关重要,这有助于防止计算资源的浪费,及早诊断潜在问题,并对模型性能设定切合实际的期望。一个高质量的数据集应具备清洁、代表性、平衡和准确标注等特性。下面介绍一些数据评估的关键指标与方法。

Image

常用工具介绍

MinerU

MinerU是一款将PDF转化为机器可读格式的工具(如markdown、json),可以很方便地抽取为任意格式。 MinerU诞生于书生-浦语的预训练过程中。

  • 删除页眉、页脚、脚注、页码等元素,确保语义连贯
  • 输出符合人类阅读顺序的文本,适用于单栏、多栏及复杂排版
  • 保留原文档的结构,包括标题、段落、列表等
  • 提取图像、图片描述、表格、表格标题及脚注
  • 自动识别并转换文档中的公式为LaTeX格式
  • 自动识别并转换文档中的表格为HTML格式
  • 支持多种输出格式,如多模态与NLP的Markdown、按阅读顺序排序的JSON、含有丰富信息的中间格式等

Image

easy-dataset

Easy Dataset 是一个专为创建大型语言模型(LLM)微调数据集而设计的应用程序。它提供了直观的界面,用于上传特定领域的文件,智能分割内容,生成问题,并为模型微调生成高质量的训练数据。

Image

  1. 1. 创建项目
  2. 2. 配置模型,支持Ollama,OpenAI等多种模型提供商(我自己在VLLM上有一个Qwen3 32B,这里我直接修改OpenAI配置)

Image

  1. 3. 上传文档,等待自动分割

Image

  1. 4. 查看切分后的文本块(如果有问题,可以自行修改),并生成问题

Image

  1. 5. 查看问题,验证问题使用的文本块是否正确,如果不对,请手动修改。也可以手动添加问题,及其关联的文本块。

Image

  1. 6. 批量构造数据集

Image

  1. 7. 查看每一条数据集,观察问题和回答是否正确,并确认

Image

  1. 8. 选择文件格式JSONL,数据集风格Alpace,导出数据集

Image

最后

至此我们的数据集构建完成。

构建高质量的LLM微调数据集是一个复杂但至关重要的过程。微调数据集的构建涉及人类专业知识与AI辅助之间更深层次的共生关系。LLM不仅将消费数据,还将积极参与数据的策划、清洗、增强和质量评估,并在人类的监督下完成这些工作。人类的监督对于定义目标、处理模糊性、确保伦理对齐以及验证AI生成的数据/评估结果仍然至关重要。数据集构建是人机协作的成果,利用AI的可扩展性和人类的细致判断力,以更高效的方式创建更高质量的数据集。(据说DeepSeek找北大,OpenAI找博士做数据)

Image

这是大模型微调的第三篇,我认为也是最重要的一篇,数据集质量直接决定了模型性能。

原文作者:AI开发者日记

原文地址:https://mp.weixin.qq.com/s/c0lrlAKEzI6uwoKLhKsnBA