2024-11-01
深度学习
00

目录

数据准备详解:LLaMA-Factory
一、数据处理概述
二、支持的数据集格式
1. Alpaca 格式
(1)指令监督微调数据集
(2)预训练数据集
(3)偏好数据集
(4)KTO 数据集
(5)多模态数据集
2. ShareGPT 格式
(1)指令监督微调数据集
(2)偏好数据集
(3)OpenAI 格式
三、备注
四、总结

数据准备详解:LLaMA-Factory

https://llamafactory.readthedocs.io/zh-cn/latest/getting_started/data_preparation.html

在构建和优化大型语言模型的过程中,数据集的质量和格式至关重要。本文将详细介绍如何准备符合要求的数据集,包括数据格式、内容要求以及在 dataset_info.json 中的配置方法。

一、数据处理概述

dataset_info.json 文件包含了所有经过预处理的本地数据集和在线数据集的配置信息。如果您希望使用自定义数据集,请务必dataset_info.json 文件中添加对数据集及其内容的定义。

目前,我们支持以下两种数据集格式:

  • Alpaca 格式:适用于大多数单轮或多轮对话数据集,格式较为简单。
  • ShareGPT 格式:支持更丰富的对话角色和多轮对话,更贴近真实对话场景。

二、支持的数据集格式

1. Alpaca 格式

Alpaca 格式适用于大多数简单的问答和对话场景,特别是指令监督微调和预训练任务。以下是不同任务的数据集格式要求。

(1)指令监督微调数据集

示例数据集指令监督微调样例数据集

指令监督微调通过让模型学习详细的指令以及对应的回答,优化模型在特定指令下的表现。数据集格式如下:

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" } }

(2)预训练数据集

示例数据集预训练样例数据集

预训练数据集通常由大量未标记的文本构成,用于让模型学习语言的基础表示。格式如下:

json
[ {"text": "document1"}, {"text": "document2"} ]

字段说明

  • text:文本内容,模型将学习其中的语言结构和信息。

dataset_info.json 配置

json
"数据集名称": { "file_name": "data.json", "columns": { "prompt": "text" } }

(3)偏好数据集

偏好数据集用于奖励模型训练、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" } }

(4)KTO 数据集

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" } }

(5)多模态数据集

多模态数据集在文本之外,额外添加了图像等其他模态的信息。目前仅支持单张图像输入。

数据格式

json
[ { "instruction": "人类指令(必填)", "input": "人类输入(选填)", "output": "模型回答(必填)", "images": [ "图像路径(必填)" ] } ]

字段说明

  • images:包含图像路径的列表。

dataset_info.json 配置

json
"数据集名称": { "file_name": "data.json", "columns": { "prompt": "instruction", "query": "input", "response": "output", "images": "images" } }

2. ShareGPT 格式

ShareGPT 格式支持更复杂的对话结构和角色类型,适用于需要模拟真实对话的场景。

(1)指令监督微调数据集

示例数据集指令监督微调样例数据集

ShareGPT 格式的核心是 conversations 列,它是一个对象列表,每个对象包含 from(消息来源)和 value(消息内容)。

数据格式

json
[ { "conversations": [ { "from": "human", "value": "人类指令" }, { "from": "function_call", "value": "工具调用参数" }, { "from": "observation", "value": "工具返回结果" }, { "from": "gpt", "value": "模型回答" } ], "system": "系统提示词(选填)", "tools": "工具描述(选填)" } ]

字段说明

  • conversations:对话列表,包含不同角色的消息。
  • from:消息来源,如 humangptfunction_callobservation 等。
  • value:消息内容。
  • system:系统提示词。
  • tools:工具描述,用于辅助对话。

注意humanobservation 必须出现在奇数位置,gptfunction_call 必须出现在偶数位置。

dataset_info.json 配置

json
"数据集名称": { "file_name": "data.json", "formatting": "sharegpt", "columns": { "messages": "conversations", "system": "system", "tools": "tools" } }

(2)偏好数据集

示例数据集偏好数据样例数据集

ShareGPT 格式的偏好数据集需要在 chosenrejected 字段中分别提供优质和劣质的回复。

数据格式

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" } }

(3)OpenAI 格式

OpenAI 格式是 ShareGPT 格式的特殊情况,主要区别在于消息的结构。

数据格式

json
[ { "messages": [ { "role": "system", "content": "系统提示词(选填)" }, { "role": "user", "content": "人类指令" }, { "role": "assistant", "content": "模型回答" } ] } ]

字段说明

  • messages:消息列表,每个消息包含 rolecontent
  • role:消息的角色,如 systemuserassistant
  • 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" } }

三、备注

  • KTO 数据集和多模态数据集:ShareGPT 格式中的 KTO 数据集和多模态数据集与 Alpaca 格式类似,只需调整字段名称和数据结构即可。
  • 预训练数据集:目前不支持 ShareGPT 格式的预训练数据集。

四、总结

准备高质量的数据集是训练优秀语言模型的基础。无论是采用 Alpaca 格式还是 ShareGPT 格式,都需要严格遵守数据格式和字段要求。同时,在 dataset_info.json 中正确配置数据集的信息,确保模型能够正确读取和处理数据。

如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:Dong

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC。本作品采用《知识共享署名-非商业性使用 4.0 国际许可协议》进行许可。您可以在非商业用途下自由转载和修改,但必须注明出处并提供原作者链接。 许可协议。转载请注明出处!