返回介绍

数学基础

统计学习

深度学习

工具

Scala

五十二、Self-Instruct [2022]

发布于 2023-07-17 23:38:25 字数 32128 浏览 0 评论 0 收藏 0

  1. 最近的 NLP 文献见证了大量的 building model ,这些模型能够遵循自然语言指令(natural language instruction )。这些进展由两个关键部分所推动:大型预训练好的语言模型、人类编写的指令数据。PromptSourceSuperNaturalInstructions 是最近两个值得注意的数据集,它们使用大量的人工标注来收集构建 T0-InstructTk-Instruct 。然而,这个过程成本很高,而且考虑到大多数 human generation 往往是流行的 NLP 任务,常常遭受有限的多样性,没有涵盖真正的各种 NLP 任务、以及描述任务的不同方式。鉴于这些局限性,要继续提高 instruction-tuned 模型的质量,就必须开发出 supervising instruction-tuned 模型的替代方法。

    在论文 《Self-Instruct: Aligning Language Model with Self Generated Instructions》 中,作者介绍了 Self-Instruct ,这是一个半自动的过程,利用模型本身的 instructional signalpretrained LM 进行 instruction-tuning 。整个过程是一个迭代的bootstrapping 算法(如下图所示),它从一个有限的(例如,在论文的研究中是 175 个)手动编写指令的种子集(seed set )开始,这些手动编写的指令被用来指导整个generation

    • 在第一阶段,模型被 prompted 从而生成新任务的指令。这一步利用现有的指令集合来创建覆盖面更广的指令集合,这些新的指令用于定义任务(通常是新的任务)。

    • 给定新生成的指令集,该框架还为它们创建了 input-output instance ,这些 instance 随后可用于 supervising instruction tuning

    • 最后,在将其添加到任务池(task pool )之前,会使用各种措施来裁剪低质量的和重复的指令。

    这个过程可以反复迭代多次,直到达到大量的任务。

    为了评估 Self-Instruct ,作者在 GPT3 上运行这个框架,其中 GPT3 是一个平凡的语言模型。在 GPT3 上的迭代 Self-Instruct 过程导致了大约 52K 条指令,与大约 82Kinstance inputstarget outputs 相配对。作者观察到,所产生的数据提供了多种多样的创造性的任务,其中 50% 以上的任务与 seed instruction 的重合度低于 0.3 ROUGEL 。在这个结果数据上,作者通过微调 GPT3 (即用于生成指令数据的同一模型)来建立GPT3SELF-INST$ \text{GPT3}_\text{SELF-INST} $ 。作者在 SuperNaturalInstructions 中包含的典型 NLP 任务、以及为 instruction-following model 的新用途而创建的一组新指令上,对GPT3SELF-INST$ \text{GPT3}_\text{SELF-INST} $ 与其他各种模型进行评估。SUPERNI的结果表明,GPT3SELF-INST$ \text{GPT3}_\text{SELF-INST} $ 比 GPT3 (原始模型)有很大的优势( +33.1% ),几乎与InstructGPT001$ \text{InstructGPT}_{001} $ 的性能相当。此外,作者对新创建的指令集进行的人类评估表明,GPT3SELF-INST$ \text{GPT3}_\text{SELF-INST} $ 展示了广泛的 instruction following 能力,超过了在其他公开可用的指令数据集上训练的模型,与InstructGPT001$ \text{InstructGPT}_{001} $ 仅有 5% 的差距。

    综上所述,论文的主要贡献:

    • Self-Instruct ,一种用最少的人类标记数据诱导 instruction following 能力的方法。

    • 通过广泛的 instruction-tuning 实验证明了Self-Instruct 方法的有效性。

    • 发布了一个由 52K 指令组成的大型合成数据集、以及一组手工编写的新任务,用于建立和评估未来的 instruction-following 模型。

  2. 相关工作:

    • instruction-following 语言模型:一系列的工作发现,如果用人工标注的 "指令" 数据(这样的一种数据集:包含 language instructional command 和基于人类判断的预期结果)进行微调,平凡的语言模型可以有效地遵循通用的语言指令。此外,这些工作还显示了 "指令" 数据的规模和多样性,与所产生的模型的泛化性(推广到 unseen task )之间的直接关系。由于这些发展依赖于人类标注的 "指令" 数据,这对实现更加泛化的模型构成了瓶颈。我们的工作旨在通过减少对人类标注员的依赖来解决这个瓶颈。

      此外,尽管像 InstructGPT 这样的模型有优秀的表现,但其构建过程仍然相当不透明。特别是,由于这些关键模型背后的主要企业实体发布的有限透明度和有限数据,数据的作用仍然没有得到充分研究。要解决这样的挑战,就必须建立一个涵盖广泛任务的大规模的公共数据集。

      multi-modal learning 文献中,instruction-following 模型也备受关注。 Self-Instruct 作为扩展数据的一般方法,有可能在这些 setting 中也有帮助;然而,这不在本工作的范围之内。

    • 用于 data generationdata augmentation 的语言模型:许多工作都依靠生成式语言模型来生成数据、或增强数据。例如,《Generating datasets with pretrained language models》提议用 prompting large LM 取代给定任务的人类标注,并在 SuperGLUE 任务的背景下使用所产生的数据来微调(通常较小的)模型。虽然我们的工作可以被看作是一种 "augmentation" 形式,但我们的工作与这一方向不同,因为它不是专门针对某一特定任务(例如,QANLI )。相反, Self-Instruct 的一个明显的动机是 bootstrap new task definition ,这些任务可能以前没有被任何 NLP 从业者定义过(尽管可能对下游用户仍然很重要)。

    • self-training:一个典型的自训练框架使用训练好的模型来给 unlabeled data 分配标签,然后利用新标记的数据来改进模型。在类似的路线中, 《Prompt Consistency for Zero-Shot Task Generalization》 使用 multiple prompts 来指定一个任务,并建议通过 prompt consistency 来正则化,鼓励对 prompts 的一致预测。这允许用额外的 unlabeled training data 对模型进行微调,或者在推理时直接应用。虽然 Self-Instruct 与自训练有一些相似之处,但大多数自训练方法都假定有一个特定的目标任务、以及该任务下的未标记实例;相反, Self-Instruct 从头开始产生各种任务。

    • 知识蒸馏:知识蒸馏通常涉及到将知识从较大的模型迁移到较小的模型。 Self-Instruct 也可以看作是 "知识蒸馏" 的一种形式。然而, Self-Instruct 在如下方面与知识蒸馏不同:

      • Self-Instruct 中,蒸馏的 sourcetarget 是相同的,即一个模型的知识被蒸馏到自己身上。

      • 蒸馏的内容是 instruction task 的形式(即定义一个任务的指令,以及一组实例)。

    • 用有限的实例进行 bootstrapping :最近的一系列工作使用语言模型,用专门的方法来 bootstrap some inference

      • NPPrompt《Pre-trained language models can be fully zero-shot learners》)提供了一种无需任何微调就能生成 semantic label 的预测的方法。它使用模型自身的 embedding来自动寻找与数据实例的标签相关的单词,因此减少了对从 model predictionlabel (即,verbalizer )的人工映射的依赖。

      • STAR《STar: Self-taught reasoner bootstrapping reasoning with reasoning》)反复利用少量的 rationale example 和没有 rationales 的大数据集,来 bootstrap 模型执行 reasoning 的能力。

      • Self-Correction《Generating sequences by learning to self-correct》)将一个不完美的 base generator (模型)与一个单独的 corrector 解耦,该 corrector 学会了迭代地修正不完美的 generation ,并展示了对 base generator 的改进。

      我们的工作则侧重于在指令范式中 bootstrapping new task

    • 指令生成:最近的一系列工作在给定少数实例的条件下,生成任务的指令。虽然 Self-Instruct 也涉及指令的生成,但我们的主要区别在于它是任务无关的;我们从头开始生成新任务(指令和实例)。

