1. 论文的核心问题和核心贡献
核心问题:该论文解决的问题是大规模语言模型在微调响应指令时过于依赖人工编写的指令数据,这些数据往往在数量、种类和创意上都存在局限,阻碍了模型的广泛泛化能力。研究的主要目标是开发一种方法,通过语言模型自身生成的指令来改善其跟随指令的能力,从而减少对人工编写指令数据的依赖。
核心贡献:
- 提出了SELF-INSTRUCT框架,通过预训练的语言模型生成指令、输入和输出样本,然后过滤无效或相似的样本,最终用于微调原始模型。
- 在vanilla GPT-3上应用该方法,显著提升了模型在SUPER-NATURALINSTRUCTIONS上的性能,达到了与InstructGPT001相当的水平。
- 通过专家编写的指令集合进行进一步评估,表明通过SELF-INSTRUCT微调的GPT-3在跟随指令的能力上大幅优于现有的公共指令数据集,并且仅比InstructGPT001落后5%。
2. 相关工作,目前业界进行该任务常用的方法
相关工作:
- 目前,构建能够响应自然语言指令的模型是NLP领域的热点,相关研究包括Mishra等(2022)、Wei等(2022)、Sanh等(2022)以及Wang等(2022)等。这些研究依赖大规模预训练的语言模型和人工编写的指令数据来提升模型的泛化能力。
- PROMPTSOURCE(Bach等,2022)和SUPER-NATURALINSTRUCTIONS(Wang等,2022)是常用的公共指令数据集,但这些数据集在多样性和创意性方面存在局限。
常用方法:
- 人工编写指令数据集:这是当前解决类似问题的主流方法,但存在数据收集成本高、数据种类有限等问题。
- 大规模预训练语言模型:例如GPT-3,通过在大规模文本数据上预训练,获得广泛的语言理解和生成能力,但其在特定任务上的性能需要进一步微调。
- 微调方法:包括使用现有指令数据集对模型进行监督微调,以增强其指令跟随能力。
3. 论文的实现方法
方法概述:
SELF-INSTRUCT框架包含以下步骤:
- 指令生成:使用一个小型的种子任务集合,引导模型生成新的任务指令。
- 分类任务识别:确定生成的指令是否表示分类任务。
- 实例生成:为每个指令生成对应的输入输出实例。
- 过滤和后处理:自动过滤低质量或重复的指令和实例。
详细步骤:
- 指令生成:从175个手工编写的种子任务开始,随机抽取8个任务作为上下文示例,通过模型生成新的任务指令。
- 分类任务识别:使用少量的分类和非分类指令,通过模型确定生成的指令是否为分类任务。
- 实例生成:对于分类任务,先生成可能的标签,然后生成对应的输入;对于非分类任务,先生成输入,再生成输出。
- 过滤和后处理:通过计算新生成指令与已有指令的ROUGE-L相似度来确保数据的多样性,同时排除包含特定关键词或格式不正确的指令和实例。
接下来我们来详细介绍一下这一步骤!
多样性检查
1. 计算相似度
在这一步,我们使用ROUGE-L相似度来计算新生成指令与已有指令之间的相似度。ROUGE-L相似度是评价文本相似度的一种方法,主要通过计算两个文本中最长公共子序列(Longest Common Subsequence,LCS)来衡量它们的相似度。具体步骤如下:
-
准备文本:我们有一组已有的指令和一个新生成的指令。
比如,已有的指令:
- 请写一封以猫的视角写的信。
- 帮我填写一个工作申请表。
- 编写一个将华氏度转换为摄氏度的代码。
新生成的指令:
- 编写一个将摄氏度转换为华氏度的代码。
-
计算LCS:对于新生成的指令和每个已有指令,计算它们的最长公共子序列长度。
例如,对于新生成的指令“编写一个将摄氏度转换为华氏度的代码”和已有的指令“编写一个将华氏度转换为摄氏度的代码”,它们的最长公共子序列是“编写一个将华氏度转换为的代码”,长度为11。
-
计算ROUGE-L相似度:使用最长公共子序列长度除以两者的长度平均值,得到相似度分数。
2. 确保多样性
在计算出新生成指令与已有指令的ROUGE-L相似度后,我们需要确保这些指令的多样性,避免生成过于相似的指令。具体步骤如下:
-
设定相似度阈值:我们设定一个相似度阈值,比如0.7,作为判断新生成指令是否与已有指令过于相似的标准。
-
比较相似度:将新生成指令的相似度与每个已有指令的相似度进行比较。
例如,对于新生成的指令“编写一个将摄氏度转换为华氏度的代码”,我们与已有指令“编写一个将华氏度转换为摄氏度的代码”计算出的相似度为0.92,大于0.7。
-
排除相似指令:如果新生成指令与任何一个已有指令的相似度超过0.7,我们认为这两个指令过于相似,从而将新指令排除。
例如,由于新生成指令的相似度为0.92,大于0.7,所以我们将其排除,避免重复内容。
-
保留多样指令:如果新生成指令的相似度低于0.7,则认为其具有足够的多样性,可以保留下来用于训练。
示例总结
假设已有指令集合如下:
- 请写一封以猫的视角写的信。
- 帮我填写一个工作申请表。
- 编写一个将华氏度转换为摄氏度的代码。
- 其他指令……
新生成的指令:
- 编写一个将摄氏度转换为华氏度的代码。
我们计算出新生成指令与第三条已有指令的ROUGE-L相似度为0.92(大于0.7)。因此,我们认为这条新指令与已有指令过于相似,将其排除。这样可以确保我们保留的指令是多样化的,不会有太多重复。
通过这些步骤,我们可以确保生成的指令数据集是多样化的,包含丰富的内容,进而提高模型的泛化能力。
4. 论文的主要实验结果
实验设计:
- 使用GPT-3进行实验,生成约52K条指令和82K个实例,并通过这些数据微调模型。
- 评估指标包括在SUPER-NATURALINSTRUCTIONS上的表现以及通过人工编写的指令集合进行的人类评估。
结果分析:
- 在SUPER-NATURALINSTRUCTIONS上,微调后的模型性能比原始模型提高了33%,与InstructGPT001的性能相当。
- 在专家编写的新任务指令集上,SELF-INSTRUCT微调的GPT-3在指令跟随能力上大幅优于基于现有公共指令数据集微调的模型,仅比InstructGPT001落后5%。
5. 当前该研究存在的问题,未来可能的研究方向
存在的问题:
- 生成数据的质量仍然存在一定的噪声,部分生成的实例可能不完全正确或不一致。
- 方法的有效性在很大程度上依赖于预训练模型的质量和生成能力,对于较小或较弱的模型可能效果不佳。
- 在实际应用中,某些生成的指令和实例可能不符合特定领域的需求,需要进一步优化和定制。
未来研究方向:
- 提高生成数据的质量:通过人类专家的参与或使用更强大的模型生成更高质量的数据。
- 扩展应用范围:将SELF-INSTRUCT框架应用到多模态学习或其他特定领域,如医学或法律等。
- 优化算法:探索更有效的过滤和后处理方法,进一步提升生成数据的多样性和准确性。
通俗案例解释:
指令生成
想象一下,你是一个老师,你有一小堆手工写的练习题,这些练习题是由其他老师编写的(种子任务)。现在,你希望你的学生能够自己生成更多的练习题。
-
选出示例:你从这堆练习题中随机抽取8个题目,作为示范给学生看。就像是你告诉学生:“看看这些题目是怎么写的”。
比如:
- 示例题1:请写一封以猫的视角写的信。
- 示例题2:帮我填写一个工作申请表。
- 示例题3:编写一个将华氏度转换为摄氏度的代码。
- …
-
生成新题:然后,你让学生根据这8个题目的风格和格式,自己尝试编写新的练习题。
分类任务识别
接下来,你需要判断新生成的练习题是哪种类型,就像判断这道题是选择题还是问答题。
-
选择分类标准:你告诉学生,一些题目有固定的答案选项(比如“是”或“否”,“A”或“B”),这些题目就是分类任务。其他题目则是开放式回答(比如写一篇短文或编写一个程序)。
-
判断类型:学生根据你给的标准,来判断每道题是分类任务还是非分类任务。
实例生成
现在,你需要为这些题目生成具体的例子和答案。就像是给题目添加具体的内容。
-
分类任务:
- 生成标签:先想出可能的答案选项。
比如,如果题目是“这个句子的情感是积极的还是消极的?”,那么标签可能是“积极的”和“消极的”。 - 生成输入:然后为每个标签生成对应的句子。
比如,积极的句子:“今天阳光明媚,我感到非常开心。”;消极的句子:“今天下雨了,我感到很沮丧。”
- 生成标签:先想出可能的答案选项。
-
非分类任务:
- 生成输入:直接生成题目的具体内容。
比如,如果题目是“描述一下如何系鞋带”,输入可以是:“首先,交叉两个鞋带,然后将一个鞋带绕过另一个,再拉紧。” - 生成输出:根据输入生成答案或解释。
比如,输出:“这样你就完成了系鞋带的步骤。”
- 生成输入:直接生成题目的具体内容。
过滤和后处理
最后,你需要确保这些新生成的题目是多样的,并且没有错误。
-
多样性检查:你检查每个新题目与已有题目的相似度,确保它们不太相似,保持题目的多样性。
比如,如果一个新题目“描述一下如何做饭”与已有题目“描述一下如何煮米饭”非常相似,你可能会把这个新题目排除掉。
-
排除错误:你还要排除包含特定关键词(比如“图片”或“图表”)或格式不正确的题目。
比如,如果一个题目是“请描述这张图片”,因为无法处理图片信息,所以你会把这个题目排除掉。
通过这些步骤,你的学生(模型)就可以自己生成一大堆新的、有创意的练习题,并且这些题目可以用于进一步的学习和练习。这就是SELF-INSTRUCT框架的基本工作原理!
总结:SELF-INSTRUCT提供了一种创新的方法,通过模型自身生成指令数据来改善其指令跟随能力,显著减少了对人工编写数据的依赖,展示了良好的应用前景。未来研究可以在提高数据质量和扩展应用范围方面进一步探索。