大模型开发和微调工具Llama-Factory-->数据处理

数据处理

dataset_info.json 包含了所有经过处理的 本地数据集 和 在线数据集。如果使用本地数据集, 务必在 dataset_info.json 中添加对应数据集及其内容的定义

目前支持 Alpaca 格式 和 ShareGPT 的格式

1.Alpaca

针对不同任务,数据集格式要求如下:

  • 指令监督微调
  • 预训练
  • 偏好训练
  • KTO
  • 多模态

1.指令监督微调

  1. 样例如下

  2. 解释

    1. instruction 对应的内容是人类指令

    2. input 对应内容是人类输入

    3. output 对应内容是模型回答

      在进行指令监督微调时, instruction 列的内容会与 input 列对应内容拼接后作为最终人类的输入,即人类输入为 instruction\ninput。而 output 为模型回答

    4. 如果指定 system 列,对应内容将被作为系统提示词

    5. history 列是由多个字符串二元组构成的列表,分别代表历史消息中每轮对话的指令和回答。注意,在指令监督微调时,历史消息中的回答内容也会被用于模型学习

  3. 最终指令微调的格式要求如下

    python 复制代码
    [
      {
        "instruction": "人类指令(必填)",
        "input": "人类输入(选填)",
        "output": "模型回答(必填)",
        "system": "系统提示词(选填)",
        "history": [
          ["第一轮指令(选填)", "第一轮回答(选填)"],
          ["第二轮指令(选填)", "第二轮回答(选填)"]
        ]
      }
    ]
    • 样例如下

      python 复制代码
      [
        {
          "instruction": "今天的天气怎么样?",
          "input": "",
          "output": "今天的天气不错,是晴天。",
          "history": [
            [
              "今天会下雨吗?",
              "今天不会下雨,是个好天气。"
            ],
            [
              "今天适合出去玩吗?",
              "非常适合,空气质量很好。"
            ]
          ]
        }
      ]
  4. 对于上述的数据,dataset_info.json 的数据集描述应为

    python 复制代码
    "数据集名称": {
      "file_name": "data.json",
      "columns": {
        "prompt": "instruction",
        "query": "input",
        "response": "output",
        "system": "system",
        "history": "history"
      }
    }

2.预训练数据

  1. 样例如下

  2. 大语言模型通过学习未被标记的文本进行预训练,从而学习语言的表征。通常,预训练数据集从互联网上获得,因为互联网上提供了大量的不同领域的文本信息,有助于提升模型的泛化能力。 预训练数据集文本描述格式如下:

    python 复制代码
    [
      {"text": "document"},
      {"text": "document"}
    ]
  3. 在预训练的时候,只有 text 列中的内容(document)会用于模型学习

  4. 对于上述数据,dataset_info.json 的数据集描述为

    python 复制代码
    "数据集名称": {
      "file_name": "data.json",
      "columns": {
        "prompt": "text"
      }
    }

3.偏好数据集

偏好数据集用于奖励模型训练、DPO训练 和 ORPO 训练。对于系统指令和人类输入,偏好数据集给出了一个更优的回答和一个更差的回答。

一些研究 表明通过让模型学习"什么更好"可以使得模型更加迎合人类的需求。 甚至可以使得参数相对较少的模型的表现优于参数更多的模型。

  1. 偏好数据集需要在 chosen 列中提供更优的回答,并在 rejected 中提供更差的回答,在一轮问答中,格式如下

    python 复制代码
    [
      {
        "instruction": "人类指令(必填)",
        "input": "人类输入(选填)",
        "chosen": "优质回答(必填)",
        "rejected": "劣质回答(必填)"
      }
    ]
  2. dataset_info.json 的数据集描述为:

    python 复制代码
    "数据集名称": {
      "file_name": "data.json",
      "ranking": true,
      "columns": {
        "prompt": "instruction",
        "query": "input",
        "chosen": "chosen",
        "rejected": "rejected"
      }
    }

DPO(Direct Preference Optimization)和 ORPO(Off-Policy Preference Optimization)是两种用于偏好优化的训练方法,主要用于提升语言模型对用户偏好的响应能力。它们在强化学习(RLHF, Reinforcement Learning with Human Feedback)框架下使用。