52.1 方法

  1. 标注大规模的指令数据对人类来说是一种挑战,因为它需要:创造性地提出新的任务、专业知识从而用于为每个任务编写标记的实例。在这一节中,我们将详细介绍我们的 Self-Instruct 过程,它指的是这样的 pipeline:用一个平凡的 pretrained language model 来生成任务,然后用这些被生成的任务进行 instruction tuning 从而使语言模型更好地遵循指令。这个 pipeline 在下图中被描述。

  2. 指令数据(Instruction Data )的定义:我们要生成的指令数据包含一组指令{It}t=1,2,$ \{I_t\}_{t=1,2,\cdots} $ ,其中每条指令It$ I_t $ 指令都用自然语言定义了一个任务t$ t $ 。每个任务有一个或多个 input-output 实例(Xt,Yt)$ (X_t,Y_t) $ 。给定任务指令It$ I_t $ 和 instance inputx$ x $ ,一个模型M$ M $ 预期输出y=M(It,x)$ y = M(I_t,x) $ ,其中(x,y)(Xt,Yt)$ (x,y)\in (X_t,Y_t) $ 。

    注意,在许多情况下,指令和 instance input 并没有严格的界限。例如:

    • "write an essay about school safety" 可以是一个有效的指令,在这个指令上我们预期模型直接地响应。

      这里只有指令而没有 instance input

    • 此外,"write an essay about school safety" 也可以被表述为 "write an essay about the following topic" 作为指令,而 "school safety" 作为 instance input

    为了鼓励数据格式的多样性,我们允许这种不需要额外输入的指令(即,x$ x $ 为空)。

  3. 自动的指令数据生成:我们生成指令数据的 pipeline 包括四个步骤:指令生成、识别指令是否代表分类任务、用 input-firstoutput-first 的方法生成实例、过滤低质量数据。

    • 指令生成(Instruction Generation): Self-Instruct 是基于一个发现,即 large pretrained language model 在遇到上下文中的一些现有指令时,可以被 prompted 从而生成 new and novel 的指令。这为我们提供了一种从 seed human-written 指令的一个小集合中 augument 指令数据的方法。我们提议以 bootstrapping 的方式产生一个多样化的指令集。我们用本文的作者编写的 175 个任务(每个任务有 1 条指令和 1 个实例)初始化了任务池。对于每一步,我们从这个指令池里采样 8 条任务指令作为 in-context example 。在这 8 条指令中,6 条来自人类编写的任务、2 条来自 previous steps 中的模型生成的任务,从而促进多样性。 prompting template 如下表所示。

      为什么要 8-shot?用更多或更少的 shot ,效果会怎么样?

      为什么用 3:1 的混合比例,用更多或更少的人类编写的任务,效果会怎样?

    • 分类任务识别(Classification Task Identification):因为我们需要两种不同的方法从而分别处理分类任务和非分类任务,所以我们接下来识别 generated instruction 是否代表分类任务。我们使用种子任务中的 12 条分类指令、以及 19 条非分类指令,并 prompt 常规的 GPT3 few-shot 来确定这一点。prompting template 如下表所示。

      12/19 这两个数值是如何确定的?

    • 实例生成(Instance Generation):给定指令及其任务类型,我们为每个指令独立地生成实例。这很有挑战性,因为它要求模型根据指令来理解目标任务是什么,弄清需要哪些额外的 input field 并生成这些额外的 input field ,最后通过产生 output 来完成任务。我们发现,当用其他任务中的 instruction-input-output in-context exampleprompt 时, pretrained language model 可以在很大程度上实现这一点。一个自然的方法是 Input-first Approach ,我们可以要求语言模型先根据指令来生成 input field ,然后产生相应的 output 。这种生成顺序类似于模型对指令和输入的响应方式。prompting template 如下表所示。

      然而,我们发现这种方法会产生偏向于 one label 的输入,特别是对于分类任务(例如,对于语法错误检测,它通常会生成 grammatical input )。因此,我们另外提出了一种用于分类任务的 Output-first Approach ,即我们首先生成可能的 class label ,然后以每个 class label 为条件来生成 inputprompting template 如下表所示。

      我们将 Output-first Approach 应用于前一步所确定的分类任务,将 Input-first Approach 应用于其余的非分类任务。

    • 过滤和后处理:为了鼓励多样性,只有当一条新指令与任何现有指令的 ROUGE-L overlap 小于 0.7时,这条新指令才会被添加到任务池中。我们还排除了包含一些特定关键词(如 images, pictures, graphs )的指令,这些关键词通常不能被语言模型所处理。在为每条指令生成新的实例时,我们过滤掉那些完全相同的实例或那些具有相同输入但不同输出的实例。

      不仅需要过滤指令,也需要过滤任务的实例。

  4. 微调语言模型从而 follow instructions:在创建了大规模的指令数据后,我们用这些数据来微调原始语言模型(即 self-instruct )。为了做到这一点,我们将指令和 instance input 拼接起来作为 prompt ,并训练模型以标准的监督方式生成 instance output

    为了使模型对不同的格式具有鲁棒性,我们使用多个 templates 来把指令和 instance input 编码在一起。例如:

    • 指令的前缀可以是 "Task:" ,也可以不是。

    • 输入的前缀可以是 "Input:" ,也可以不是。

    • "Output:" 可以附加在 prompt 的末尾。

    • 中间可以放不同数量的换行符,等等。

    每个实例都采用一组各式各样的模版格式,那么这些模板如何设计?论文并未深入地探索。

