在上文【03】LLaMA-Factory微调大模型------多模型部署中完成了Qwen2、GLM-4、LLaMA3-8B-Chinese-Chat三个模型的部署,本文则进行数据准备,为后续的微调模型提供高质量、格式规范的数据支撑。
一、数据格式
LLaMA-Factory支持 alpaca 格式和 sharegpt 格式的数据集。
Alapaca格式
[
{
"instruction": "人类指令(必填)",
"input": "人类输入(选填)",
"output": "模型回答(必填)",
"system": "系统提示词(选填)",
"history": [
["第一轮指令(选填)", "第一轮回答(选填)"],
["第二轮指令(选填)", "第二轮回答(选填)"]
]
}
]
在指令监督微调时,instruction
列对应的内容会与 input
列对应的内容拼接后作为人类指令,即人类指令为 instruction\n input
。而 output
列对应的内容为模型回答。
如果指定,system
列对应的内容将被作为系统提示词。history
列是由多个字符串二元组构成的列表,分别代表历史消息中每轮对话的指令和回答。注意在指令监督微调时,历史消息中的回答内容也会被用于模型学习。
一个简单的 alpaca 格式样例数据集如下:
[
{
"instruction": "识别并解释给定列表中的两个科学理论:细胞理论和日心说。",
"input": "",
"output": "细胞理论是生物科学的一个理论,它认为所有生命体都是由微小的基本单元------细胞所构成。这是生物学的一个基础理论,认为细胞是所有生物的基本结构和功能单位,所有的生物都是由一个或多个细胞组成,细胞只能通过细胞分裂产生新的细胞。这一理论由薛定谔、施瓦内和雪莱于1839年首次提出。\n\n日心说是指太阳是太阳系的中心,也就是说,行星围绕太阳旋转的理论。这个理论打破了传统的地心说观点,认为地球并不是宇宙的中心。日心说的提出者是尼古拉·哥白尼,他在16世纪初发表了他的著作《天体运行论》,阐述了太阳系行星围绕太阳运行的模型,为天文学的发展做出了巨大贡献。"
},
{
"instruction": "输入三支篮球队的名称并生成一个适当的口号。",
"input": "输入:俄克拉荷马城雷霆队,芝加哥公牛队,布鲁克林网队。",
"output": "输出: \"雷霆,公牛和网队:各显神通,角逐群雄!\""
},
{
"instruction": "比较以下两位著名人物,使用特征列表并以句子形式提供输出。",
"input": "人物1:阿尔伯特·爱因斯坦\n人物2:斯蒂芬·霍金\n特征:智力、教育、对世界的影响",
"output": "阿尔伯特·爱因斯坦和斯蒂芬·霍金都是拥有极其出色智力的人物。两人都取得过非常高的教育成就,他们推进了科学发展并在世界范围内产生了深远的影响。爱因斯坦以其相对论和质能关系公式而闻名,而霍金以其关于黑洞和宇宙的发现而著称。两位科学家都以其深厚的学识和非凡的贡献影响了世界。"
}
]
相比 alpaca 格式的数据集,sharegpt 格式支持更多的角色种类 ,例如 human、gpt、observation、function 等等。它们构成一个对象列表呈现在 conversations
列中。其中 human 和 observation 必须出现在奇数位置,gpt 和 function 必须出现在偶数位置。sharegpt 格式如下:
[
{
"conversations": [
{
"from": "human",
"value": "人类指令"
},
{
"from": "function_call",
"value": "工具参数"
},
{
"from": "observation",
"value": "工具结果"
},
{
"from": "gpt",
"value": "模型回答"
}
],
"system": "系统提示词(选填)",
"tools": "工具描述(选填)"
}
]
二、配置数据集
LLaMA-Factory中的 文件中包含了所有可用的数据集。如果使用自定义数据集,首先需要在 dataset_info.json
文件中添加数据集描述 ,并通过修改 dataset: 数据集名称
配置来使用数据集。 dataset_info.json中的注册结构如下。
"数据集名称": {
"hf_hub_url": "Hugging Face 的数据集仓库地址(若指定,则忽略 script_url 和 file_name)",
"ms_hub_url": "ModelScope 的数据集仓库地址(若指定,则忽略 script_url 和 file_name)",
"script_url": "包含数据加载脚本的本地文件夹名称(若指定,则忽略 file_name)",
"file_name": "该目录下数据集文件夹或文件的名称(若上述参数未指定,则此项必需)",
"formatting": "数据集格式(可选,默认:alpaca,可以为 alpaca 或 sharegpt)",
"ranking": "是否为偏好数据集(可选,默认:False)",
"subset": "数据集子集的名称(可选,默认:None)",
"split": "所使用的数据集切分(可选,默认:train)",
"folder": "Hugging Face 仓库的文件夹名称(可选,默认:None)",
"num_samples": "该数据集所使用的样本数量。(可选,默认:None)",
"columns(可选)": {
"prompt": "数据集代表提示词的表头名称(默认:instruction)",
"query": "数据集代表请求的表头名称(默认:input)",
"response": "数据集代表回答的表头名称(默认:output)",
"history": "数据集代表历史对话的表头名称(默认:None)",
"messages": "数据集代表消息列表的表头名称(默认:conversations)",
"system": "数据集代表系统提示的表头名称(默认:None)",
"tools": "数据集代表工具描述的表头名称(默认:None)",
"images": "数据集代表图像输入的表头名称(默认:None)",
"chosen": "数据集代表更优回答的表头名称(默认:None)",
"rejected": "数据集代表更差回答的表头名称(默认:None)",
"kto_tag": "数据集代表 KTO 标签的表头名称(默认:None)"
},
"tags(可选,用于 sharegpt 格式)": {
"role_tag": "消息中代表发送者身份的键名(默认:from)",
"content_tag": "消息中代表文本内容的键名(默认:value)",
"user_tag": "消息中代表用户的 role_tag(默认:human)",
"assistant_tag": "消息中代表助手的 role_tag(默认:gpt)",
"observation_tag": "消息中代表工具返回结果的 role_tag(默认:observation)",
"function_tag": "消息中代表工具调用的 role_tag(默认:function_call)",
"system_tag": "消息中代表系统提示的 role_tag(默认:system,会覆盖 system column)"
}
}
对于alpaca 格式的数据,dataset_info.json
中的数据集注册描述应为:
"数据集名称": {
"file_name": "data.json",
"columns": {
"prompt": "instruction",
"query": "input",
"response": "output",
"system": "system",
"history": "history"
}
}
对于sharegpt 格式的数据,dataset_info.json
中的数据集注册描述应为:
"数据集名称": {
"file_name": "data.json",
"formatting": "sharegpt",
"columns": {
"messages": "conversations",
"system": "system",
"tools": "tools"
}
}
三、指令监督微调数据集注册
为了构建法律垂直大模型,本文依据本地法律数据文本构建了指令微调数据集,名称为law_train.json,基本格式如下:
{
"instruction": "请根据基本案情,利用三段论的推理方式得到判决结果,判决结果包括:1.罪名;\n2.刑期。",
"input": "基本案情:\n广东省鹤山市人民检察院指控被告人李某甲于2014年7月7日9时许,在鹤山市宅梧镇双和公路宅梧收费站附近路段被民警抓获。民警当场从李某甲身上搜获搜获白色晶体38小包。经鉴定,从李某甲处缴获的白色晶体净重12.9克,检出甲基苯丙胺成分。被告人李某甲到案后如实供述自己的罪行,可以从轻处罚。建议对被告人判处有期徒刑六个月至一年六个月,并处罚金。提请法院依法惩处。上述事实,被告人李某甲在开庭审理过程中亦无异议,并有抓获被告人及破案的经过材料、被告人的供述、证人李X锋的证言、扣押物品清单、鉴定意见、辨认笔录、现场勘某足以认定。",
"output": "犯罪要件:\n犯罪主体:\n 犯罪主体为被告人李某甲,构成要件为完全行为能力人。\n 犯罪客体:\n 犯罪客体为社会公共安全,包括禁毒法规所保护的社会关系。被告人李某甲非法持有、贩卖毒品,严重危害社会公共安全,破坏社会治安秩序。\n 犯罪主观要件:\n 犯罪主观方面为故意,李某甲明知所持有的白色晶体为甲基苯丙胺,仍然故意贩卖毒品。犯罪意图为非法牟利。\n 犯罪客观要件:\n 犯罪时间:2014年7月7日9时许。犯罪地点:广东省鹤山市宅梧镇双和公路宅梧收费站附近路段。犯罪行为:携带白色晶体38小包,净重12.9克,检出甲基苯丙胺成分。犯罪结果:被民警抓获。\n 适用法条:\n 《中华人民共和国刑法》第三百四十八条 【非法持有毒品罪】,李某甲非法持有甲基苯丙胺十克以上不满五十克,罪名成立,应判处三年以下有期徒刑,并处罚金。 \n 判决结果:\n 罪名:非法持有毒品罪刑期:三年以下有期徒刑,并处罚金。 "
}
【提示】该指令微调数据集可通过博主的主页资源处获取
法律大模型-指令微调数据集资源-CSDN文库https://download.csdn.net/download/H66778899/89549524(1)将该数据集上传至服务器LLaMA-Factory/data路径下
上传成功后进行查询
(2)编辑dataset_info.json,注册自定义数据集
推荐window系统使用Xshell、mac系统使用royal tsx 进行远程,便于编辑文本。Xshell是一款图形化的SSH终端模拟软件。它可以在Windows操作系统上使用,用于远程连接到其他计算机或服务器,并在远程主机上执行命令。Royal TSX,其是一款功能强大的远程桌面和终端服务管理软件,适用于 macOS 系统。它可以帮助用户连接和管理远程桌面、终端、SSH、Telnet、VNC 和其他远程连接。Royal TSX的安装及使用方法可见博主的此篇博客。
采用文本编辑器或记事本将该文件打开,对law_train.json文件进行注册
"law_train": {
"file_name": "law_train.json",
"columns": {
"prompt": "instruction",
"query": "input",
"response": "output"
}
}
四、数据集验证
启动LLaMA-Factory的浏览器页面,在Train标签下,选择数据集,可找到law_train,此后预览数据集
llamafactory-cli webui
预览数据集可正常显示则表明数据集成功注册,显示该指令监督微调数据集包含11237条数据项,每一页可展示具体的数据内容
小结
本文介绍了如何准备指令监督微调数据,为后续的微调模型提供高质量、格式规范的数据支撑。下文【05】LLaMA-Factory微调大模型------微调模型将正式进入模型微调阶段,欢迎您持续关注,如果本文对您有所帮助,感谢您一键三连,多多支持!