总览
大规模“指令调整”的语言模型,即 指令微调的 LLM,曾经体现出不凡的 零样本能力 ,尤其是推广 新工作上。然而,这些模型重大依赖于人类编写的指令数据,而这些数据通常在数量、多样性和创造力方面受到限制,因而妨碍了调整模型的通用性。
基于上述背景,作者提出了 Self-instruct 框架,一个 通过预训练语言模型本人疏导本人来进步的指令遵循能力的框架。
大白话点讲,就是
- 大模型本人遵循一套流程来生成数据,
- 再用这些生成的数据来指令微调训本人,
- 从而进步模型本人的能力。
因而核心思想就是生成 指令遵循数据
数据生成
指令数据由指令、输出、输入组成。如下图,作者的数据生成 piple 蕴含四个步骤:1)生成工作指令,2)确定指令是否代表分类工作,3)应用输出优先或输入优先方法生成实例,4)过滤低质量的数据。
1 指令生成
首先生成丰盛的指令,初始化 175 个工作,每个工作 1 个指令和 1 个实例;
- 每一个迭代都选 8 个工作的指令作为该工作的提醒样本,其中 6 个是人写的,2 个是生成的。
- 而后组成输出送入模型进行输入疏导,直到达到 token 限度或者够 16 个工作
2 分类工作辨认
作者对于分类工作和非分类工作的后续解决是不同的 ,所以须要先区别是否为分类工作,这里同样应用 LLM 对生成的指令进行区别。如下图(只显示了局部),作者为列举 12 个分类指令和 19 个非分类指令作为 prompt 提醒, 以少样本学习提醒的形式让 LLM 判断是否工作为分类。
3 实例生成
针对每一工作类型,作者独立的生成实例,即整个指令数据。
指令微调个别三局部:指令、输出和输入,大模型须要对这 3 局部都进行生成。
这部分比拟难的是让 大模型了解模板工作是什么 ,并 依据指令 (下面曾经生成了), 失去输出 ,再进一步 补充出输入。
作者发现大模型对 指令 - 输出 - 输入 提醒的上下文学习有成果,于是:
输出优先形式(Input-first Approach)
以下图为例,给大模型一堆例子,指令领导它进行参考生成:如果须要 input,就学生成 input,如果没有 input,就间接生成 output
输入优先形式(Output-first Approach)
下面这种输出优先的形式不适宜局部工作生成,尤其是分类工作 ,生成的输出会偏差于某个标签(label),比方是语法错误检测工作,他会生成 语法性的输出。于是作者提出 输入优先形式,将输入放在后面进行上下文学习,
4 过滤和后处理
- 为了保障指令多样性,新指令中只有与已有指令 ROUGE- L 类似度(掂量自然语言类似度的指标)小于 0.7 的才会被保留;
- 蕴含特定关键词的指令也剔除(image, picture, graph 等 LM 原本也无奈解决的);
- 去除 输入输出 完全相同 的实例;或者 输出雷同输入不同 的实例;
- 还有一些启发式办法(比方指令太长 / 短,输入是输出的反复等等)进行剔除;