52.2 来自 GPT3 的 Self-Instruct 数据

  1. 这里我们将我们的方法应用于 GPT3 从而诱导指令数据,作为案例研究。我们使用最大的 GPT3 语言模型("davinci" engine )通过 OpenAI API 访问。在为不同的目的查询 GPT3 API 时,我们使用不同的超参数集合。我们发现这些超参数在 GPT3 模型( "davinci" engine )和其他 instruction-tuned GPT3 变体中运行良好。我们在下表中列出了它们。

    接下来我们介绍一下 generated data 的概况。

  2. 统计数据:下表描述了 generated data 的基本统计数据。经过过滤之后,我们总共生成了超过 52K 条指令,以及超过 82K 个与这些指令相对应的实例。

  3. 多样性:为了研究生成了哪些类型的指令、以及这些被生成指令的多样性,我们确定了被生成的指令中的 “动名词”( verb-noun )结构。我们使用 Berkeley Neural Parser 来解析指令,然后提取最接近 parse tree 的根部的动词、以及该动词的first direct noun object 。在 52,445 条指令中,有 26,559 条包含这样的结构;其他指令通常包含更复杂的子句(例如,"Classify whether this tweet contains political content or not." )或被界定为问句(例如,"Which of these statements are true?" )。我们在下图中绘制了前 20 个最常见的 root verb 、以及这些动词的前 4direct noun object ,这些指令占了整个被生成指令的集合的 14% 。总的来说,我们在这些指令中看到了相当多样化的意图和文本格式。

    我们进一步研究 generated instruction 与用于 prompt the generation 的种子指令有何不同。对于每个 generated instruction ,我们计算其与 175 条种子指令的最高 ROUGE-L overlap 。我们在 Figure 3 中绘制了这些 ROUGE-L 分数的分布,表明有相当数量的新指令与种子指令没有太多的 overlap 。我们还在 Figure 4 中展示了指令长度、instance inputinstance output 的多样性。

  4. 质量:到目前为止,我们已经展示了 generated data 的数量和多样性,但其质量仍然不确定。为了调查这一点,我们随机采样了 200 条指令,并在每条指令中随机选择 1 个实例。我们请一位专家标注员(本论文的 co-author )从指令、instance inputinstance output 的角度来标注每个实例是否正确。

    下表中的评估结果显示,大多数 generated instruction 是有意义的,而 generated instance 可能包含更多的噪音(在合理的范围内)。然而,我们发现,即使 generation 可能包含错误,但大多数仍然是正确的格式,甚至是部分正确的,这可以为训练模型提供有用的指导从而遵循指令。

    我们在下表中分别给出了一些好的 generation 和坏的 generation