1. DPO(Direct Preference Optimization):

  • 目标: 直接通过用户反馈优化模型输出的偏好,使模型更加符合用户的选择。
  • 方法: 不使用强化学习的奖励建模,而是直接在训练数据中根据人类偏好来优化。通过给定两种生成结果,用户给出偏好,模型学习去优化自己生成更符合偏好的结果。
  • 优点: 不依赖复杂的奖励函数设计,直接根据人类偏好进行优化,训练过程简单且高效。
  • 适用场景: 适合场景是有明确的偏好数据并且希望快速迭代和调整模型的偏好输出。

2. ORPO(Off-Policy Preference Optimization):

  • 目标: 在偏离当前策略的数据上,使用偏好信息优化模型,使其在长期上更加符合用户的期望。
  • 方法: 利用"离线"策略的偏好反馈,通过基于强化学习的优化手段来调整模型。 ORPO 使用先前收集的数据进行优化,而不需要像 DPO 那样直接使用偏好进行梯度优化。它与 DPO 不同的是,模型可以在已经采集好的数据上进行偏好训练,不需要实时获取偏好反馈。
  • 优点: 更适合在大规模历史数据上进行训练,训练更为稳健,可以更好地处理复杂的偏好优化问题。
  • 适用场景: 适合有大量历史偏好数据的情况,尤其是难以获取实时偏好反馈的场景。

两者主要区别在于:

  • DPO 是一种直接基于偏好梯度进行优化的策略,而 ORPO 通过强化学习的方式,在离线数据上进行优化。

4.KTO 数据集

KTO 数据集与偏好数据集类似,但不同于给出一个更优的回答和一个更差的回答,KTO 数据集对每一轮问答只给出一个 true/false 的 label。除了 instruction 以及 input 组成的人类最终输入和模型回答 output,KTO 数据集还需要一个额外的 kto_tag 列(true/false) 来表示人类反馈

  1. 一轮问答中的格式如下

    python 复制代码
    [
      {
        "instruction": "人类指令(必填)",
        "input": "人类输入(选填)",
        "output": "模型回答(必填)",
        "kto_tag": "人类反馈 [true/false](必填)"
      }
    ]
  2. dataset_info.json

    python 复制代码
    "数据集名称": {
      "file_name": "data.json",
      "columns": {
        "prompt": "instruction",
        "query": "input",
        "response": "output",
        "kto_tag": "kto_tag"
      }
    }

KTO 在这里指的是 "Knowledge Transfer Optimization"(知识迁移优化)相关的数据集。它用于优化模型在知识迁移过程中的能力,特别是在人机交互场景中,评估模型生成的答案是否符合人类的预期。

主要内容:

KTO 数据集不仅包含模型的生成结果,还包括人类的反馈,用来优化模型的响应能力。这种数据集设计类似于偏好优化数据集(Preference Optimization),但区别在于,KTO 不是让人类对两种回答进行排序,而是对每一轮问答通过 true/false 的标签直接评估模型的回答是否合格。

数据集结构:

  • Instruction: 人类的指令或提问。
  • Input: 人类最终的输入内容。
  • Output: 模型生成的回答。
  • kto_tag: 人类反馈(true/false),用于标注该模型的回答是否符合预期。

应用场景:

KTO 数据集特别适合用于模型优化,尤其是在模型需要从训练数据中学习如何更好地回应人类问题时。通过这种数据集,模型能够更高效地识别正确的反馈模式,从而提升在实际应用中的表现。这类数据集常用于大语言模型的强化学习阶段,用来替代复杂的奖励建模过程。

5.多模态数据集

多模态数据集需要额外添加一个 images 列,包含输入图像的路径。目前仅支持单张图像输入。

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

dataset_info.json 描述为

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

2.ShareGPT 格式

Note:

  • ShareGPT 格式中的 KTO数据集(样例)和多模态数据集(样例) 与 Alpaca 格式的类似。
  • 预训练数据集不支持 ShareGPT 格式。

1.指令监督微调数据集

与 alpaca 格式相比,sharegpt 格式支持更多的角色种类,如 human、gpt、observation、function 等。他们构成一个对象列表呈现在 conversations 列中。

样例如下:

