📍 你在这里 训练进阶 · 第 3 篇 / 共 9 篇
← 上一篇 大模型微调基础:LoRA 原理与实践 · 下一篇 → 大模型微调步骤及示例
训练集准备
格式
[
{
"instruction": "总结以下文本的核心内容",
"input": "人工智能(AI)是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。近年来,随着大数据、算力和算法的突破,AI在医疗、金融、教育等领域快速落地:医疗上,AI辅助诊断系统能提高疾病筛查效率;金融领域,AI可用于风险评估和 fraud 检测;教育中,个性化学习系统帮助学生定制学习计划。但AI也面临伦理争议,如数据隐私、算法偏见等问题。",
"output": "人工智能是研究模拟人类智能的技术科学,近年因大数据等突破在医疗、金融、教育等领域快速应用,同时面临数据隐私、算法偏见等伦理争议。",
"system": "你是一个文本总结助手,需用简洁语言提炼核心信息,不超过200字。"
},
{
"instruction": "总结以下文本的核心内容",
"input": "地球是太阳系八大行星之一,按离太阳由近及远的次序排为第三颗。它有一个天然卫星——月球,二者组成一个天体系统——地月系统。地球赤道半径约6378公里,极半径约6357公里,平均半径约6371公里。地球表面积5.1亿平方公里,其中71%为海洋,29%为陆地,在太空上看地球呈蓝色。",
"output": "地球是太阳系第三大行星,有天然卫星月球,组成地月系统;平均半径约6371公里,表面积5.1亿平方公里,71%为海洋,呈蓝色。",
"system": "你是一个地理知识总结助手,需准确提炼地球的关键特征。"
}
]
数据集格式
Alpaca格式和ShareGPT格式是当前大语言模型(LLM)微调中最常用的两种数据集格式,分别针对单轮指令任务和多轮对话场景设计,以下是详细解析:
一、Alpaca格式:结构化指令微调的基石
(原文档附带的附件请到语雀源文档查看)
(原文档附带的附件请到语雀源文档查看)
起源与用途:
Alpaca格式由斯坦福大学团队提出,最初用于微调LLaMA模型以生成Alpaca-7B。其核心思想是通过“指令-输入-输出”三元组让模型学习执行具体任务,适用于问答、翻译、代码生成等单轮指令场景。
核心结构:
{
"instruction": "任务描述(必填)", // 明确告诉模型要做什么,例如"写一封英文邮件"
"input": "额外输入(选填)", // 提供任务相关的补充信息,如"参会者包括部门经理"
"output": "预期输出(必填)", // 模型应生成的答案,如邮件正文内容
"system": "系统提示(选填)", // 设定模型角色,如"你是一位专业秘书"
"history": [指令-回答对列表] // 多轮对话历史,如[("previous instruction", "previous output")]
}
典型示例:
{
"instruction": "将以下句子翻译成法语",
"input": "Hello, how are you?",
"output": "Bonjour, comment ça va?",
"system": "你是一位专业翻译员"
}
- 特点:
- 结构简单,适合快速构建任务型数据集。
- 支持扩展字段(如
system和history)以适应复杂场景。 - 数据集规模通常在数万条(如Alpaca-52k约5.2万条),文件大小约40MB。
应用场景:
- 训练模型执行明确指令,如生成报告、解析数据、代码补全等。
- 作为基础格式,衍生出Alpaca-cleaned、Alpaca-GPT4等优化版本。
二、ShareGPT格式:多轮对话的“活字典”
起源与用途:
ShareGPT格式源自同名平台用户分享的ChatGPT对话记录,被Vicuna、LLaMA-2-Chat等模型用于训练自然流畅的多轮交互能力。其核心是记录对话的完整上下文,包括用户和模型的多轮交替发言。
核心结构:
{
"id": "对话唯一标识符", // 可选,用于区分不同对话
"system": "系统提示(选填)", // 设定对话背景,如"你是一位心理咨询师"
"conversations": [ // 对话轮次列表
{"from": "human", "value": "用户发言内容"},
{"from": "gpt", "value": "模型回应内容"},
...
],
"tools": [工具描述列表] // 可选,记录模型调用的外部工具信息
}
典型示例:
{
"system": "你是一位旅行规划师",
"conversations": [
{"from": "human", "value": "推荐一个适合亲子游的国内城市"},
{"from": "gpt", "value": "成都很适合亲子游,有大熊猫基地..."},
{"from": "human", "value": "那里有适合孩子的餐厅吗?"},
{"from": "gpt", "value": "有的,比如XX餐厅提供儿童套餐..."}
]
}
- 特点:
- 支持多角色区分(如
human、gpt、observation),可记录工具调用等复杂交互。 - 对话历史完整,适合训练模型理解上下文和保持对话连贯性。
- 数据规模较大,例如Vicuna训练集包含约7万条对话。
- 支持多角色区分(如
应用场景:
- 训练聊天机器人、虚拟助手等需要自然交互的模型。
- 支持多模态扩展,例如包含图像路径的对话(需配合
images字段)。
三、核心对比与选择建议
| 维度 | Alpaca格式 | ShareGPT格式 |
|---|---|---|
| 核心目标 | 让模型学会执行具体指令 | 让模型掌握自然流畅的多轮对话 |
| 数据结构 | 单条任务(instruction/input/output) | 多轮对话(conversations列表) |
| 典型场景 | 写邮件、翻译、代码生成 | 闲聊、心理咨询、旅行规划 |
| 字段灵活性 | 结构化,字段固定 | 支持扩展角色(如工具调用) |
| 数据集规模 | 中小型(数万条) | 中大型(数万至数十万条) |
| 适用模型 | Vicuna、Alpaca、LLaMA | LLaMA-2-Chat、ChatGLM-6B |
选择建议:
- 优先Alpaca:若任务为单轮指令(如客服工单处理、API调用),或需快速构建结构化数据集。
- 优先ShareGPT:若任务涉及多轮对话(如智能客服、心理咨询),或需模型理解复杂上下文。
- 混合使用:可结合两种格式提升模型泛化能力,例如在对话数据中混入指令任务。
四、格式转换与工具支持
实际应用中,可通过工具将两种格式互相转换。例如:
- Alpaca转ShareGPT:将单条指令任务包装为一轮对话,添加
system和conversations字段。 - ShareGPT转Alpaca:提取对话中的最后一轮
human发言作为instruction,gpt回应作为output。
LLaMA-Factory、EasyDataset等工具已支持两种格式的自动转换和混合训练,开发者可根据需求选择合适的处理流程。
通过合理选择和使用这两种格式,可高效地将领域知识转化为模型可学习的数据,显著提升大模型在特定场景下的表现。
数据集配置
这份文档主要围绕如何在项目中使用不同格式的数据集展开,涵盖了数据集的配置、不同格式数据集的特点及使用方式等内容。以下为您详细介绍:
1. 数据集配置概述
- 核心配置文件:
dataset_info.json包含了所有可用数据集的信息。若要使用自定义数据集,需在该文件中添加数据集描述,并修改dataset: 数据集名称配置。 - 文件存放位置:
dataset_info.json应放在dataset_dir目录下,该参数可修改,默认值为./data。 - 支持的数据集格式和文件类型:目前支持 alpaca 和 sharegpt 格式的数据集,允许的文件类型有 json、jsonl、csv、parquet 和 arrow。
2. dataset_info.json 数据集描述示例
以下是一个完整的 dataset_info.json 中数据集描述的示例:
"my_dataset": {
"hf_hub_url": "https://huggingface.co/datasets/my_dataset",
"formatting": "alpaca",
"ranking": false,
"subset": "train_subset",
"split": "train",
"folder": "data_folder",
"num_samples": 1000,
"columns": {
"prompt": "instruction",
"query": "input",
"response": "output",
"history": "history",
"messages": "conversations",
"system": "system",
"tools": "tools",
"images": "images",
"videos": "videos",
"audios": "audios",
"chosen": "chosen",
"rejected": "rejected",
"kto_tag": "kto_tag"
},
"tags": {
"role_tag": "from",
"content_tag": "value",
"user_tag": "human",
"assistant_tag": "gpt",
"observation_tag": "observation",
"function_tag": "function_call",
"system_tag": "system"
}
}
在这个示例中,我们定义了一个名为 my_dataset 的数据集,它来自 Hugging Face 仓库,格式为 alpaca,使用训练子集,共选取 1000 个样本,并指定了各列的名称和消息标签。
3. Alpaca 格式数据集
指令监督微调数据集
- 数据结构:由
instruction、input、output、system和history等列组成。 - 使用方式:
instruction和input拼接作为提示词,output作为模型回答,system作为系统提示词,history存储历史对话。 - 示例数据:
[
{
"instruction": "计算 2 + 3 的结果",
"input": "",
"output": "<think>先将 2 和 3 相加得到 5。</think>5",
"system": "你是一个数学助手",
"history": [
["计算 1 + 1 的结果", "2"]
]
}
]
dataset_info.json描述:
"math_dataset": {
"file_name": "math_data.json",
"columns": {
"prompt": "instruction",
"query": "input",
"response": "output",
"system": "system",
"history": "history"
}
}
预训练数据集
- 数据结构:只有
text列。 - 使用方式:仅
text列内容用于模型学习。 - 示例数据:
[
{"text": "自然语言处理是人工智能的一个重要领域。"},
{"text": "深度学习在图像识别中取得了显著成果。"}
]
dataset_info.json描述:
"pretrain_dataset": {
"file_name": "pretrain_data.json",
"columns": {
"prompt": "text"
}
}
偏好数据集
- 数据结构:包含
instruction、input、chosen和rejected列。 - 使用方式:用于奖励模型训练等,
chosen提供更优回答,rejected提供更差回答。 - 示例数据:
[
{
"instruction": "描述苹果的特点",
"input": "",
"chosen": "苹果是一种常见的水果,富含维生素,口感清甜多汁。",
"rejected": "苹果就是一种水果。"
}
]
dataset_info.json描述:
"preference_dataset": {
"file_name": "preference_data.json",
"ranking": true,
"columns": {
"prompt": "instruction",
"query": "input",
"chosen": "chosen",
"rejected": "rejected"
}
}
4. Sharegpt 格式数据集
指令监督微调数据集
- 数据结构:
conversations列包含多个角色的对话,还可包含system和tools列。 - 使用方式:支持更多角色种类,human 和 observation 奇数位置,gpt 和 function 偶数位置,默认 gpt 和 function 用于学习。
- 示例数据:
[
{
"conversations": [
{
"from": "human",
"value": "查询天气"
},
{
"from": "function_call",
"value": "{\"name\": \"get_weather\", \"parameters\": {\"location\": \"北京\"}}"
},
{
"from": "observation",
"value": "北京当前天气晴朗,气温 25 摄氏度。"
},
{
"from": "gpt",
"value": "北京当前天气晴朗,气温 25 摄氏度。"
}
],
"system": "你是一个天气查询助手",
"tools": "get_weather 函数可查询天气"
}
]
dataset_info.json描述:
"weather_dataset": {
"file_name": "weather_data.json",
"formatting": "sharegpt",
"columns": {
"messages": "conversations",
"system": "system",
"tools": "tools"
}
}
偏好数据集
- 数据结构:
conversations列包含对话,chosen和rejected列分别提供更优和更差消息。 - 使用方式:与 alpaca 偏好数据集类似。
- 示例数据:
[
{
"conversations": [
{
"from": "human",
"value": "推荐一部电影"
},
{
"from": "gpt",
"value": "推荐《泰坦尼克号》,这是一部经典的爱情电影。"
}
],
"chosen": {
"from": "gpt",
"value": "推荐《泰坦尼克号》,它不仅有浪漫的爱情故事,还有宏大的灾难场景,非常值得一看。"
},
"rejected": {
"from": "gpt",
"value": "有部电影还不错。"
}
}
]
dataset_info.json描述:
"movie_preference_dataset": {
"file_name": "movie_preference_data.json",
"formatting": "sharegpt",
"ranking": true,
"columns": {
"messages": "conversations",
"chosen": "chosen",
"rejected": "rejected"
}
}
KTO 数据集
- 数据结构:
conversations列包含对话,kto_tag列包含人类反馈。 - 使用方式:用于特定的训练场景。
- 示例数据:
[
{
"conversations": [
{
"from": "human",
"value": "翻译:Hello"
},
{
"from": "gpt",
"value": "你好"
}
],
"kto_tag": true
}
]
dataset_info.json描述:
"kto_dataset": {
"file_name": "kto_data.json",
"formatting": "sharegpt",
"columns": {
"messages": "conversations",
"kto_tag": "kto_tag"
}
}
多模态图像数据集
- 数据结构:
conversations列包含对话,images列包含图像路径。 - 使用方式:图像数量与文本中
<image>标记数量一致。 - 示例数据:
[
{
"conversations": [
{
"from": "human",
"value": "<image>描述这幅图像"
},
{
"from": "gpt",
"value": "图像中有一朵盛开的花朵。"
}
],
"images": ["flower.jpg"]
}
]
dataset_info.json描述:
"image_dataset": {
"file_name": "image_data.json",
"formatting": "sharegpt",
"columns": {
"messages": "conversations",
"images": "images"
}
}
多模态视频数据集
- 数据结构:
conversations列包含对话,videos列包含视频路径。 - 使用方式:视频数量与文本中
<video>标记数量一致。 - 示例数据:
[
{
"conversations": [
{
"from": "human",
"value": "<video>总结视频内容"
},
{
"from": "gpt",
"value": "视频介绍了一场精彩的足球比赛。"
}
],
"videos": ["football_match.mp4"]
}
]
dataset_info.json描述:
"video_dataset": {
"file_name": "video_data.json",
"formatting": "sharegpt",
"columns": {
"messages": "conversations",
"videos": "videos"
}
}
多模态音频数据集
- 数据结构:
conversations列包含对话,audios列包含音频路径。 - 使用方式:音频数量与文本中
<audio>标记数量一致。 - 示例数据:
[
{
"conversations": [
{
"from": "human",
"value": "<audio>转录音频内容"
},
{
"from": "gpt",
"value": "音频中有人在说你好。"
}
],
"audios": ["hello_audio.wav"]
}
]
dataset_info.json描述:
"audio_dataset": {
"file_name": "audio_data.json",
"formatting": "sharegpt",
"columns": {
"messages": "conversations",
"audios": "audios"
}
}
5. OpenAI 格式数据集
- 数据结构:
messages列包含多个角色的消息,第一条可能是系统提示词。 - 使用方式:是 sharegpt 格式的特殊情况。
- 示例数据:
[
{
"messages": [
{
"role": "system",
"content": "你是一个智能客服"
},
{
"role": "user",
"content": "我要咨询产品售后问题"
},
{
"role": "assistant",
"content": "请您提供产品的购买时间和订单号,我会为您处理售后问题。"
}
]
}
]
dataset_info.json描述:
"openai_dataset": {
"file_name": "openai_data.json",
"formatting": "sharegpt",
"columns": {
"messages": "messages"
},
"tags": {
"role_tag": "role",
"content_tag": "content",
"user_tag": "user",
"assistant_tag": "assistant",
"system_tag": "system"
}
}
6. 思维链处理提示
如果模型本身具备推理能力(如 Qwen3)而数据集不包含思维链,LLaMA - Factory 会自动为数据添加空思维链。当 enable_thinking 为 True 时(慢思考,默认),空思维链会添加到模型回答中并且计算损失,否则会添加到用户指令中并且不计算损失(快思考)。训练和推理时需保持 enable_thinking 参数一致。若希望训练包含思维链的数据时使用慢思考,训练不包含思维链的数据时使用快思考,可设置 enable_thinking 为 None,但该功能较复杂,需谨慎使用。
一起交流
分享你的思考,让讨论更进一步。