52.3 实验

  1. 我们进行实验来衡量和比较各种 instruction tuning 设置下的模型质量。我们首先描述了我们的模型和其他 baseline,然后是我们的实验。

  2. GPT3SELF-INST$ \text{GPT3}_\text{SELF-INST} $ :在 GPT3 自己的指令数据上微调 GPT3

    使用 instruction-generated 指令数据,我们对 GPT3 模型本身("davinci" engine)进行 instruction tuning 。如前所述,我们使用各种模板来拼接指令和 input ,并训练模型来生成output 。这种微调是通过 OpenAI finetuning API 完成的。我们使用默认的超参数,除了将 prompt loss 权重设置为 0 ,并对模型训练两个 epoch 。最终的模型被称为GPT3SELF-INST$ \text{GPT3}_\text{SELF-INST} $ 。

    " prompt loss 权重设置为 0 ",意味着近考虑 output 的损失。

    微调细节如下:GPT3SELF-INST$ \text{GPT3}_\text{SELF-INST} $ 和我们的一些 baseline 是由 GPT3 模型(具有 175B 参数的 "davinci" engine )微调的。我们通过 OpenAIfinetuning API 进行这种微调。虽然目前还没有关于如何用这个API 对模型进行微调的细节(例如,哪些参数被更新,或者优化器是什么),但我们用这个 API 的默认超参数来微调我们所有的模型,以便结果具有可比性。我们只将 "prompt_loss_weight" 设置为 0 ,因为我们发现这在我们的案例中效果更好,而且每个微调实验都训练了两个 epochs ,以避免训练任务的过拟合。微调是根据训练文件中的 token 数量来收费的。从 GPT3 模型中微调GPT3SELF-INST$ \text{GPT3}_\text{SELF-INST} $ 需要 338 美元。

  3. baseline

    • 现成的语言模型:我们评估 T5-LMGPT3 作为平凡的语言模型 baseline (只有预训练而没有额外的微调)。这些 baseline 将表明现成的语言模型在预训练之后能够在多大程度上自然地遵循指令。

    • 公开可用的 instruction-tuned 模型:T0Tk-INSTRUCT 是公开的两个 instruction-tuned 模型,并被证明能够遵循许多NLP 任务的指令。这两个模型都是从 T5 checkpoint 微调的,并且是公开可用的。对于这两个模型,我们使用其最大版本(11B 参数)。

    • instruction-tuned GPT3 模型:我们评估了 InstructGPT ,它是由 OpenAI 基于 GPT3 开发的,以更好地遵循人类指令,并被社区发现具有令人印象深刻的 zero-shot 能力。InstructGPT 模型有不同的版本,其中较新的模型使用更多的扩展数据、或更多的算法新颖性。

      • 对于我们的 SUPERNI 实验,我们只与他们的 text-davinci-001 engine 进行比较,因为他们较新的 engine 是用最新的用户数据训练的,很可能已经看到 SUPERNI 的评估集合。

      • 对于我们在新撰写的指令上对这些模型的人工评估,我们包括他们的 001/002/003 engine ,以保证完整性。

    • 此外,为了将 Self-Instruct Training 与其他公开可用的 instruction tuning 数据进行比较,我们用 PROMPTSOURCESUPERNI 的数据进一步微调 GPT3 模型,其中 PROMPTSOURCESUPERNI 是被用来训练 T0Tk-INSTRUCT 模型。我们分别将其简称为 T0 trainingSUPERNI training 。为了节省训练预算,我们对每个数据集采样 50K 个实例(但涵盖其所有指令),其规模与我们生成的指令数据相当。根据 SUPERNI 原始论文的研究结果和我们的早期实验,减少每个任务的实例数量并不会降低模型对 unseen 任务的泛化性能。

      这是为了将开源的指令数据集,与 self-instruct 生成的指令数据集进行比较。

