Skip to content

Commit

Permalink
Update dataset_format.md
Browse files Browse the repository at this point in the history
  • Loading branch information
LZHgrla authored Oct 10, 2023
1 parent 752a798 commit 7ae9a4e
Showing 1 changed file with 15 additions and 5 deletions.
20 changes: 15 additions & 5 deletions docs/zh_cn/user_guides/dataset_format.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,15 @@
- 增量预训练数据集用于提升模型在特定领域或任务的能力。
- 单轮对话和多轮对话数据集则经常用于指令微调(instruction tuning)阶段,以提升模型回复特定指令的能力。

在指令微调阶段,我们的目标是训练语言模型根据人类指令给出回答。 **因此,一般只有回答部分(Output)的 loss 会用于梯度回传,而指令部分(Input)部分的 loss 则不会用于权重更新。** 基于此,我们在对数据集进行预处理的时候引入了 "input" 和 "output" 两个字段,"input" 字段用于保存不需要计算 loss 的字段,例如用户指令,而 "output" 字段则用于保存需要计算 loss 的字段,例如输入指令对应的 GroundTruth 回答。
在指令微调阶段,我们的目标是训练语言模型根据人类指令给出回答。 **因此,一般只有回答部分(Output)的 loss 会用于梯度回传,而指令部分(System、Input)部分的 loss 则不会用于权重更新。** 基于此,我们在对数据集进行预处理的时候引入了 "system"、"input" 和 "output" 三个字段,"system"、"input" 字段用于保存不需要计算 loss 的文本,例如系统或用户指令,而 "output" 字段则用于保存需要计算 loss 的文本,例如输入指令对应的 GroundTruth 回答。

为了统一增量预训练、单轮对话和多轮对话三种数据集格式,我们将数据集格式设置为以下形式:

```json
[{
"conversation":[
{
"system": "xxx",
"input": "xxx",
"output": "xxx"
}
Expand All @@ -21,18 +22,20 @@
{
"conversation":[
{
"system": "xxx",
"input": "xxx",
"output": "xxx"
},
{
"system": "xxx",
"input": "xxx",
"output": "xxx"
}
]
}]
```

在训练过程中,我们会将一条数据中的多组 "input" 和 "output" 进行拼接,之后输入模型,并行计算每个位置的 loss ,但只有 "output" 部分对应的 loss 参与梯度回传,如下图所示。
在训练过程中,我们会将一条数据中的多组 "system"、"input" 和 "output" 进行拼接,之后输入模型,并行计算每个位置的 loss ,但只有 "output" 部分对应的 loss 参与梯度回传,如下图所示。

<div align="center">
<img src="https://github.com/open-mmlab/mmrazor/assets/41630003/d5d696de-c026-494c-8b95-b1ba4b492939" alt="Image" width="700" />
Expand All @@ -42,12 +45,13 @@

## 增量预训练数据集格式

由于增量预训练旨在帮助模型学习针对特定下游任务的语言知识和表达能力,因此数据集的全部内容对应的loss都应该用于梯度回传。因此,数据集的 "input" 为空,而 "output" 为一整条语料数据。增量预训练任务对应的数据集格式如下所示:
由于增量预训练旨在帮助模型学习针对特定下游任务的语言知识和表达能力,因此数据集的全部内容对应的 loss 都应该用于梯度回传。因此,数据集的 "system"、"input" 为空,而 "output" 为一整条语料数据。增量预训练任务对应的数据集格式如下所示:

```json
[{
"conversation":[
{
"system": "",
"input": "",
"output": "I am an artificial intelligence (AI) assistant named Puyu. I was created by the Shanghai AI Laboratory and my purpose is to assist users with various tasks through natural language processing technology."
}
Expand All @@ -56,6 +60,7 @@
{
"conversation":[
{
"system": "",
"input": "",
"output": "I am an artificial intelligence programmed to assist with various types of tasks, including answering questions, providing information, and performing automated processes."
}
Expand All @@ -69,13 +74,14 @@

## 单轮对话数据集格式

单轮对话数据集往往由一条指令(或问题)及其对应 GroundTruth 回答组成。由于只有回答部分需要对 loss 进行回传,因此数据集的 "input" 字段为输入指令,"output" 字段为对应回答。单轮对话数据集格式如下所示:
单轮对话数据集往往由一条指令(或问题)及其对应 GroundTruth 回答组成。由于只有回答部分需要对 loss 进行回传,因此数据集的 "system"、"input" 字段为输入指令,"output" 字段为对应回答。单轮对话数据集格式如下所示:

```json
[{
"conversation":
[
{
"system": "You are an AI asssistant."
"input": "Give three tips for staying healthy.",
"output": "1.Eat a balanced diet. 2. Exercise regularly. 3. Get enough sleep."
}
Expand All @@ -85,6 +91,7 @@
"conversation":
[
{
"system": "You are an AI asssistant."
"input": "How to study English?",
"output": "1. Set clear goals. 2. Create a study plan. 3. Build vocabulary. 4. Practice speaking."
}
Expand All @@ -102,6 +109,7 @@
为方便介绍,对于第 n 轮对话,我们将 User 和 Assistant 对应的输出设为 UserN 和 AssistantN。

```text
System: You are an AI asssistant.
User1:Hello?
Assistant1:Hello! How can I help you?
User2:What's the date today?
Expand All @@ -114,7 +122,7 @@ Assistant3:You are welcome.

### 方法 1

User1、Assistant1、User2、Assistant2、User3的文本都视为模型的输入部分,将 Assistant3 的文本视为模型的预测部分,只有 Assistant3 部分的 loss 参与权重更新。
System、User1、Assistant1、User2、Assistant2、User3的文本都视为模型的输入部分,将 Assistant3 的文本视为模型的预测部分,只有 Assistant3 部分的 loss 参与权重更新。

<div align="center">
<img src="https://github.com/open-mmlab/mmrazor/assets/41630003/ff4a44c4-43d7-45a7-8749-19b545f90207" alt="Image" width=1100" />
Expand Down Expand Up @@ -147,6 +155,7 @@ XTuner 训练多轮对话模型时,采取了一种更加充分高效的方法
[{
"conversation":[
{
"system": "You are an AI asssistant."
"input": "Hello?",
"output": "Hello! How can I help you?"
},
Expand All @@ -163,6 +172,7 @@ XTuner 训练多轮对话模型时,采取了一种更加充分高效的方法
{
"conversation":[
{
"system": "You are an AI asssistant."
"input": "Hello?",
"output": "Hello! How can I help you?"
},
Expand Down

0 comments on commit 7ae9a4e

Please sign in to comment.