大模型微调数据集格式详解:Alpaca、ShareGPT、DPO、KTO、预训练数据怎么构建?

📑 目录

  • 一、微调数据集常见格式总览
  • [二、Alpaca 格式](#二、Alpaca 格式)
    • [1. 基础格式](#1. 基础格式)
    • [2. 字段说明](#2. 字段说明)
    • [3. 适合场景](#3. 适合场景)
    • [4. 如何构建 Alpaca 数据集](#4. 如何构建 Alpaca 数据集)
  • [三、带 system 的 Alpaca 格式](#三、带 system 的 Alpaca 格式)
    • [1. 示例](#1. 示例)
    • [2. 适合场景](#2. 适合场景)
    • [3. 构建建议](#3. 构建建议)
  • [四、Alpaca 多轮对话格式](#四、Alpaca 多轮对话格式)
    • [1. 示例](#1. 示例)
    • [2. 字段说明](#2. 字段说明)
    • [3. 适合场景](#3. 适合场景)
    • [4. 构建建议](#4. 构建建议)
  • [五、ShareGPT 格式](#五、ShareGPT 格式)
    • [1. 基础格式](#1. 基础格式)
    • [2. 多轮对话示例](#2. 多轮对话示例)
    • [3. 字段说明](#3. 字段说明)
    • [4. 适合场景](#4. 适合场景)
    • [5. 如何构建 ShareGPT 数据集](#5. 如何构建 ShareGPT 数据集)
  • [六、OpenAI Messages 格式](#六、OpenAI Messages 格式)
    • [1. 字段说明](#1. 字段说明)
    • [2. 适合场景](#2. 适合场景)
    • [3. 和 ShareGPT 的区别](#3. 和 ShareGPT 的区别)
  • [七、Preference / DPO 偏好数据格式](#七、Preference / DPO 偏好数据格式)
  • [八、KTO 数据格式](#八、KTO 数据格式)
    • [1. 示例](#1. 示例)
    • [2. 字段说明](#2. 字段说明)
    • [3. 适合场景](#3. 适合场景)
    • [4. 如何构建 KTO 数据](#4. 如何构建 KTO 数据)
  • [九、Pretrain 纯文本数据格式](#九、Pretrain 纯文本数据格式)
    • [1. 示例格式](#1. 示例格式)
    • [2. 适合场景](#2. 适合场景)
    • [3. 不适合场景](#3. 不适合场景)
    • [4. 如何构建预训练数据](#4. 如何构建预训练数据)
  • 十、多模态图文数据格式
    • [1. Alpaca 图文格式示例](#1. Alpaca 图文格式示例)
    • [2. 字段说明](#2. 字段说明)
    • [3. 适合场景](#3. 适合场景)
    • [4. 构建建议](#4. 构建建议)
  • 十一、音频数据格式
    • [1. 示例](#1. 示例)
    • [2. 适合场景](#2. 适合场景)
  • [十二、CSV / JSON / JSONL / Parquet 文件格式区别](#十二、CSV / JSON / JSONL / Parquet 文件格式区别)
    • [1. JSON](#1. JSON)
    • [2. JSONL](#2. JSONL)
    • [3. CSV](#3. CSV)
    • [4. Parquet](#4. Parquet)
  • [十三、LLaMA-Factory 中 dataset_info.json 怎么写](#十三、LLaMA-Factory 中 dataset_info.json 怎么写)
    • [1. Alpaca 格式注册示例](#1. Alpaca 格式注册示例)
    • [2. ShareGPT 格式注册示例](#2. ShareGPT 格式注册示例)
    • [3. DPO 偏好数据注册示例](#3. DPO 偏好数据注册示例)
    • [4. KTO 数据注册示例](#4. KTO 数据注册示例)
    • [5. 预训练数据注册示例](#5. 预训练数据注册示例)
  • 十四、不同任务应该选择什么格式?
    • [1. 普通问答助手](#1. 普通问答助手)
    • [2. 客服机器人](#2. 客服机器人)
    • [3. 角色扮演模型](#3. 角色扮演模型)
    • [4. 固定格式输出](#4. 固定格式输出)
    • [5. 偏好优化](#5. 偏好优化)
    • [6. 行业知识继续学习](#6. 行业知识继续学习)
  • 十五、数据集构建流程建议
  • 十六、数据质量建议
    • [1. 好数据的特点](#1. 好数据的特点)
    • [2. 差数据的特点](#2. 差数据的特点)
    • [3. 数据量建议](#3. 数据量建议)
  • 十七、常见错误
    • [1. 把知识文档直接当 SFT 数据](#1. 把知识文档直接当 SFT 数据)
    • [2. output 太短](#2. output 太短)
    • [3. 多轮对话顺序错乱](#3. 多轮对话顺序错乱)
    • [4. chosen / rejected 写反](#4. chosen / rejected 写反)
    • [5. 数据里混入隐私信息](#5. 数据里混入隐私信息)
  • 十八、完整示例:构建一个客服微调数据集
    • [1. 原始资料](#1. 原始资料)
    • [2. 转成 Alpaca 数据](#2. 转成 Alpaca 数据)
    • [3. 加入 system](#3. 加入 system)
    • [4. 注册到 LLaMA-Factory](#4. 注册到 LLaMA-Factory)
  • 十九、总结

前言

在做大模型微调时,很多人第一步不是卡在模型,也不是卡在显卡,而是卡在数据集格式。

同样是"微调数据",不同训练任务需要的数据格式并不一样:

  • SFT 需要指令问答数据
  • 多轮对话需要 conversation 数据
  • DPO 需要偏好对比数据
  • KTO 需要好坏标签数据
  • 预训练需要纯文本数据
  • 多模态微调还需要图片或音频路径

如果数据格式不对,轻则训练效果差,重则直接报错。

本文整理大模型微调中常见的数据集格式、适用场景,以及如何构建对应格式的数据集。内容主要参考 LLaMA-Factory 的数据组织方式,同时也适用于理解其他微调框架的数据准备思路。


一、微调数据集常见格式总览

常见数据集格式可以分为下面几类:

数据格式 主要用途 是否适合新手 典型场景
Alpaca 格式 SFT 指令微调 推荐 单轮问答、指令任务
Alpaca 多轮格式 SFT 多轮微调 推荐 带历史上下文的对话
ShareGPT 格式 多轮聊天微调 推荐 聊天助手、客服、角色扮演
Pretrain 纯文本格式 继续预训练 不建议新手优先 领域语料学习
Preference / DPO 格式 偏好优化 进阶 让模型更偏向优质回答
KTO 格式 偏好优化 进阶 只有好/坏标签的数据
多模态格式 图文/音频微调 进阶 视觉问答、语音理解
OpenAI Messages 格式 对话数据交换 推荐了解 ChatGPT 风格多轮数据

二、Alpaca 格式

Alpaca 格式是最常见、最适合新手入门的 SFT 数据格式。

它通常由三个核心字段组成:

text 复制代码
instruction:用户指令
input:补充输入,可为空
output:模型应该回答的内容

1. 基础格式

json 复制代码
[
  {
    "instruction": "请解释什么是 LoRA 微调。",
    "input": "",
    "output": "LoRA 微调是一种低成本的大模型微调方法,它通过训练少量额外参数来适配新任务,而不是更新模型的全部参数。"
  },
  {
    "instruction": "根据下面的内容回答问题。",
    "input": "公司营业时间是周一到周五上午 9 点到下午 6 点。",
    "output": "公司的营业时间是周一到周五上午 9 点到下午 6 点。"
  }
]

2. 字段说明

字段 是否必填 说明
instruction 必填 用户的任务指令
input 选填 指令的补充信息
output 必填 期望模型输出的答案
system 选填 系统提示词
history 选填 历史对话

3. 适合场景

Alpaca 格式适合:

  • 单轮问答
  • 指令微调
  • 固定格式输出
  • 文本分类
  • 信息抽取
  • 文案生成
  • 企业知识库问答
  • 客服话术训练

例如:

text 复制代码
用户问:退货流程是什么?
模型答:您可以在订单页面申请退货,填写原因后等待审核。

这种数据非常适合用 Alpaca 格式。

4. 如何构建 Alpaca 数据集

假设原始资料是公司 FAQ:

text 复制代码
问题:发票什么时候开?
答案:订单完成后 1-3 个工作日内开具电子发票。

可以整理成:

json 复制代码
{
  "instruction": "发票什么时候开?",
  "input": "",
  "output": "订单完成后 1-3 个工作日内会开具电子发票。"
}

如果问题依赖上下文:

text 复制代码
资料:会员有效期为一年,到期后需要续费。
问题:会员到期后怎么办?
答案:会员到期后需要续费,续费成功后可以继续使用会员权益。

可以整理成:

json 复制代码
{
  "instruction": "根据下面资料回答问题。",
  "input": "会员有效期为一年,到期后需要续费。",
  "output": "会员到期后需要续费,续费成功后可以继续使用会员权益。"
}

三、带 system 的 Alpaca 格式

有些场景需要给模型固定角色或回答规则,这时可以加入 system 字段。

1. 示例

json 复制代码
[
  {
    "instruction": "用户说商品损坏了,应该怎么回复?",
    "input": "",
    "output": "非常抱歉给您带来不便。请您提供商品照片和订单号,我们会尽快为您核实并处理售后。",
    "system": "你是一个电商平台客服助手,回答要礼貌、简洁、专业。"
  }
]

2. 适合场景

带 system 的格式适合:

  • 固定角色
  • 固定语气
  • 固定行业身份
  • 固定安全边界
  • 固定输出规范

比如:

text 复制代码
你是法律助手
你是医疗咨询助手
你是电商客服
你是代码审查助手
你必须用 JSON 输出

3. 构建建议

如果整个数据集都属于同一个角色,system 可以统一设置。

例如客服助手:

text 复制代码
你是一个专业、礼貌、耐心的电商客服助手。

如果不同样本角色不同,也可以每条数据单独设置 system。


四、Alpaca 多轮对话格式

Alpaca 格式也可以表达多轮对话,通常使用 history 字段。

1. 示例

json 复制代码
[
  {
    "instruction": "那可以开发票吗?",
    "input": "",
    "output": "可以的,您可以在订单完成后申请电子发票。",
    "history": [
      ["这个商品支持退货吗?", "支持,签收后 7 天内可以申请无理由退货。"],
      ["退货需要运费吗?", "如果是商品质量问题,运费由商家承担;如果是个人原因,运费通常由买家承担。"]
    ]
  }
]

2. 字段说明

字段 说明
history 历史对话列表
instruction 当前这一轮用户问题
output 当前这一轮模型回答

history 中每个元素一般是:

json 复制代码
["用户上一轮问题", "模型上一轮回答"]

3. 适合场景

Alpaca 多轮格式适合:

  • 多轮客服
  • 连续追问
  • 需要上下文的问答
  • 任务型对话
  • 简单角色对话

4. 构建建议

如果你的原始数据是连续聊天记录,可以把最后一轮作为训练目标,把前面的对话放入 history

原始对话:

text 复制代码
用户:这个商品支持退货吗?
客服:支持,签收后 7 天内可以申请无理由退货。
用户:退货需要运费吗?
客服:如果是商品质量问题,运费由商家承担。
用户:那可以开发票吗?
客服:可以,订单完成后可以申请电子发票。

整理成:

json 复制代码
{
  "instruction": "那可以开发票吗?",
  "input": "",
  "output": "可以,订单完成后可以申请电子发票。",
  "history": [
    ["这个商品支持退货吗?", "支持,签收后 7 天内可以申请无理由退货。"],
    ["退货需要运费吗?", "如果是商品质量问题,运费由商家承担。"]
  ]
}

五、ShareGPT 格式

ShareGPT 格式也是大模型微调里非常常见的格式,尤其适合多轮聊天数据。

它的核心字段是:

text 复制代码
conversations

里面按顺序保存用户和助手的对话。

1. 基础格式

json 复制代码
[
  {
    "conversations": [
      {
        "from": "human",
        "value": "你是谁?"
      },
      {
        "from": "gpt",
        "value": "我是一个经过微调的中文助手。"
      }
    ]
  }
]

2. 多轮对话示例

json 复制代码
[
  {
    "conversations": [
      {
        "from": "human",
        "value": "这个商品支持退货吗?"
      },
      {
        "from": "gpt",
        "value": "支持,签收后 7 天内可以申请无理由退货。"
      },
      {
        "from": "human",
        "value": "退货运费谁承担?"
      },
      {
        "from": "gpt",
        "value": "如果是商品质量问题,运费由商家承担;如果是个人原因,运费通常由买家承担。"
      }
    ]
  }
]

3. 字段说明

字段 说明
conversations 对话列表
from 角色,例如 human、gpt
value 对话内容

常见角色:

text 复制代码
human:用户
gpt:助手
system:系统提示
function:函数
observation:工具返回结果

不同框架对角色字段的支持可能不完全一致,需要根据训练框架要求调整。

4. 适合场景

ShareGPT 格式适合:

  • 多轮聊天助手
  • 客服机器人
  • 角色扮演
  • 通用聊天能力微调
  • 工具调用数据
  • 带函数调用的对话数据

如果你的数据本来就是聊天记录,ShareGPT 格式通常比 Alpaca 更自然。

5. 如何构建 ShareGPT 数据集

原始聊天记录:

text 复制代码
用户:你能帮我写一份请假条吗?
助手:可以,请告诉我请假原因、时间和收件人。
用户:因身体不适,请假一天,发给班主任。
助手:请假条:尊敬的班主任老师,我因身体不适,需请假一天,请您批准。

整理为:

json 复制代码
{
  "conversations": [
    {
      "from": "human",
      "value": "你能帮我写一份请假条吗?"
    },
    {
      "from": "gpt",
      "value": "可以,请告诉我请假原因、时间和收件人。"
    },
    {
      "from": "human",
      "value": "因身体不适,请假一天,发给班主任。"
    },
    {
      "from": "gpt",
      "value": "请假条:尊敬的班主任老师,我因身体不适,需请假一天,请您批准。"
    }
  ]
}

六、OpenAI Messages 格式

OpenAI Messages 格式是现在很多聊天模型和 API 常用的数据结构。

它通常长这样:

json 复制代码
[
  {
    "messages": [
      {
        "role": "system",
        "content": "你是一个专业的中文写作助手。"
      },
      {
        "role": "user",
        "content": "帮我写一个产品介绍。"
      },
      {
        "role": "assistant",
        "content": "当然可以。请告诉我产品名称、功能和目标用户。"
      }
    ]
  }
]

1. 字段说明

字段 说明
messages 消息列表
role 角色
content 消息内容

常见 role:

text 复制代码
system
user
assistant
tool

2. 适合场景

OpenAI Messages 格式适合:

  • 从 ChatGPT / API 日志整理数据
  • 多轮对话训练
  • 工具调用数据
  • 准备迁移到其他训练格式

3. 和 ShareGPT 的区别

OpenAI Messages 格式:

json 复制代码
{
  "role": "user",
  "content": "你好"
}

ShareGPT 格式:

json 复制代码
{
  "from": "human",
  "value": "你好"
}

两者本质上很像,主要是字段名称不同。

可以简单理解为:

text 复制代码
OpenAI: role + content
ShareGPT: from + value

七、Preference / DPO 偏好数据格式

DPO、ORPO、PPO 等偏好优化方法,需要的数据不是单个标准答案,而是一组好坏对比。

一般包含:

text 复制代码
prompt:问题
chosen:更好的回答
rejected:较差的回答

1. Alpaca 偏好格式示例

json 复制代码
[
  {
    "instruction": "请解释什么是机器学习。",
    "input": "",
    "chosen": "机器学习是一种让计算机从数据中学习规律,并利用这些规律进行预测或决策的人工智能技术。",
    "rejected": "机器学习就是机器自己变聪明。"
  }
]

2. ShareGPT 偏好格式示例

json 复制代码
[
  {
    "conversations": [
      {
        "from": "human",
        "value": "请解释什么是机器学习。"
      }
    ],
    "chosen": {
      "from": "gpt",
      "value": "机器学习是一种让计算机从数据中学习规律,并利用这些规律进行预测或决策的人工智能技术。"
    },
    "rejected": {
      "from": "gpt",
      "value": "机器学习就是机器自己变聪明。"
    }
  }
]

3. 字段说明

字段 说明
instruction / prompt / conversations 用户问题
chosen 更好的回答
rejected 较差的回答

4. 适合场景

DPO 偏好数据适合:

  • SFT 后继续优化模型
  • 改善模型回答风格
  • 减少啰嗦回答
  • 减少错误回答
  • 让模型更偏向人类喜欢的答案
  • 做模型对齐训练

5. 如何构建 DPO 数据

方式一:人工标注

同一个问题准备两个回答:

text 复制代码
问题:什么是 LoRA?
回答 A:准确、清楚、结构完整
回答 B:模糊、错误、啰嗦

然后人工判断哪个更好。

整理为:

json 复制代码
{
  "instruction": "什么是 LoRA?",
  "input": "",
  "chosen": "LoRA 是一种参数高效微调方法,它通过训练少量低秩矩阵来适配新任务。",
  "rejected": "LoRA 就是让模型随便学一点东西。"
}
方式二:模型生成多个答案后筛选

可以让模型对同一个问题生成多个回答,然后人工挑选:

text 复制代码
chosen:更准确、更符合要求的回答
rejected:错误、不完整或风格不符合要求的回答
方式三:从线上反馈构建

例如用户对回答点赞/点踩:

text 复制代码
点赞回答 -> chosen
点踩回答 -> rejected

这种数据非常适合偏好优化。


八、KTO 数据格式

KTO 也是一种偏好优化方法。和 DPO 不同,DPO 通常需要成对的好坏回答,而 KTO 可以使用单条回答的好坏标签。

也就是说,KTO 数据通常包含:

text 复制代码
问题
回答
这个回答是否好

1. 示例

json 复制代码
[
  {
    "instruction": "请解释什么是 LoRA。",
    "input": "",
    "output": "LoRA 是一种参数高效微调方法,它通过训练少量额外参数来适配新任务。",
    "kto_tag": true
  },
  {
    "instruction": "请解释什么是 LoRA。",
    "input": "",
    "output": "LoRA 是一个模型名字。",
    "kto_tag": false
  }
]

2. 字段说明

字段 说明
instruction 用户问题
input 补充输入
output 模型回答
kto_tag 回答是否符合偏好

3. 适合场景

KTO 适合:

  • 只有点赞/点踩数据
  • 没有成对 chosen/rejected 数据
  • 有单条回答质量标签
  • 想做轻量偏好优化

4. 如何构建 KTO 数据

如果业务系统里有用户反馈:

text 复制代码
回答 A:用户点赞
回答 B:用户点踩

可以整理为:

json 复制代码
{
  "instruction": "会员怎么续费?",
  "input": "",
  "output": "您可以在个人中心的会员页面点击续费按钮完成续费。",
  "kto_tag": true
}
json 复制代码
{
  "instruction": "会员怎么续费?",
  "input": "",
  "output": "你自己去找一下。",
  "kto_tag": false
}

九、Pretrain 纯文本数据格式

预训练数据和 SFT 数据不同。

SFT 是教模型怎么回答问题,而预训练更像是让模型继续阅读大量文本,学习某个领域的语言和知识分布。

1. 示例格式

json 复制代码
[
  {
    "text": "机器学习是人工智能的一个重要分支,它通过数据训练模型,使模型能够进行预测、分类和决策。"
  },
  {
    "text": "在电商售后场景中,用户常见问题包括退货、换货、发票、物流查询和订单取消。"
  }
]

也可以是 JSONL:

json 复制代码
{"text": "机器学习是人工智能的一个重要分支。"}
{"text": "深度学习是机器学习的一种方法。"}

2. 适合场景

预训练格式适合:

  • 行业语料继续预训练
  • 法律文本学习
  • 医疗文本学习
  • 代码语料学习
  • 企业内部文档语言适配

3. 不适合场景

如果你的目标是让模型学会"如何回答问题",不建议直接用预训练格式。

例如客服问答:

text 复制代码
用户:怎么退货?
客服:请在订单页面申请退货。

这种更适合 SFT,而不是继续预训练。

4. 如何构建预训练数据

原始资料:

text 复制代码
公司售后政策:
用户签收商品后 7 天内可以申请无理由退货。若商品存在质量问题,退货运费由商家承担。

整理为:

json 复制代码
{
  "text": "公司售后政策:用户签收商品后 7 天内可以申请无理由退货。若商品存在质量问题,退货运费由商家承担。"
}

十、多模态图文数据格式

如果训练的是视觉语言模型,比如 Qwen-VL、LLaVA 等,就需要图文数据。

图文数据通常除了文本外,还需要图片路径。

1. Alpaca 图文格式示例

json 复制代码
[
  {
    "instruction": "请描述这张图片。",
    "input": "",
    "output": "图片中有一只白色的小猫坐在沙发上。",
    "images": [
      "images/cat.jpg"
    ]
  }
]

2. 字段说明

字段 说明
instruction 用户指令
input 补充输入
output 模型回答
images 图片路径列表

3. 适合场景

图文格式适合:

  • 图片描述
  • OCR 问答
  • 视觉问答
  • 商品图片理解
  • 医学影像辅助说明
  • 截图内容理解

4. 构建建议

目录可以这样组织:

text 复制代码
data/
  my_vl_dataset.json
  images/
    001.jpg
    002.jpg
    003.jpg

数据文件:

json 复制代码
[
  {
    "instruction": "这张商品图里有什么?",
    "input": "",
    "output": "图片中是一双黑色运动鞋,鞋底为白色,适合日常运动穿着。",
    "images": [
      "images/001.jpg"
    ]
  }
]

注意:图片路径需要和训练框架的数据目录对应,不能随便写一个不存在的路径。


十一、音频数据格式

如果训练音频理解模型,需要加入音频路径字段。

1. 示例

json 复制代码
[
  {
    "instruction": "请转写这段音频。",
    "input": "",
    "output": "今天天气很好,我们下午去公园散步。",
    "audios": [
      "audios/example.wav"
    ]
  }
]

2. 适合场景

音频数据适合:

  • 语音识别
  • 音频问答
  • 语音内容理解
  • 多模态语音助手

十二、CSV / JSON / JSONL / Parquet 文件格式区别

微调数据不仅有内容结构差异,也有文件存储格式差异。

常见文件类型包括:

text 复制代码
json
jsonl
csv
parquet
arrow

1. JSON

JSON 是最容易理解的格式。

json 复制代码
[
  {
    "instruction": "你好",
    "input": "",
    "output": "你好,有什么可以帮你?"
  }
]

优点:

  • 直观
  • 适合小数据集
  • 容易手动编辑

缺点:

  • 大文件加载慢
  • 文件太大时不方便处理

2. JSONL

JSONL 是一行一个 JSON 对象。

json 复制代码
{"instruction": "你好", "input": "", "output": "你好,有什么可以帮你?"}
{"instruction": "你是谁", "input": "", "output": "我是一个 AI 助手。"}

优点:

  • 适合大数据集
  • 可以逐行读取
  • 不容易因为一个逗号导致整个文件损坏

缺点:

  • 对新手来说不如 JSON 直观

3. CSV

CSV 是表格格式。

csv 复制代码
instruction,input,output
你好,,你好,有什么可以帮你?
你是谁,,我是一个 AI 助手。

优点:

  • Excel 可以打开
  • 适合表格型数据

缺点:

  • 多行文本和特殊符号容易出问题
  • 不太适合复杂多轮对话

4. Parquet

Parquet 是高性能列式存储格式。

优点:

  • 适合大规模数据
  • 读取效率高
  • 常用于 Hugging Face 数据集

缺点:

  • 不适合手动编辑
  • 新手不容易直接查看

十三、LLaMA-Factory 中 dataset_info.json 怎么写

在 LLaMA-Factory 中,自定义数据集通常需要在 data/dataset_info.json 中注册。

默认数据目录是:

text 复制代码
data

如果你的数据文件是:

text 复制代码
data/my_alpaca.json

就需要在 dataset_info.json 中添加配置。

1. Alpaca 格式注册示例

json 复制代码
"my_alpaca": {
  "file_name": "my_alpaca.json",
  "formatting": "alpaca",
  "columns": {
    "prompt": "instruction",
    "query": "input",
    "response": "output",
    "system": "system",
    "history": "history"
  }
}

训练时数据集名称填写:

text 复制代码
my_alpaca

2. ShareGPT 格式注册示例

json 复制代码
"my_sharegpt": {
  "file_name": "my_sharegpt.json",
  "formatting": "sharegpt",
  "columns": {
    "messages": "conversations"
  },
  "tags": {
    "role_tag": "from",
    "content_tag": "value",
    "user_tag": "human",
    "assistant_tag": "gpt"
  }
}

训练时数据集名称填写:

text 复制代码
my_sharegpt

3. DPO 偏好数据注册示例

json 复制代码
"my_dpo": {
  "file_name": "my_dpo.json",
  "formatting": "alpaca",
  "ranking": true,
  "columns": {
    "prompt": "instruction",
    "query": "input",
    "chosen": "chosen",
    "rejected": "rejected"
  }
}

4. KTO 数据注册示例

json 复制代码
"my_kto": {
  "file_name": "my_kto.json",
  "formatting": "alpaca",
  "columns": {
    "prompt": "instruction",
    "query": "input",
    "response": "output",
    "kto_tag": "kto_tag"
  }
}

5. 预训练数据注册示例

json 复制代码
"my_pretrain": {
  "file_name": "my_pretrain.json",
  "columns": {
    "prompt": "text"
  }
}

十四、不同任务应该选择什么格式?

1. 普通问答助手

推荐:

text 复制代码
Alpaca 格式

适合数据:

text 复制代码
问题 -> 答案
指令 -> 输出

示例:

json 复制代码
{
  "instruction": "如何申请退款?",
  "input": "",
  "output": "您可以在订单详情页点击申请退款,并按照页面提示提交申请。"
}

2. 客服机器人

推荐:

text 复制代码
Alpaca 格式 或 ShareGPT 格式

如果是单轮 FAQ,用 Alpaca。

如果是连续聊天记录,用 ShareGPT。

3. 角色扮演模型

推荐:

text 复制代码
ShareGPT 格式

因为角色扮演通常是多轮对话,ShareGPT 更适合表达连续上下文。

4. 固定格式输出

推荐:

text 复制代码
Alpaca 格式

例如训练模型输出 JSON:

json 复制代码
{
  "instruction": "从文本中抽取姓名和手机号,以 JSON 输出。",
  "input": "张三的手机号是 13800138000。",
  "output": "{\"name\": \"张三\", \"phone\": \"13800138000\"}"
}

5. 偏好优化

推荐:

text 复制代码
DPO / Preference 格式

适合已经有 SFT 模型后继续优化回答质量。

6. 行业知识继续学习

推荐:

text 复制代码
Pretrain 纯文本格式 或 SFT 格式

如果只是让模型熟悉行业语料,可以用 Pretrain。

如果希望模型能回答具体问题,建议用 SFT。


十五、数据集构建流程建议

推荐按照下面流程构建数据集。

第一步:确定训练目标

先问自己:

text 复制代码
我是要让模型学知识?
还是让模型学会回答方式?
还是让模型更偏向某种回答?

不同目标对应不同数据格式:

目标 推荐格式
学会问答 Alpaca / ShareGPT
学会聊天 ShareGPT
学会行业语言 Pretrain
优化回答偏好 DPO / KTO
学会看图回答 多模态图文格式

第二步:收集原始数据

常见数据来源:

  • FAQ 文档
  • 客服聊天记录
  • 企业知识库
  • 产品说明书
  • 技术文档
  • 人工编写问答
  • 用户反馈数据
  • 模型生成后人工筛选

第三步:清洗数据

需要处理:

  • 删除重复样本
  • 删除错误答案
  • 删除过短或无意义内容
  • 删除隐私信息
  • 统一标点和格式
  • 修正错别字
  • 保证回答风格一致

第四步:转换格式

例如把 FAQ 转成 Alpaca:

原始数据:

text 复制代码
Q:怎么修改手机号?
A:请进入个人中心,在账号安全页面修改手机号。

转换后:

json 复制代码
{
  "instruction": "怎么修改手机号?",
  "input": "",
  "output": "请进入个人中心,在账号安全页面修改手机号。"
}

第五步:抽样检查

训练前一定要人工检查一部分数据。

重点检查:

  • instruction 是否清楚
  • output 是否正确
  • 是否有乱码
  • 是否有格式错误
  • 多轮对话顺序是否正确
  • chosen 是否真的比 rejected 好

十六、数据质量建议

数据质量比数据数量更重要。

对于个人微调,建议优先准备:

text 复制代码
100 条高质量数据 > 10000 条低质量数据

1. 好数据的特点

好数据通常具备:

  • 问题明确
  • 答案准确
  • 风格统一
  • 没有明显错别字
  • 没有自相矛盾
  • 输出格式稳定
  • 与目标场景高度相关

2. 差数据的特点

差数据通常包括:

  • 答非所问
  • 答案太短
  • 答案错误
  • 重复样本太多
  • 同一个问题多个矛盾答案
  • 包含大量无关内容
  • 充满广告、乱码、隐私信息

3. 数据量建议

阶段 建议数据量
测试流程 50 - 200 条
初步有效果 500 - 1000 条
较明显风格适配 3000 - 10000 条
行业助手 10000 条以上更好

注意:数据越多不一定越好,低质量数据会拉低模型效果。


十七、常见错误

1. 把知识文档直接当 SFT 数据

错误做法:

json 复制代码
{
  "instruction": "公司制度如下",
  "input": "",
  "output": "第一条......第二条......第三条......"
}

这种数据不一定能让模型学会问答。

更好的做法是把文档拆成问答:

json 复制代码
{
  "instruction": "员工请假需要提前多久申请?",
  "input": "",
  "output": "员工请假通常需要至少提前一天提交申请,特殊情况可以事后补交说明。"
}

2. output 太短

例如:

json 复制代码
{
  "instruction": "什么是 LoRA?",
  "input": "",
  "output": "一种微调方法。"
}

这种答案信息量太少。

更好的写法:

json 复制代码
{
  "instruction": "什么是 LoRA?",
  "input": "",
  "output": "LoRA 是一种参数高效微调方法,它通过训练少量额外参数来适配新任务,而不是更新模型的全部参数,因此显存占用更低,适合个人电脑进行大模型微调。"
}

3. 多轮对话顺序错乱

多轮对话必须保持顺序:

text 复制代码
用户 -> 助手 -> 用户 -> 助手

不要出现:

text 复制代码
助手 -> 用户 -> 用户 -> 助手

4. chosen / rejected 写反

DPO 数据中最常见的错误是把好答案和差答案写反。

错误:

json 复制代码
{
  "instruction": "什么是机器学习?",
  "chosen": "机器学习就是机器自己想事情。",
  "rejected": "机器学习是让计算机从数据中学习规律并进行预测的技术。"
}

这会让模型越训越差。

5. 数据里混入隐私信息

训练前要去除:

  • 手机号
  • 身份证号
  • 地址
  • 订单号
  • 银行卡号
  • 真实姓名
  • 公司敏感信息

十八、完整示例:构建一个客服微调数据集

假设目标是训练一个电商客服助手。

1. 原始资料

text 复制代码
退货政策:用户签收商品后 7 天内可以申请无理由退货。
发票政策:订单完成后可以申请电子发票。
物流政策:用户可以在订单详情页查看物流信息。

2. 转成 Alpaca 数据

json 复制代码
[
  {
    "instruction": "商品可以退货吗?",
    "input": "",
    "output": "可以。用户签收商品后 7 天内可以申请无理由退货。"
  },
  {
    "instruction": "怎么申请发票?",
    "input": "",
    "output": "订单完成后,您可以在订单详情页申请电子发票。"
  },
  {
    "instruction": "在哪里查看物流?",
    "input": "",
    "output": "您可以在订单详情页查看物流信息。"
  }
]

3. 加入 system

json 复制代码
[
  {
    "instruction": "商品可以退货吗?",
    "input": "",
    "output": "可以。用户签收商品后 7 天内可以申请无理由退货。",
    "system": "你是一个专业、礼貌、耐心的电商客服助手。"
  }
]

4. 注册到 LLaMA-Factory

假设文件名是:

text 复制代码
data/ecommerce_service.json

dataset_info.json 添加:

json 复制代码
"ecommerce_service": {
  "file_name": "ecommerce_service.json",
  "formatting": "alpaca",
  "columns": {
    "prompt": "instruction",
    "query": "input",
    "response": "output",
    "system": "system"
  }
}

训练时选择数据集:

text 复制代码
ecommerce_service

十九、总结

大模型微调数据集格式很多,但入门阶段只需要重点掌握三类:

text 复制代码
Alpaca:适合单轮问答和指令微调
ShareGPT:适合多轮聊天和角色对话
DPO / KTO:适合 SFT 之后做偏好优化
相关推荐
纽格立科技1 小时前
DRM 发射端链路图(上)
前端·人工智能·车载系统·信息与通信·传媒
wayz111 小时前
Momentum:UO(终极震荡指标)技术指标详解
算法·金融·数据分析·量化交易·特征工程
诺***帝1 小时前
电子研发轻量化工具GPT-Image-2使用心得:硬件工程师实测出图效率提升
人工智能·gpt
delishcomcn1 小时前
基于深度学习的烫金箔分切缺陷实时检测系统
人工智能·深度学习
小丶舟1 小时前
Firma.Dev 企业级应用开发核心场景指南
人工智能·ai
DreamLife☼1 小时前
OpenBCI-脑电信号深度学习:CNN与RNN应用
人工智能·rnn·深度学习·cnn·eeg·脑电·openbci
KIO no way1 小时前
AI最佳发布时间怎么找_CSDN_AI数字营销的数据功能实测
人工智能
Boom_Shu1 小时前
浅拷贝与深拷贝
开发语言·c++·算法
花月C1 小时前
AI驱动的竞品分析多Agent协作系统设计理论
人工智能·python·ai·agent·ai编程