更新时间:2024-09-14 GMT+08:00
分享

准备数据

本教程使用到的训练数据集是Alpaca数据集。您也可以自行准备数据集。

Alpaca数据集

本教程使用Alpaca数据集,数据集的介绍及下载链接如下。

Alpaca数据集是由OpenAI的text-davinci-003引擎生成的包含52k条指令和演示的数据集。这些指令数据可以用来对语言模型进行指令调优,使语言模型更好地遵循指令。

自定义数据

  • 预训练数据:用户也可以自行准备预训练数据。数据要求如下:

    使用标准的.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。

上传数据到指定目录

将下载的原始数据存放在/home/ma-user/ws/training_data目录下。具体步骤如下:

  1. 进入到/home/ma-user/ws/目录下。
  2. 创建目录“training_data”,并将原始数据放置在此处。
    mkdir training_data 

    数据存放参考目录结构如下:

    ${workdir}(例如/home/ma-user/ws )
      |── training_data
           |── train-00000-of-00001-a09b74b3ef9c3b56.parquet  # 训练原始数据集
           |── alpaca_gpt4_data.json                          # 微调数据文件

多机情况下,只有在rank_0节点进行数据预处理,转换权重等工作,所以原始数据集和原始权重,包括保存结果路径,都应该在共享目录下。

相关文档