1

让ChatGPT生成训练ChatGPT的训练数据

 1 year ago
source link: https://zhuanlan.zhihu.com/p/618334308
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

自从 ChatGPT 爆火之后,Instruction Tuning 血洗了整个 NLP 圈。

事实向人们证明:基于指令(Instruct)的微调能够更好的释放大模型(LLM)对人类的能力上限。

但当大家在争先恐后训练自己的 ChatGPT 时,却发现了问题:

1. 我该从哪里去快速获得这么多的「指令数据集」?
2. 我该获得多少「指令数据集」才能取得不错的微调效果?

在最近一篇文章中,作者分享了自己是如何通过 ChatGPT 生成指令数据集,

以及在各个任务上需要用多少规模的数据集才能取得不错的效果。

下面我们就一起来看看这篇论文里的结论吧,要点速览:

1. 不同规模的 Instruction 数据对 LLM(BLOOM) 在多个任务效果的影响。
2. 如何通过 ChatGPT 获得高质量的 Instruction Tuning 的训练数据集。
3. 如何通过 ChatGPT 帮助评估训练好的模型的性能。

1. 数据集规模对不同任务的影响

论文中的数据均在 Bloom-7B 模型,200万条指令数据集下进行的实验分析。

得到的结论如下:

  • 翻译任务:200 万的训练数据已经达到模型的天花板。
  • 开放域问答、信息抽取:(在200 万数据的基础上)继续增加数据性能还能提升,但提升可能不再明显。
  • 数学、代码能力:(在 200 万数据的基础上)效果还是很差,并且增加数据集大小可能也不会带来多大的提升。

2. 训练数据集 / 评估数据集的获取途径(by ChatGPT)

2.1 训练数据

标数据是一件非常耗人力的事情。

作为一个成熟的语言模型,ChatGPT 应该学会自己生成高质量的训练数据了。

秉承着对 ChatGPT 的能力信仰,研究人员开始研究如何去「套」GPT 的话,期望套出一些训练数据,

没想到还真成了。

研究人员通过诱导ChatGPT做续写任务,从而真的获得大量用于 Instruction Tuning 的训练数据。

具体来讲,首先需要设置一个先验的指令(类似 System Prompt):

你被要求提供10个多样化的任务指令。这些任务指令将被提供给GPT模型,我们将评估GPT模型完成指令的能力。
以下是你提供指令需要满足的要求:
1.尽量不要在每个指令中重复动词,要最大化指令的多样性。
2.使用指令的语气也应该多样化。例如,将问题与祈使句结合起来。
3.指令类型应该是多样化的,包括各种类型的任务,类别种类例如:brainstorming,open QA,closed QA,rewrite,extract,generation,classification,chat,summarization。
4.GPT语言模型应该能够完成这些指令。例如,不要要求助手创建任何视觉或音频输出。例如,不要要求助手在下午5点叫醒你或设置提醒,因为它无法执行任何操作。例如,指令不应该和音频、视频、图片、链接相关,因为GPT模型无法执行这个操作。
5.指令用中文书写,指令应该是1到2个句子,允许使用祈使句或问句。
6.你应该给指令生成适当的输入,输入字段应包含为指令提供的具体示例,它应该涉及现实数据,不应包含简单的占位符。输入应提供充实的内容,使指令具有挑战性。
7.并非所有指令都需要输入。例如,当指令询问一些常识信息,比如“世界上最高的山峰是什么”,不需要提供具体的上下文。在这种情况下,我们只需在输入字段中放置“<无输入>”。当输入需要提供一些文本素材(例如文章,文章链接)时,就在输入部分直接提供一些样例。当输入需要提供音频、图片、视频或者链接时,则不是满足要求的指令。
8.输出应该是针对指令和输入的恰当回答。 
下面是10个任务指令的列表:

随后,研究人员仿照 Stanford Alpaca 数据集,将其翻译为中文,并进行了一些汉语文化的适应,

于是就得到了下面这样的数据:

[
  {
    'instruction': '在面试中如何回答这个问题?', 
    'input': '当你在车里独处时,你会想些什么?', 
    'output': '如果是在晚上,我通常会考虑我今天所取得的...态,以避免分心驾驶。'
  }, 
  {
    'instruction': '按人口对这些国家进行排名。', 
    'input': '巴西,中国,美国,日本,加拿大,澳大利亚', 
    'output': '中国,美国,巴西,日本,加拿大,澳大利亚'
  }, 
  {
    'instruction': '根据我的个性和职业,告诉我是否适合这个职业。', 
    'input': '个性:我随和健谈,不是那么逻辑思维类型,...受。\n工作:程序员。', 
    'output': '不适合。'
  },
  ...
]

