https://llamafactory.readthedocs.io/zh-cn/latest/getting_started/data_preparation.html
在构建和优化大型语言模型的过程中,数据集的质量和格式至关重要。本文将详细介绍如何准备符合要求的数据集,包括数据格式、内容要求以及在 dataset_info.json
中的配置方法。
dataset_info.json
文件包含了所有经过预处理的本地数据集和在线数据集的配置信息。如果您希望使用自定义数据集,请务必在 dataset_info.json
文件中添加对数据集及其内容的定义。
目前,我们支持以下两种数据集格式:
Alpaca 格式适用于大多数简单的问答和对话场景,特别是指令监督微调和预训练任务。以下是不同任务的数据集格式要求。
示例数据集:指令监督微调样例数据集
指令监督微调通过让模型学习详细的指令以及对应的回答,优化模型在特定指令下的表现。数据集格式如下:
json[
{
"instruction": "人类指令(必填)",
"input": "人类输入(选填)",
"output": "模型回答(必填)",
"system": "系统提示词(选填)",
"history": [
["第一轮指令(选填)", "第一轮回答(选填)"],
["第二轮指令(选填)", "第二轮回答(选填)"]
]
}
]
字段说明:
instruction
:人类给出的指令。input
:人类的输入,可能是指令的补充信息。output
:模型应生成的回答。system
:系统提示词,可用于设定对话的背景或角色。history
:对话历史,由多个指令和回答组成的列表。在进行指令监督微调时, instruction 列对应的内容会与 input 列对应的内容拼接后作为最终的人类输入,即人类输入为 instruction\ninput。而 output 列对应的内容为模型回答。
示例:
json{
"instruction": "计算这些物品的总费用。",
"input": "汽车 - $3000,衣服 - $100,书 - $20。",
"output": "汽车、衣服和书的总费用为 $3000 + $100 + $20 = $3120。",
"history": [
["今天会下雨吗?", "今天不会下雨,是个好天气。"],
["今天适合出去玩吗?", "非常适合,空气质量很好。"]
]
}
dataset_info.json
配置:
json"数据集名称": {
"file_name": "data.json",
"columns": {
"prompt": "instruction",
"query": "input",
"response": "output",
"system": "system",
"history": "history"
}
}
示例数据集:预训练样例数据集
预训练数据集通常由大量未标记的文本构成,用于让模型学习语言的基础表示。格式如下:
json[
{"text": "document1"},
{"text": "document2"}
]
字段说明:
text
:文本内容,模型将学习其中的语言结构和信息。dataset_info.json
配置:
json"数据集名称": {
"file_name": "data.json",
"columns": {
"prompt": "text"
}
}
偏好数据集用于奖励模型训练、DPO 训练和 ORPO 训练。通过提供优质和劣质回答,模型可以学习到更符合人类偏好的回答方式。
数据格式:
json[
{
"instruction": "人类指令(必填)",
"input": "人类输入(选填)",
"chosen": "优质回答(必填)",
"rejected": "劣质回答(必填)"
}
]
字段说明:
chosen
:模型的优质回答。rejected
:模型的劣质回答。dataset_info.json
配置:
json"数据集名称": {
"file_name": "data.json",
"ranking": true,
"columns": {
"prompt": "instruction",
"query": "input",
"chosen": "chosen",
"rejected": "rejected"
}
}
KTO 数据集类似于偏好数据集,但使用 kto_tag
来标记回答的好坏。
数据格式:
json[
{
"instruction": "人类指令(必填)",
"input": "人类输入(选填)",
"output": "模型回答(必填)",
"kto_tag": "true 或 false(必填)"
}
]
字段说明:
kto_tag
:人类反馈标签,true
表示回答优质,false
表示回答有问题。dataset_info.json
配置:
json"数据集名称": {
"file_name": "data.json",
"columns": {
"prompt": "instruction",
"query": "input",
"response": "output",
"kto_tag": "kto_tag"
}
}
多模态数据集在文本之外,额外添加了图像等其他模态的信息。目前仅支持单张图像输入。
数据格式:
json[
{
"instruction": "人类指令(必填)",
"input": "人类输入(选填)",
"output": "模型回答(必填)",
"images": [
"图像路径(必填)"
]
}
]
字段说明:
images
:包含图像路径的列表。dataset_info.json
配置:
json"数据集名称": {
"file_name": "data.json",
"columns": {
"prompt": "instruction",
"query": "input",
"response": "output",
"images": "images"
}
}
ShareGPT 格式支持更复杂的对话结构和角色类型,适用于需要模拟真实对话的场景。
示例数据集:指令监督微调样例数据集
ShareGPT 格式的核心是 conversations
列,它是一个对象列表,每个对象包含 from
(消息来源)和 value
(消息内容)。
数据格式:
json[
{
"conversations": [
{
"from": "human",
"value": "人类指令"
},
{
"from": "function_call",
"value": "工具调用参数"
},
{
"from": "observation",
"value": "工具返回结果"
},
{
"from": "gpt",
"value": "模型回答"
}
],
"system": "系统提示词(选填)",
"tools": "工具描述(选填)"
}
]
字段说明:
conversations
:对话列表,包含不同角色的消息。from
:消息来源,如 human
、gpt
、function_call
、observation
等。value
:消息内容。system
:系统提示词。tools
:工具描述,用于辅助对话。注意:human
和 observation
必须出现在奇数位置,gpt
和 function_call
必须出现在偶数位置。
dataset_info.json
配置:
json"数据集名称": {
"file_name": "data.json",
"formatting": "sharegpt",
"columns": {
"messages": "conversations",
"system": "system",
"tools": "tools"
}
}
示例数据集:偏好数据样例数据集
ShareGPT 格式的偏好数据集需要在 chosen
和 rejected
字段中分别提供优质和劣质的回复。
数据格式:
json[
{
"conversations": [
{
"from": "human",
"value": "人类指令"
},
{
"from": "gpt",
"value": "模型回答"
}
],
"chosen": {
"from": "gpt",
"value": "优质回答"
},
"rejected": {
"from": "gpt",
"value": "劣质回答"
}
}
]
dataset_info.json
配置:
json"数据集名称": {
"file_name": "data.json",
"formatting": "sharegpt",
"ranking": true,
"columns": {
"messages": "conversations",
"chosen": "chosen",
"rejected": "rejected"
}
}
OpenAI 格式是 ShareGPT 格式的特殊情况,主要区别在于消息的结构。
数据格式:
json[
{
"messages": [
{
"role": "system",
"content": "系统提示词(选填)"
},
{
"role": "user",
"content": "人类指令"
},
{
"role": "assistant",
"content": "模型回答"
}
]
}
]
字段说明:
messages
:消息列表,每个消息包含 role
和 content
。role
:消息的角色,如 system
、user
、assistant
。content
:消息内容。dataset_info.json
配置:
json"数据集名称": {
"file_name": "data.json",
"formatting": "sharegpt",
"columns": {
"messages": "messages"
},
"tags": {
"role_tag": "role",
"content_tag": "content",
"user_tag": "user",
"assistant_tag": "assistant",
"system_tag": "system"
}
}
准备高质量的数据集是训练优秀语言模型的基础。无论是采用 Alpaca 格式还是 ShareGPT 格式,都需要严格遵守数据格式和字段要求。同时,在 dataset_info.json
中正确配置数据集的信息,确保模型能够正确读取和处理数据。
本文作者:Dong
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC。本作品采用《知识共享署名-非商业性使用 4.0 国际许可协议》进行许可。您可以在非商业用途下自由转载和修改,但必须注明出处并提供原作者链接。 许可协议。转载请注明出处!