【04】LLaMA-Factory微调大模型——数据准备

在上文【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的安装及使用方法可见博主的此篇博客。

MacBook电脑远程连接Linux系统的服务器方法-CSDN博客https://blog.csdn.net/H66778899/article/details/140492540?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22140492540%22%2C%22source%22%3A%22H66778899%22%7D

采用文本编辑器或记事本将该文件打开,对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微调大模型------微调模型将正式进入模型微调阶段,欢迎您持续关注,如果本文对您有所帮助,感谢您一键三连,多多支持!

相关推荐
drebander24 分钟前
使用 Java Stream 优雅实现List 转化为Map<key,Map<key,value>>
java·python·list
威威猫的栗子1 小时前
Python Turtle召唤童年:喜羊羊与灰太狼之懒羊羊绘画
开发语言·python
Guofu_Liao1 小时前
大语言模型---梯度的简单介绍;梯度的定义;梯度计算的方法
人工智能·语言模型·矩阵·llama
我爱学Python!1 小时前
大语言模型与图结构的融合: 推荐系统中的新兴范式
人工智能·语言模型·自然语言处理·langchain·llm·大语言模型·推荐系统
墨染风华不染尘1 小时前
python之开发笔记
开发语言·笔记·python
果冻人工智能1 小时前
OpenAI 是怎么“压力测试”大型语言模型的?
人工智能·语言模型·压力测试
日出等日落1 小时前
Windows电脑本地部署llamafile并接入Qwen大语言模型远程AI对话实战
人工智能·语言模型·自然语言处理
Dxy12393102162 小时前
python bmp图片转jpg
python
麦麦大数据2 小时前
Python棉花病虫害图谱系统CNN识别+AI问答知识neo4j vue+flask深度学习神经网络可视化
人工智能·python·深度学习
段传涛2 小时前
PAL(Program-Aided Language Model)
人工智能·语言模型·自然语言处理