SELF-INSTRUCT的介绍
作用:SELF-INSTRUCT,该方法可以仅使用最少的人工标注,生成大量的用于指令调优的数据。
指令格式:一条指令数据集由instruction、input、output三个部分组成。需要注意的是insturction和input之间没有严格的区分。如以下两个例子是相同的。
# 例子1
instruction: "write an essay aboutschool safety"
input:""
output:"...."
# 例子2
instruction: "write an essay about thefollowing topic"
input:"school safety"
output:"...."
SELF-INSTRUCT的流程
SELF-INSTRUCT的流程框架图如下图,主要分为四个步骤。SELF-INSTRUCT.png
第一步 自动化指令生成,就是instruction部分的自动生成。
作者先人工手写了175个任务,每个任务包含1个指令和一个实例,称为种子任务池。
- 第一次基于LLM生成命令时,FewShot的8个示例命令都是人工手写的。
- 然后不断生成新的命令,prompt的fewshot每次都是采样6个手写instruction和2个以前LLM自动生成的instruction。
prompt模板如下:
您需要写出 30 个不同的任务指令。这些任务指令将在未来提供给 GPT 模型去完成解答。
以下是要求:
1. 尽量不要重复每条指令的动词,以最大限度地提高多样性。
2. 指令使用的语气和方法也应多样化。例如,您可以将问题式指令与命令式指令相结合。
3. 指令的类型应多样化,即应包括不同类型的任务,如开放式生成、分类、编辑等。
4. 语言类模型应该能够完成指令。例如,请勿生成“创建任何视觉或音频输出”的指令,请勿生成“在下午 5 点叫醒您或设置提醒”的指令,因为语言类模型无法执行任何操作。
5. 指令所使用的语言应为中文。
6. 指令应为 1 到 2 句话长。允许使用祈使句或疑问句。
这里是一些已有的指令示例,请模仿这些示例,按上述要求生成30个不同的指令。
示例:
任务1:请回答世界上人口最多的五个国家的名字和人口数量。
任务2:#省略了……#
步骤二 分类任务识别
判断第一步生成的指令是否是一个分类任务。那什么是分类任务?论文中定义为“output的标签是一个有限的、小的标签集合的任务”。该步骤也是由LLM模型来判断,仍使用few-shot方式来实现——用种子任务集合中的12个分类任务指令和19个非分类任务指令作为few-shot的例子。
prompt模板如下:
以下任务可以被视为具有有限输出标签的分类任务吗?
任务:考虑到我的性格和工作,告诉我是否适合。
这是分类吗?是的
任务:举一个你必须运用幽默感的例子。
这是分类吗?不
任务:用适当的命名实体替换给定文本中的占位符。
这是分类吗?不
任务:返回此人的SSN编号。
这是分类吗?不
任务:检测Reddit帖子是否包含仇恨言论。
这是分类吗?是的
#省略其他示例
任务:{目标任务的指令}
步骤三 实例生成
给定指令及其任务类别,为每个指令生成实例。根据指令是否是分类任务,采取不同的prompt模板。
- (1)对于非分类任务,采用Input-firstApproach(输入优先),也就是先让LLM根据指令先生成一个输入(input),再生成对应的输出(output)(如果任务不需要input,就直接生成结果)。
对应的prompt模板如下:
为以下任务举个例子,尽可能生成多个示例。如果任务不需要额外的输入,您可以直接生成输出。
任务:对给定的列表进行升序排序。
示例1
清单:[10、92、2、5、-4、92、5、101]
输出:[-4,2,5,5,10,92,92,101]
示例2
列表:[9.99、10、-5、-1000、5e6、999]
输出:[-1000、-5、9.99、10、999、5e6]
任务:哪些运动最适合在家减少腹部脂肪?
输出:
-躺着的腿抬高
-腿进出
-木板
-侧板
-仰卧起坐
任务:提取段落中的所有国家名称,用逗号分隔。
段落:《诺博士》是英国作家伊恩·弗莱明的第六部小说,讲述了他的英国特勤局特工詹姆斯·邦德的故事。这本书写于牙买加弗莱明的Goldeneye庄园,1958年由乔纳森·凯普在英国首次出版。在小说中,邦德调查了两名一直在调查No.博士的军情六处特工在牙买加失踪的事件。邦德前往No的加勒比海岛屿,遇到了在那里收集贝壳的Honeychile Rider。他们被捕后被带到一座雕刻在山上的豪华设施。诺医生是一位德国传教士和一位中国妇女的儿子,他的性格受到了萨克斯·罗默傅满故事的影响。《诺博士》是弗莱明的第一部在英国受到广泛负面评论的小说,但在美国却受到了更积极的评价。
输出:英语、英国、牙买加、英国、德语、中文、英国、美国。
任务:将85华氏度转换为摄氏度。
输出:85°F=29.44°C
任务:{目标任务的说明}
- (2)对于分类任务,采用Output-first Approach(输出优先),先生成一个可能的类别标签,再在类别标签的条件下生成input。
prompt模板如下:
根据给定的分类任务和类别标签,请生成与每个类标签对应的输入。如果任务不需要输入,只需生成可能的类别标签。
以下是一些示例:
任务:将句子的情感分为积极、消极或混合。
类别标签:混合
输入:我喜欢这家餐厅的味道,但他们的服务太慢了。
类别标签:积极
输入:我今天过得很愉快。天气很好,我和朋友和家人在一起。
类别标签:消极
输入:我对最新的超级英雄电影真的很失望。我不会向任何人推荐它。
任务:给定一个对话,分类用户是否对服务满意。你应该回答“满意”或“不满意”。
类别标签:满意
输入:
-客服:谢谢你的反馈。我们将在未来努力改进我们的服务。
-顾客:我对你们提供的服务很满意。谢谢你的帮助。
类别标签:不满意
输入:
-客服:很抱歉,我们将为您取消订单,您将在7个工作日内获得退款。
-顾客:哦,那太久了。我希望你对此采取更快的行动。
任务:回答以下多项选择题。选择A、B、C或D作为最终答案。
类别标签:C
输入:问:德国的首都是哪里?A.伦敦 B.巴黎 C.柏林 D.罗马
类别标签:D
输入:问:太阳系中最大的行星是什么?A) 地球 B) 土星 C) 火星 D) 木星
任务:告诉我给定列表的第一个数字。
类别标签:1
输入:列表:1、2、3
类别标签:2
输入:列表:2、9、10
任务:{目标任务的说明}
步骤四 过滤和后处理
- 指令过滤:为了保证指令的多样性,一个指令只有与任务池中已有的指令的ROUGE-L(相似度)小于0.7才会被考虑加入到任务池,同时过滤掉包含一些特殊词(如image/picture/graph等)的生成指令。
- 实例过滤:对于生成的实例,过滤掉重复的、过滤掉相同input不同output的实例。并用启发式方法识别和过滤掉一些实例,比如是否太长、是否太短、输出是输入的重复等。
步骤五 检查自动生成的指令、输入、输出是否满足要求
为了验证生成数据的质量,随机从生成的样本中抽取200个任务(包含指令、输入和输出),然后让一个专家标注员来判断实例是否正确,最后统计合格率。
- 生成的指令是否描述了一个清晰有效的任务?
- 生成的输入是否与指令相匹配?
- 生成的输出是否正确回答了任务或指令?
- 整套指令、输入、输出都是合格的?