52.3.1 在 SUPERNI benchmark 上的 Zero-Shot 泛化

  1. 我们首先评估了模型在典型的 NLP 任务上以 zero-shot 方式来遵循指令的能力。我们使用 SUPERNIevaluation 集合,它由 119 个任务组成,每个任务有 100 个实例。在这项工作中,我们主要关注zero-shot 设置,即只用任务的定义来 prompt 模型,而没有 in-context demonstration example 。对于我们对 GPT3 变体的所有请求,我们使用确定性的 generation mode (温度为 0 ,没有 nucleus sampling ),没有特定的 stop sequence

    温度为 0、没有 nucleus sampling ,这对于 generation 是不利的,因此并不能代表模型的最佳效果。最好是调优这两个超参数,然后再对比各个模型。

    实验结果如下表所示:

    • Self-Instruct 在很大程度上提高了 GPT3instruction-following 能力。

    • 平凡的 GPT3 模型基本上不能遵循人类的指令。经过人工分析,我们发现它通常会生成不相关的重复性文本,而且不知道何时停止生成。

    • 与其他没有专门为 SUPERNI 训练的模型相比,GPT3SELF-INST$ \text{GPT3}_\text{SELF-INST} $ 取得了比 T0 模型、或在 T0 训练集上微调的 GPT3 更好的性能,而 T0 训练集需要巨大的人工标注工作。值得注意的是,GPT3SELF-INST$ \text{GPT3}_\text{SELF-INST} $ 也几乎与InstructGPT001$ \text{InstructGPT}_{001} $ 的性能相匹配,后者是用私人用户数据、以及人类标注的标签来训练的。

    • SUPERNI 训练集上训练的模型在其评估集上取得了更好的性能,我们将此归因于在训练期间采用了与评估时类似的指令风格和指令格式。然而,我们表明,当 Self-InstructSUPERNI 训练集相结合时,仍然带来了额外的收益,证明了 Self-Instruct 作为补充数据的价值。