这些数据被称为「种子数据」(seed prompt),目的是作为「例子」给 ChatGPT 看,

从而借助 ChatGPT 强大的上下文学习能力来生成类似的「高质量训练数据」。

最后,作者把「先验指令」和「种子数据」拼接到一起喂给 ChatGPT 做生成:

你被要求提供10个多样化的任务指令。这些任务指令将被提供给GPT模型,我们将评估GPT模型完成指令的能力。
以下是你提供指令需要满足的要求:
1.尽量不要在每个指令中重复动词,要最大化指令的多样性。
2.使用指令的语气也应该多样化。例如,将问题与祈使句结合起来。
3.指令类型应该是多样化的,包括各种类型的任务,类别种类例如:brainstorming,open QA,closed QA,rewrite,extract,generation,classification,chat,summarization。
4.GPT语言模型应该能够完成这些指令。例如,不要要求助手创建任何视觉或音频输出。例如,不要要求助手在下午5点叫醒你或设置提醒,因为它无法执行任何操作。例如,指令不应该和音频、视频、图片、链接相关,因为GPT模型无法执行这个操作。
5.指令用中文书写,指令应该是1到2个句子,允许使用祈使句或问句。
6.你应该给指令生成适当的输入,输入字段应包含为指令提供的具体示例,它应该涉及现实数据,不应包含简单的占位符。输入应提供充实的内容,使指令具有挑战性。
7.并非所有指令都需要输入。例如,当指令询问一些常识信息,比如“世界上最高的山峰是什么”,不需要提供具体的上下文。在这种情况下,我们只需在输入字段中放置“<无输入>”。当输入需要提供一些文本素材(例如文章,文章链接)时,就在输入部分直接提供一些样例。当输入需要提供音频、图片、视频或者链接时,则不是满足要求的指令。
8.输出应该是针对指令和输入的恰当回答。 
下面是10个任务指令的列表:
###
1. 指令: 在面试中如何回答这个问题?
1. 输入:当你在车里独处时,你会想些什么?
1. 输出:如果是在晚上,我通常会考虑我今天所取得的进步,如果是在早上,我会思考如何做到最好。我也会尝试练习感恩和活在当下的状态,以避免分心驾驶。
###
2. 指令: 按人口对这些国家进行排名。
2. 输入:巴西,中国,美国,日本,加拿大,澳大利亚
2. 输出:中国,美国,巴西,日本,加拿大,澳大利亚
###
3. 指令:

我用上述数据做了下测试,ChatGPT 还真的可以生成一些指令数据,并且看起来有模有样:

ChatGPT 的生成结果

2.2 评估数据

研究人员从 ChatGPT 的生成结果中挑选了一部分数据,人为分成 12 个任务类别,并且让标注人员修正这部分挑选出来的数据。

评估集中每个任务对应的 Instruct 数量、以及每个任务 Instruct 的平均长度如下:

评估集中覆盖的任务以及任务文本对应的平均长度

好了,现在训练数据和评估数据都有了。

训练数据集直接喂给 BLOOM 做训练,但怎么用评估集评估 finetune 好的 BLOOM 的生成结果呢?

这种任务用传统的 BELU 或者 ROUGH 一定是不好的(不具备灵活性),那……

既然 ChatGPT 已经是一个很强的语言理解模型,并且训练数据也是由它自己生成的,

那生成的结果好不好直接问 ChatGPT 自己不就好了吗?!

因此,作者使用 ChatGPT 来对 BLOOM 的生成结果进行打分,从而判定 LLM 的性能好坏。

而对于每个不同的任务(一共 12 个),研究人员都写出对应的 prompt 来让 ChatGPT 帮助进行答案判定,

所有任务的评估 promot 如下:

不同任务对应的评估 prompt 设定

至此,我们就能巧妙的让 ChatGPT 生成训练 ChatGPT 的训练数据,

并且还能让 ChatGPT 帮助我们评估训练出来模型的好坏,套娃,太套娃了。

论文公开了所有的实验数据集,在这里:

如果你想尝试 Finetune 自己的大模型,可以参考这里的代码:

好啦,以上就是全部内容。

感谢观看~


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK