LoRA
peft
https://mp.weixin.qq.com/s/kEGwA_7qAKhIuoxPJyfNuw
https://aistudio.baidu.com/aistudio/projectdetail/5567217

介绍

自从chatGPT出来后,好多人/机构开始尝试使用chatGPT来生成训练数据,简单省事方便。比如google bard,对,就是你,也有在偷偷使用。本文介绍一个项目BELLE,来看看大佬们是怎么做的。注意:此文重点在于如何生成数据。

利用chatGPT生成训练数据

最开始BELLE的思想可以说来自stanford_alpaca,不过在我写本文时,发现BELLE代码仓库更新了蛮多,所以此处忽略其他,仅介绍数据生成。

代码入口:generate_instruction_following_data

1. 加载zh_seed_tasks.json

zh_seed_tasks.json

默认提供了175个种子任务,样例如下图

2. encode_prompt

注意此处,看看如何构造chatGPT的输入以及chatGPT的输出。

最终prompt如下图所示

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

###
1. 指令: 给定一个句子,输出所有单词的词性标记。词性标记包括形容词、副词、连词、限定词、名词、数词、介词、代词、动词、助词。 以下是一个例子: 小明喜欢街角的那个蓝色房子。 词性标记结果是:小明 (名词) 喜欢 (动词) 街角 (名词) 的 (助词) 那个 (代词) 蓝色 (形容词) 房子 (名词) 。
1. 输入:
我确实不明白你在说什么.
1. 输出:
我 (代词)确实(副词)不明白(动词)你(代词)在(副词)说(动词)什么(代词).
###
2. 指令: 给定一组数,找出所有可能的子集,它们的和等于给定的数。
2. 输入:
集合:{3,12,7,2,8,4}
目标和:14
2. 输出:
{12,2},{7,3,4},{8,2,4}
###
3. 指令: 列出一些西游记中孙悟空的技能。
3. 输入:
<无输入>
3. 输出:
1. 筋斗云:西游世界天地间第一飞行法术,速度最快,一个跟头十万八千里。
2. 地煞七十二变:原著中七十二仅仅指数量,可以理解为能够变身成七十二种物体的变身法。
3. 物体变化术:能把毫毛变成本尊或其他物体,如:瞌睡虫,也能把除毫毛以外的其他物体变成本尊形象。
4. 护身法:施展后刀枪不入,天雷天火具莫能伤分毫。不过应该有施法前摇,施法后不能移动,所以孙悟空总是站着不动让人家砍。
5. 三头六臂:额外长出两颗头和四条胳膊,全方位无死角进行战斗,相当于一种战斗形态。
###
4. 指令:

由于没有OPENAI_API_KEY,所以咱们此处构造下results的结果,来看看post_process_gpt3_response的处理。

3. post_process_gpt3_response

1
2
3
4
5
results = [
{
"text": "根据以下输入文本,生成一篇400字左右的文章。\n4. 输入:\n近年来,随着人们健康意识的增强以及餐饮行业竞争的激烈,餐厅中出现了越来越多的健康餐饮品牌。这些品牌在产品配方、生产过程以及食材选取上更加注重健康因素,受到了越来越多消费者的青睐。同时,获取健康餐饮的途径也变得更加多样化,不光可以通过线下餐厅就餐,还可以通过外卖、自动售卖机等多种方式获取健康餐饮。然而,部分健康餐饮品牌的营养价值不尽相同,消费者在选择的时候需要注意。\n4. 输出:\n健康饮食正在受到越来越多人的重视,一些更加健康、营养更加全面的餐饮品牌正在受到更多关注。这些品牌不仅仅在产品配方、生产过程以及食材选择上更加注重健康因素,还提供了更多获取途径,例如线下餐厅、外卖、自动售卖机等等。但是,消费者在选择健康餐饮时需要注意一些细节。在购买前,建议您了解这家餐饮品牌是否真正关注营养价值,有没有认真挑选食材,是否考虑到了消费者对餐饮的健康需求。同时,您还需要关注一些常见问题,例如是否在加糖等。通过小心谨慎地挑选您的餐饮品牌,您可以尽可能地保证食物的健康性和营养价值,为您的健康保驾护航。"
}
]

可看到,具体做了一些chatGPT回复内容的后处理操作。比如过滤黑名单,chatGPT回复内容提出input、output、instruction。

4. bm25计算instruction相似度

这步也是后处理,计算chatGPT生成的instruction和已经拥有的instructions的相似度,如果大于阈值,就忽略掉生成的这个instruction。

最后

在huggingface上可看到作者生成的数据,比如train_0.5M_CN,train_1M_CN,这俩构成了作者宣称的1.5M数据集,当然还有一个10M的数据集。更多可看BelleGroup Datasets