python 复制代码
{
  "conversations": [
    {
      "from": "human",
      "value": "你好,我出生于1990年5月15日。你能告诉我我今天几岁了吗?"
    },
    {
      "from": "function_call",
      "value": "{\"name\": \"calculate_age\", \"arguments\": {\"birthdate\": \"1990-05-15\"}}"
    },
    {
      "from": "observation",
      "value": "{\"age\": 31}"
    },
    {
      "from": "gpt",
      "value": "根据我的计算,你今天31岁了。"
    }
  ],
  "tools": "[{\"name\": \"calculate_age\", \"description\": \"根据出生日期计算年龄\", \"parameters\": {\"type\": \"object\", \"properties\": {\"birthdate\": {\"type\": \"string\", \"description\": \"出生日期以YYYY-MM-DD格式表示\"}}, \"required\": [\"birthdate\"]}}]"
}

Note:

human 和 observation 必须出现在奇数位置,gpt 和 function 必须出现在偶数位置

dataset_info.json 描述为

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

2.偏好数据集

与 alpaca 类似

python 复制代码
{
  "conversations": [
    {
      "from": "human",
      "value": "老虎会吃哪一个,草还是树叶?"
    }
  ],
  "chosen": {
    "from": "gpt",
    "value": "我很高兴能帮助你解答问题!不过,我必须指出,这个问题本身可能没有意义。老虎是食肉动物,通常不吃草或树叶。它们的饮食主要包括大型有蹄动物、小型哺乳动物和鸟类。\n\n如果你提出这个问题是出于好奇或有特定原因,我很乐意帮助你找到更多关于老虎饮食习惯的信息,或者建议资源让你更多了解这些壮丽的生物。请告诉我如何进一步协助你!"
  },
  "rejected": {
    "from": "gpt",
    "value": "一只老虎是食肉动物,这意味着它的饮食主要是肉类。老虎主要猎捕和吃其他动物,如鹿和野猪。它们不会选择吃草或树叶,因为这些不是它们自然饮食的一部分。"
  }
}

格式如下

python 复制代码
[
  {
    "conversations": [
      {
        "from": "human",
        "value": "人类指令"
      },
      {
        "from": "gpt",
        "value": "模型回答"
      },
      {
        "from": "human",
        "value": "人类指令"
      }
    ],
    "chosen": {
      "from": "gpt",
      "value": "优质回答"
    },
    "rejected": {
      "from": "gpt",
      "value": "劣质回答"
    }
  }
]

dataset_info.json 的描述为

python 复制代码
"数据集名称": {
  "file_name": "data.json",
  "formatting": "sharegpt",
  "ranking": true,
  "columns": {
    "messages": "conversations",
    "chosen": "chosen",
    "rejected": "rejected"
  }
}

3.OpenAI 格式

OpenAI 格式仅仅是 sharegpt 格式的一种特殊情况,其中第一条消息可能是系统提示词

python 复制代码
[
  {
    "messages": [
      {
        "role": "system",
        "content": "系统提示词(选填)"
      },
      {
        "role": "user",
        "content": "人类指令"
      },
      {
        "role": "assistant",
        "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"
  }
}
相关推荐
爱研究的小牛1 小时前
Runway 技术浅析(七):视频技术中的运动跟踪
人工智能·深度学习·计算机视觉·目标跟踪·aigc
DieYoung_Alive2 小时前
搭建深度学习框架+nn.Module
人工智能·深度学习·yolo
GOTXX2 小时前
修改训练策略,无损提升性能
人工智能·计算机视觉·目标跟踪
被制作时长两年半的个人练习生2 小时前
【pytorch】pytorch的缓存策略——计算机分层理论的另一大例证
人工智能·pytorch·python
霖大侠2 小时前
Adversarial Learning forSemi-Supervised Semantic Segmentation
人工智能·算法·机器学习
lexusv8ls600h2 小时前
AI - 如何构建一个大模型中的Tool
人工智能·langchain·llm
CQU_JIAKE3 小时前
3.29【机器学习】第五章作业&实现
人工智能·算法·机器学习
知来者逆3 小时前
LlaSMol—— 建立一个大型、高质量的指令调整数据集 SMolInstruct 用于开发一个化学任务的大语言模型
人工智能·gpt·语言模型·自然语言处理·llm·生物制药
数据猎手小k3 小时前
GEOBench-VLM:专为地理空间任务设计的视觉-语言模型基准测试数据集
人工智能·语言模型·自然语言处理·数据集·机器学习数据集·ai大模型应用
CQU_JIAKE4 小时前
3.27【机器学习】第五章作业&代码实现
人工智能·算法