什么是alpaca 或 sharegpt 格式的数据集?
环境:
LLaMA-Factory
问题描述:
alpaca 或 sharegpt 格式的数据集?
解决方案:
“Alpaca”和“ShareGPT”格式的数据集,是近年来在开源大语言模型微调和对话数据构建领域比较流行的两种格式。它们主要用于训练和微调以生成对话或指令驱动的模型。下面我详细介绍两者的特点和示例格式。
1. Alpaca 格式
Alpaca是斯坦福大学发布的一个基于指令微调(instruction tuning)的数据集格式,主要用于训练模型更好地理解和执行各种自然语言指令。它的特点是简洁,以“instruction(指令)”、“input(输入)”、“output(输出)”为结构,方便模型理解上下文。“Alpaca” 的读音是 /ælˈpækə/ 。中文可以近似读作:“艾-帕-卡”。
结构说明
- instruction:给模型的指令或任务描述,告诉模型需要完成什么。
- input:可选,作为指令的额外输入信息,如果没有可以为空字符串。
- output:模型需要生成的回答或完成的任务结果。
JSON 格式示例
{"instruction": "翻译下列英文句子为中文。","input": "The quick brown fox jumps over the lazy dog.","output": "敏捷的棕色狐狸跳过了懒狗。"
}
典型示例(包含多个样本)
[{"instruction": "请总结下面的文章内容。","input": "人工智能正在改变世界各地的行业。","output": "这篇文章讲述了人工智能对各行业的影响。"},{"instruction": "写一首关于春天的诗。","input": "","output": "春风轻拂柳丝绿,花开满园鸟儿啼。"}
]
2. ShareGPT 格式
ShareGPT是基于OpenAI ChatGPT对话公开分享的平台衍生的数据格式,主要表现为多轮对话的序列结构,适合训练聊天机器人或对话模型。
结构说明
- 以对话轮次的形式,通常包含用户提问和AI回复。
- 每个样本通常是一个完整的对话,或者包含多个问答对。
- 适合捕捉多轮上下文联系。
JSON 格式示例
{"conversations": [{"from": "user","value": "你好,请帮我写一首关于夜晚的诗。"},{"from": "assistant","value": "夜幕低垂星光闪,微风拂过树影间。"}]
}
多条对话样本示例
[{"conversations": [{"from": "user","value": "解释一下量子计算的基本原理。"},{"from": "assistant","value": "量子计算利用量子比特的叠加和纠缠现象进行计算,能够解决某些经典计算机难以处理的问题。"}]},{"conversations": [{"from": "user","value": "帮我写一封求职信。"},{"from": "assistant","value": "尊敬的招聘经理,您好!我对贵公司的职位非常感兴趣,..."}]}
]
总结对比
特点 | Alpaca 格式 | ShareGPT 格式 |
---|---|---|
主要用途 | 指令微调,单轮指令-输入-输出 | 多轮对话训练 |
结构 | instruction + input + output | 多轮conversations ,包含user 和assistant |
适用场景 | 指令执行、任务完成、问答、文本生成 | 聊天机器人、多轮对话、上下文理解 |
格式复杂度 | 简单、固定格式 | 稍复杂,支持多轮对话 |
LLaMA-Factory 等类似工具通常支持以下几种常见且适合微调和训练的数据格式:
1. JSON Lines(.jsonl)
- 格式特点:每行是一个独立的JSON对象,适合大规模数据流式处理。
- 结构示例:类似Alpaca格式,但每条数据单独一行,便于分批加载和处理。
{"instruction": "写一篇关于环保的短文。", "input": "", "output": "环保是保护环境,..."}
{"instruction": "翻译成英文:今天天气很好。", "input": "", "output": "The weather is nice today."}
- 适用场景:大规模单轮指令微调、数据预处理流水线。
2. Plain Text 对话格式
- 格式特点:用特殊分隔符(如“###”或“——”)分割多轮对话,或者用固定顺序标记用户和助手的内容。
- 结构示例:
User: 你好,帮我写一首诗。
Assistant: 春风拂面花开时,鸟语盈耳映山溪。
User: 谢谢,还能写一首关于秋天的吗?
Assistant: 秋风送爽叶飘零,金黄遍地暖阳明。
- 适用场景:对话模型的微调,简易数据构建。
3. Hugging Face Datasets 格式
- 格式特点:基于
datasets
库,数据存储为Dataset
对象,支持多种格式(CSV、JSON、Parquet等)。 - 结构示例:字段类似 Alpaca 格式,利用库函数加载和处理。
from datasets import load_datasetdataset = load_dataset("json", data_files="data.jsonl")
for example in dataset["train"]:print(example["instruction"], example["output"])
- 适用场景:便捷数据处理、训练流水线集成。
4. Instruction Tuning 标准格式(Vicuna、GPT4All等)
- 格式特点:多以 JSON 格式呈现,包含
instruction
、input
、output
,有时多轮对话兼容。 - 结构示例:
{"instruction": "帮我写一封情书。","input": "","output": "亲爱的,我一直喜欢你……"
}
- 适用场景:通用指令微调。
5. Multi-turn Conversation JSON 数组格式
- 格式特点:专门设计多轮会话,每条对话包含多轮
user
和assistant
,类似ShareGPT但格式更灵活。 - 示例:
[{"dialog": [{"role": "user", "content": "介绍一下人工智能。"},{"role": "assistant", "content": "人工智能是指…"},{"role": "user", "content": "有哪些应用?"},{"role": "assistant", "content": "主要包括…"}]}
]
- 适用场景:多轮对话模型训练。
6. CSV/TSV 格式
- 格式特点:用逗号或制表符分隔字段,字段如 instruction、input、output。
- 示例:
instruction,input,output
"写一首诗","春天","春风拂面花开时"
"翻译句子","今天天气好","The weather is nice today"
- 适用场景:简单数据管理,适合小规模数据集。
总结
格式类型 | 适用场景 | 优点 | 备注 |
---|---|---|---|
JSON Lines (.jsonl) | 大规模单轮指令微调 | 流式处理,易扩展 | 兼容多数训练框架 |
Plain Text 对话 | 多轮对话微调 | 简单直观 | 需自行设计分隔规则 |
Hugging Face Dataset | 训练流水线、复用性强 | 方便加载、预处理 | 依赖datasets库 |
Instruction Tuning | 指令微调 | 标准化,兼容性好 | 多种开源数据集采用该格式 |
Multi-turn JSON | 多轮对话 | 保持上下文完整 | 适合复杂对话建模 |
CSV/TSV | 简单数据存储 | 兼容性好,易查看 | 不适合复杂嵌套数据 |
额外提示
- LLaMA-Factory 具体支持哪些格式,建议查看其官方文档或源码中的数据加载相关部分。
- 你可以根据任务需求选择合适格式,或者自行编写数据转换脚本实现格式转换。
- 数据集格式设计时,应确保字段名称统一、格式规范,方便微调训练流程自动化。