Self-Instruct:Aligning Language Model with Self Generated Instructions
Introdcution
现在已经有很多的实验证明了在构建模型时instruction的重要性,这个领域有两个关键因素:
- 大预言模型
- 人工标注的数据
但是也存在两个问题,人工成本过高,标注的数据不够多样性,为了解决这类问题,作者提出了Self- Instruction,一个半监督通过模型本身自动生成 instruction signals 的方法来finetune模型。
流程如下:
Method
Pipline
- 生成指令
- 判断是否为分类任务
- 实例化instruction: input- first or output first
- 过滤低质量数据
Instruction Generation
Self-instruction 是一个基于大模型的方法,大模型可以通过prompt(few-shot)的方法根据已有的人工标注的instruction 生成一些新的instruction。
作者一开始的task pool 一共有 175个task(一个instruction 和一个 instance),每次从task pool中提供sample 8个,有6个是从task pool sample的,2个通过大模型生成的。
Classification Task Identification
作者提到需要两种不同的task:分类任务与非分类任务,作者通过 prompt vanilla GPT3 few-shot来决定,使用了12个分类任务和19个非分类任务。
如下图:
Instance Generation
Input-First Approach
首先通过大模型利用instruction生成相应的input fields,让后在生成相应的output,这种方法作者指出不适用于分类任务。
Output- First Approach
对于分类任务,首先生成分类,然后对每个类别分别生成相应的input。
Filtering adn Postprocessing
只有当它的ROUGE-L与任何现有指令的重叠小于0.7时,也排除了包含一些特定关键字的指令
(例如,图像,图片,图表),通常不能由语言模型处理。当为每条指令生成新实例时,过滤掉完全相同的实例相同的输入但不同的输出。
Finetuning the LM to Follow Instructuions
拿到instruction data 后,可以把instruction 与 instance input 合并,采取监督学习的方式fin tune。
为了使模型对不同格式的鲁棒性,作者采用多重用于编码指令和实例的模板一起输入。例如,指令可以前缀为“Task:”或没有,输入可以为前缀“Input:”或没有,“Output:”可以是在提示符的末尾追加,且不同中间可以放几条折线。
Experiment
参考
https://arxiv.org/pdf/2212.10560.pdf