准备数据
本教程使用到的训练数据集是Alpaca数据集。您也可以自行准备数据集。
Alpaca数据集
本教程使用Alpaca数据集,数据集的介绍及下载链接如下。
Alpaca数据集是由OpenAI的text-davinci-003引擎生成的包含52k条指令和演示的数据集。这些指令数据可以用来对语言模型进行指令调优,使语言模型更好地遵循指令。
- 预训练使用的Alpaca数据集下载:https://huggingface.co/datasets/tatsu-lab/alpaca/resolve/main/data/train-00000-of-00001-a09b74b3ef9c3b56.parquet,数据大小:24M左右。
- SFT和LoRA微调使用的Alpaca数据集下载:https://huggingface.co/datasets/QingyiSi/Alpaca-CoT/blob/main/alpacaGPT4/alpaca_gpt4_data.json,数据大小:43.6 MB。
自定义数据
- 预训练数据:用户也可以自行准备预训练数据。数据要求如下:
使用标准的.json格式的数据,通过设置--json-key来指定需要参与训练的列。请注意huggingface中的数据集具有如下this格式。可以使用–json-key标志更改数据集文本字段的名称,默认为text。在维基百科数据集中,它有四列,分别是id、url、title和text。可以指定–json-key标志来选择用于训练的列。
{ 'id': '1', 'url': 'https://simple.wikipedia.org/wiki/April', 'title': 'April', 'text': 'April is the fourth month...' }
- Alpaca 指令微调数据:如上述提供的 alpaca_gpt4_data.json 数据集,数据集包含有以下字段:
- instruction:描述模型应执行的任务。指令中的每一条都是唯一的。
- input:任务的可选上下文或输入。instruction 对应的内容会与 input 对应的内容拼接后作为指令,即指令为 instruction\ninput。
- output:生成的指令的答案。
[ { "instruction": "指令(必填)", "input": "输入(选填)", "output": "模型回答(必填)", } ]
- MOSS 指令微调数据:本案例中还支持 MOSS 格式数据,标准的.json格式的数据,内容包括可以多轮对话、指令问答。例如以下样例:
{ "conversation_id": 1, "meta_instruction": "", "num_turns": 3, "chat": { "turn_1": { "Human": "<|Human|>: 如何保障工作中遵循正确的安全准则?<eoh>\n", "Inner Thoughts": "<|Inner Thoughts|>: None<eot>\n", "Commands": "<|Commands|>: None<eoc>\n", "Tool Responses": "<|Results|>: None<eor>\n", "MOSS": "<|MOSS|>: 为了保障工作中遵循正确的安全准则,以下是一些建议:\n\n1.了解相关安全规定和标准:了解相关的安全规定和标准,并遵守它们。这可以包括公司和政府的安全标准,以及行业标准和最佳实践。\n\n2.培训和教育:确保您和您的同事接受了必要的培训和教育,以了解正确的安全准则和行为。\n\n3.使用正确的工具和设备:确保您使用正确的工具和设备,并且它们得到了正确的维护和保养。\n\n4.个人防护装备:确保您和您的同事穿戴正确的个人防护装备,如安全鞋、透明眼镜或面罩、手套等。\n\n5.创建一个安全文化:鼓励个人对安全的责任感和意识,并创建一个安全文化,使人们始终关注他们自己和他人的安全。\n\n6.持续监测和改进:持续监测和改进安全准则和程序,以确保它们保持最新,并适应变化的情况。\n\n这些措施可以帮助您和您的同事在工作中保障正确的安全准则,确保您的工作场所是一个安全的环境。<eom>\n" }, "turn_2": { ... }, "turn_3": { ... }, "category": "Brainstorming" }
若用户希望将 MOSS 数据集的 Excel 格式转换为,json 格式。可使用代码中提供的 scripts/tools/ExcelToJson.py 工具,其转换的要求为:
- 本脚本可以处理的格式有:.xls .xlsx .csv .xlsb .xlsm .xlst
- MOSS 数据集的 Excel 中需要有三个列名称:conversation_id, Human, assistant
- conversation_id: 指定的对话id, 如果相同, 转换后就放在同一conversation_id的不同turn_X下。如果为空,则放在新的conversation_id下。
- Human: 数据集中每条数据的输入。
- assistant: 数据集中每条数据的输出。
- 运行命令示例:
1. python ExcelToJson.py --user_id=001 --excel_addr=xxx.xlsx(.csv) --dataset_name=example --test_count=3 2. python ExcelToJson.py --user_id=001 --excel_addr=xxx.xlsx(.csv) --dataset_name=example --proportion=2 (随机选择十分之二的总数据量作为测试集,小数时则四舍五入) 3. python ExcelToJson.py --user_id=001 --excel_addr=xxx.xlsx(.csv) --dataset_name=example --proportion=2 --test_count=3 (随机选择 3个数据作为测试集)
- user_id: 用户的唯一不重复的ID值,必选。
- excel_addr: 待处理的excel文件的地址,必选。
- dataset_name: 处理后的数据集名称,必选。
- proportion: 测试集所占份数,范围[1,9],可选。
- test_count: 测试集的个数,范围[1,处理后数据集总长度 - 1],可选。(用户在输入test_count时,要小于 Excel文件中指定的不同conversation_id的个数 + conversation_id为空的个数)
- proportion 和 test_count 二选一即可,若同时输入,则优先使用 test_count,若都未输入,则返回处理失败 False。
- LLama-Factory Alpaca 指令微调数据:数据集包含有以下字段:
- instruction:描述模型应执行的任务。指令中的每一条都是唯一的。
- input:任务的可选上下文或输入。instruction 对应的内容会与 input 对应的内容拼接后作为指令,即指令为 instruction\ninput。
- output:生成的指令的答案。
- system:系统提示词,用来为整个对话设定场景或提供指导原则。
- history: 一个列表,包含之前轮次的对话记录,每一对都是用户消息和模型回复。这有助于保持对话的一致性和连贯性。
[ { "instruction": "人类指令(必填)", "input": "人类输入(选填)", "output": "模型回答(必填)", "system": "系统提示词(选填)", "history": [ ["第一轮指令(选填)", "第一轮回答(选填)"], ["第二轮指令(选填)", "第二轮回答(选填)"] ] } ]
- LLama-Factory ShareGPT 指令微调数据:ShareGPT 格式来源于通过记录 ChatGPT 与用户对话的数据集,主要用于对话系统的训练。它更侧重于多轮对话数据的收集和组织,模拟用户与 AI 之间的交互。数据集包含有以下字段:
- conversations:包含一系列对话对象,每个对象都由发言者(from)和发言内容(value)组成。
- from:表示对话的角色,可以是"human"(人类)或"gpt"(机器),表示是谁说的这句话。
- value:具体的对话内容。
- system:系统提示词,用来为整个对话设定场景或提供指导原则。
- tools:描述可用的外部工具或功能的信息,这些工具可能被模型用来执行某些任务或获取更多信息。
[ { "conversations": [ { "from": "human", "value": "人类指令" }, { "from": "function_call", "value": "工具参数" }, { "from": "observation", "value": "工具结果" }, { "from": "gpt", "value": "模型回答" } ], "system": "系统提示词(选填)", "tools": "工具描述(选填)" } ]