52.3.2 实验二:泛化到新任务上的面向用户的指令

  1. 尽管 SUPERNI 在收集现有的 NLP 任务方面很全面,但这些 NLP 任务大多是为研究目的而提出的,并且偏向于 classification 任务。为了更好地获取 instruction-following 模型的实用价值,本文所有作者中的一部分作者策划了一套新的指令,其动机是面向用户的应用。

    我们首先对大型语言模型可能有用的不同领域进行头脑风暴(例如,电子邮件写作、社交媒体、生产力工具、娱乐、编程),然后制作与每个领域相关的指令以及一个 input-output instance (同样, input 是可选的)。我们的目标是使这些任务的风格和格式多样化(例如,指令可长可短;input/output 可采用 bullet points 、表格、代码、方程式等形式)。

    我们总共创建了 252 个指令,每个指令有 1 个实例。我们相信它可以作为一个测试平台,用于评估 instruction-based 模型如何处理多样化和不熟悉的指令。下表展示了 252 个任务中的一小部分。整个测试集对于 request 可用。

  2. 人类评价设置:在这个由不同任务组成的评估集上评估模型的性能是极具挑战性的,因为不同的任务需要不同的专业知识。事实上,许多任务不能用自动指标来衡量,甚至不能由普通的众包人员来判断(例如,编写一个程序,或将一阶逻辑转换为自然语言)。为了得到更忠实的评价,我们要求指令的作者对模型的预测进行判断。评估人员被要求根据输出是否准确有效地完成了任务来评分。我们实施了一个四级评分系统来对模型的输出质量进行分类,定义如下:

    • A:输出是有效的,令人满意的。

    • B:输出是可接受的,但有轻微的错误或不完善之处,可以改进。

    • C:输出是相关的,是对指令的响应,但在内容上有重大错误。例如,GPT3 可能首先生成一个有效的输出,但继续生成其他不相关的东西。

    • D:输出是不相关的或无效的,包括对 input 的重复,完全不相关的输出等。

    下图给出了 GPT3 模型及其 instruction-tuned 对应的版本在这个新编写的指令集上的表现。可以看到:

    • GPT3SELF-INST$ \text{GPT3}_\text{SELF-INST} $ (即用 Self-Instruct 微调的 GPT3 模型)在很大程度上超过了那些在 T0SUPERNI 上训练的对应模型。证明了尽管有噪音,但 generated data 仍有价值。

    • InstructGPT001$ \text{InstructGPT}_{001} $ 相比,GPT3SELF-INST$ \text{GPT3}_\text{SELF-INST} $ 的表现相当接近。如果我们把有轻微缺陷的可接受的输出(等级为 C )算作有效,GPT3SELF-INST$ \text{GPT3}_\text{SELF-INST} $ 仅比InstructGPT001$ \text{InstructGPT}_{001} $ 落后 5%

    • 最后,我们的评估证实了InstructGPT002$ \text{InstructGPT}_{002} $ 和InstructGPT003$ \text{InstructGPT}_{003} $ 模型令人印象深刻的 instruction-following 能力。尽管这一成功背后有许多因素,但我们猜想,未来的工作在很大程度上可以通过使用人类标注员、或训练奖励模型来提高我们 generated data 的质量,以选择更好的 generation ,类似于 InstructGPT 使用的算法。

  3. 我们在 Table 4 中介绍了一些面向用户的任务、相应的GPT3SELF-INST$ \text{GPT3}_\text{SELF-INST} $ 产生的输出和标注人员的评分。我们看到,即使是被评为 2 级(即,B)的输出,该模型也展示了解决任务的详尽步骤,尽管其最终输出是错误的。

