Data Preparation
dataset_info.json 包含了所有经过预处理的 本地数据集 以及 在线数据集。如果您希望使用自定义数据集,请 务必 在 dataset_info.json
文件中添加对数据集及其内容的定义。目前我们支持 Alpaca 格式和 ShareGPT 格式的数据集。
Alpaca
通常为JSON格式,包含以下核心字段:
{
"instruction": "用户指令/任务描述",
"input": "可选的输入内容(如上下文、条件等)",
"output": "模型应生成的预期回复"
}
典型用途:用于指令微调(Instruction Tuning),如训练模型遵循特定指令完成任务(如问答、总结、翻译等)。常见于斯坦福Alpaca、Vicuna等开源项目的训练数据。示例如下:
{
"instruction": "将以下英文句子翻译成中文:",
"input": "Artificial intelligence is revolutionizing industries.",
"output": "人工智能正在彻底改变各行各业。"
}
ShareGPT
通常为JSON格式,记录用户与模型的对话历史,包含以下字段:
{
"messages": [
{"role": "user", "content": "用户提问内容"},
{"role": "assistant", "content": "模型回复内容"}
]
}
典型用途:存储对话历史,用于训练对话模型(如ChatGPT)。支持多轮对话的上下文延续。
{
"messages": [
{"role": "user", "content": "解释一下量子计算的基本原理。"},
{"role": "assistant", "content": "量子计算利用量子比特(qubit)的叠加和纠缠特性……"}
]
}
如何选择格式?
Alpaca格式:适合单轮指令任务(如分类、生成、翻译等),结构简洁,便于批量处理。
ShareGPT格式:适合多轮对话场景,保留完整的对话历史,适合训练聊天机器人。
1.Alpaca
1.1 指令监督微调数据集
指令监督微调(Instruct Tuning)通过让模型学习详细的指令以及对应的回答来优化模型在特定指令下的表现。
instruction
列对应的内容为人类指令, input
列对应的内容为人类输入, output
列对应的内容为模型回答。下面是一个例子
"alpaca_zh_demo.json"
{
"instruction":"计算这些物品的总费用。 ","input":"输入:汽车 - $3000,衣服 - $100,书 - $20。",
"output":"汽车、衣服和书的总费用为 $3000 + $100 + $20 = $3120。"
},
在进行指令监督微调时, instruction
列对应的内容会与 input
列对应的内容拼接后作为最终的人类输入,即人类输入为 instruction\ninput
。而 output
列对应的内容为模型回答。
history
列是由多个字符串二元组构成的列表,分别代表历史消息中每轮对话的指令和回答。注意在指令监督微调时,历史消息中的回答内容也会被用于模型学习。指令监督微调数据集 格式要求 如下:
[
{
"instruction": "人类指令(必填)",
"input": "人类输入(选填)",
"output": "模型回答(必填)",
"system": "系统提示词(选填)",
"history": [
["第一轮指令(选填)", "第一轮回答(选填)"],
["第二轮指令(选填)", "第二轮回答(选填)"]
]
}
]
下面提供一个 alpaca 格式 多轮 对话的例子,对于单轮对话只需省略 history
列即可。
[
{
"instruction": "今天的天气怎么样?",
"input": "",
"output": "今天的天气不错,是晴天。",
"history": [