.. _数据处理:
数据处理
============================
`dataset_info.json `_ 包含了所有经过预处理的 **本地数据集** 以及 **在线数据集**。如果您希望使用自定义数据集,请 **务必** 在 ``dataset_info.json`` 文件中添加对数据集及其内容的定义。
目前我们支持 :ref:`Alpaca` 格式和 :ref:`ShareGPT` 格式的数据集。
.. 一个完整的例子如下,
.. _alpaca:
Alpaca
------------------
针对不同任务,数据集格式要求如下:
* :ref:`指令监督微调 <指令监督微调数据集>`
* :ref:`预训练 <预训练数据集>`
* :ref:`偏好训练 <偏好数据集-1>`
* :ref:`KTO `
* :ref:`多模态 <多模态数据集>`
.. _指令监督微调数据集:
指令监督微调数据集
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
**样例数据集**: `指令监督微调样例数据集 `__
指令监督微调(Instruct Tuning)通过让模型学习详细的指令以及对应的回答来优化模型在特定指令下的表现。
``instruction`` 列对应的内容为人类指令, ``input`` 列对应的内容为人类输入, ``output`` 列对应的内容为模型回答。下面是一个例子
.. code-block:: json
"alpaca_zh_demo.json"
{
"instruction": "计算这些物品的总费用。 ",
"input": "输入:汽车 - $3000,衣服 - $100,书 - $20。",
"output": "汽车、衣服和书的总费用为 $3000 + $100 + $20 = $3120。"
},
在进行指令监督微调时,``instruction`` 列对应的内容会与 ``input`` 列对应的内容拼接后作为最终的人类输入,即人类输入为``instruction\ninput``。而 ``output`` 列对应的内容为模型回答。在上面的例子中,人类的最终输入是:
.. code-block:: text
计算这些物品的总费用。
输入:汽车 - $3000,衣服 - $100,书 - $20。
模型的回答是:
.. code-block:: text
汽车、衣服和书的总费用为 $3000 + $100 + $20 = $3120。
如果指定, ``system`` 列对应的内容将被作为系统提示词。
``history`` 列是由多个字符串二元组构成的列表,分别代表历史消息中每轮对话的指令和回答。注意在指令监督微调时,历史消息中的回答内容也会被用于模型学习。
指令监督微调数据集 **格式要求** 如下:
.. code-block:: json
[
{
"instruction": "人类指令(必填)",
"input": "人类输入(选填)",
"output": "模型回答(必填)",
"system": "系统提示词(选填)",
"history": [
["第一轮指令(选填)", "第一轮回答(选填)"],
["第二轮指令(选填)", "第二轮回答(选填)"]
]
}
]
下面提供一个 alpaca 格式 **多轮** 对话的例子,对于单轮对话只需省略 ``history`` 列即可。
.. code-block:: json
[
{
"instruction": "今天的天气怎么样?",
"input": "",
"output": "今天的天气不错,是晴天。",
"history": [
[
"今天会下雨吗?",
"今天不会下雨,是个好天气。"
],
[
"今天适合出去玩吗?",
"非常适合,空气质量很好。"
]
]
}
]
对于上述格式的数据, ``dataset_info.json`` 中的 **数据集描述** 应为:
.. code-block:: json
"dataset_name": {
"file_name": "data.json",
"columns": {
"prompt": "instruction",
"query": "input",
"response": "output",
"system": "system",
"history": "history"
}
}
.. _预训练数据集:
预训练数据集
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
**样例数据集**: `预训练样例数据集 `_
大语言模型通过学习未被标记的文本进行预训练,从而学习语言的表征。通常,预训练数据集从互联网上获得,因为互联网上提供了大量的不同领域的文本信息,有助于提升模型的泛化能力。
预训练数据集文本描述格式如下:
.. code-block:: json
[
{"text": "document"},
{"text": "document"}
]
在预训练时,只有 ``text`` 列中的 **内容** (即document)会用于模型学习。
对于上述格式的数据, ``dataset_info.json`` 中的 **数据集描述** 应为:
.. code-block:: json
"dataset_name": {
"file_name": "data.json",
"columns": {
"prompt": "text"
}
}
.. _偏好数据集-1:
偏好数据集
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
偏好数据集用于奖励模型训练、DPO 训练和 ORPO 训练。对于系统指令和人类输入,偏好数据集给出了一个更优的回答和一个更差的回答。
`一些研究 `_ 表明通过让模型学习“什么更好”可以使得模型更加迎合人类的需求。甚至可以使得参数相对较少的模型的表现优于参数更多的模型。
偏好数据集需要在 ``chosen`` 列中提供更优的回答,并在 ``rejected`` 列中提供更差的回答,在一轮问答中其格式如下:
.. code-block:: json
[
{
"instruction": "人类指令(必填)",
"input": "人类输入(选填)",
"chosen": "优质回答(必填)",
"rejected": "劣质回答(必填)"
}
]
对于上述格式的数据,``dataset_info.json`` 中的 **数据集描述** 应为:
.. code-block:: json
"dataset_name": {
"file_name": "data.json",
"ranking": true,
"columns": {
"prompt": "instruction",
"query": "input",
"chosen": "chosen",
"rejected": "rejected"
}
}
.. _KTO数据集:
KTO 数据集
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
KTO数据集与偏好数据集类似,但不同于给出一个更优的回答和一个更差的回答,KTO数据集对每一轮问答只给出一个 true/false 的 ``label``。
除了 ``instruction`` 以及 ``input`` 组成的人类最终输入和模型回答 ``output`` ,KTO 数据集还需要额外添加一个 ``kto_tag`` 列(true/false)来表示人类的反馈。
在一轮问答中其格式如下:
.. code-block:: json
[
{
"instruction": "人类指令(必填)",
"input": "人类输入(选填)",
"output": "模型回答(必填)",
"kto_tag": "人类反馈 [true/false](必填)"
}
]
对于上述格式的数据, ``dataset_info.json`` 中的 **数据集描述** 应为:
.. code-block:: json
"dataset_name": {
"file_name": "data.json",
"columns": {
"prompt": "instruction",
"query": "input",
"response": "output",
"kto_tag": "kto_tag"
}
}
.. _多模态数据集:
多模态数据集
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
目前我们支持 :ref:`多模态图像数据集 <多模态图像数据集>`、 :ref:`视频数据集 <多模态视频数据集>` 以及 :ref:`音频数据集 <多模态音频数据集>` 的输入。
.. _多模态图像数据集:
图像数据集
""""""""""""""""""""""""""""
多模态图像数据集需要额外添加一个 ``images`` 列,包含输入图像的路径。注意图片的数量必须与文本中所有 标记的数量严格一致。
.. code-block:: json
[
{
"instruction": "人类指令(必填)",
"input": "人类输入(选填)",
"output": "模型回答(必填)",
"images": [
"图像路径(必填)"
]
}
]
对于上述格式的数据, ``dataset_info.json`` 中的 **数据集描述** 应为:
.. code-block:: json
"dataset_name": {
"file_name": "data.json",
"columns": {
"prompt": "instruction",
"query": "input",
"response": "output",
"images": "images"
}
}
.. _多模态视频数据集:
视频数据集
"""""""""""""""""""""""""
多模态视频数据集需要额外添加一个 ``videos`` 列,包含输入视频的路径。注意视频的数量必须与文本中所有