52.4 讨论和局限性

  1. 为什么 Self-Instruct 能工作?

    值得反思的是,高质量的人类反馈在促成最近关于 instruction-tuning 语言模型的成功方面所发挥的作用。这里有两个极端的假说:

    • 假说一:人类反馈是 instruction-tuning 的一个必要的、不可缺少的方面,因为语言模型需要学习在预训练中不太了解的问题。

    • 假说二:人类反馈是 instruction-tuning 的一个可选的方面,因为语言模型在预训练中已经对指令相当熟悉。观察人类反馈只是一个轻量级的过程,用于 align 模型的 pretraining distribution/objective ,这个轻量级过程可能会被不同的过程所取代。

    虽然现实情况可能介于这两个极端之间,但我们猜测它更接近于假说二,特别是对于大型模型。这种直觉,即语言模型已经知道很多关于语言指令的信息,是 Self-Instruct 的关键动机,也得到了其经验性成功的支持。

  2. 更广泛的影响:除了本文的直接焦点之外,我们认为 Self-Instruct 可能有助于为像 InstructGPT 这样广泛使用的 instruction-tuned 模型的 "幕后" 工作带来更多的透明度。不幸的是,这些工业模型仍然在 API wall 后面,因为它们的数据集没有被公布,因此人们对它们的构造、以及它们为什么表现出令人印象深刻的能力了解甚少。现在,学术界有责任更好地理解这些模型的成功之源,并努力建立更好的(但却是开放的)模型。我们相信我们在本文中的发现证明了多样化的指令数据的重要性,我们的大型合成数据集可以成为更高质量数据的第一步,从而用于建立更好的 instruction-following 模型。

  3. 局限性:

    • tail 现象: Self-Instruct 依赖于语言模型,它将继承语言模型所带来的所有局限性。正如最近的研究表明(《Impact of pretraining term frequencies on few-shot reasoning》《Large language models struggle to learn long-tail knowledge》),长尾现象对语言模型的成功构成了严重挑战。换句话说,语言模型的最大收益对应于语言的频繁使用( language use 分布的头部),而在低频上下文中的收益最小。同样,在这项工作的背景下,如果 Self-Instruct 的大部分收益都偏向于在预训练语料库中更频繁出现的任务或指令,也就不足为奇了。因此,该方法在不常见的和创新性的指令方面可能会表现得很脆弱。

    • 对大型模型的依赖性:由于 Self-Instruct 依赖于从语言模型中提取的归纳偏置( inductive bias ),它可能对更大的模型效果最好。如果是真的,这可能会给那些可能没有大型计算资源的人带来障碍。我们希望未来仔细研究:收益是如何作为模型大小或其他各种超参数的函数。值得注意的是,有人类标注的 instruction-tuning 也有类似的局限性:instruction-tuning 的收益在大型模型中更高(《Finetuned Language Models are Zero-Shot Learners》)。

    • 强化了语言模型的偏见(bias ):一个值得关注的问题是这种迭代算法的意外后果,例如放大有问题的 social bias (对性别、种族等的刻板印象或诽谤)。与此相关的是,在这个过程中观察到的一个挑战是,该算法很难产生平衡的标签,这反映了模型的 prior bias 。我们希望未来的工作能够理清这些细节,以更好地了解该方法的优点和缺点。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文