数学基础
- 线性代数
- 概率论与随机过程
- 数值计算
- 蒙特卡洛方法与 MCMC 采样
- 机器学习方法概论
统计学习
深度学习
- 深度学习简介
- 深度前馈网络
- 反向传播算法
- 正则化
- 深度学习中的最优化问题
- 卷积神经网络
- CNN:图像分类
- 循环神经网络 RNN
- Transformer
- 一、Transformer [2017]
- 二、Universal Transformer [2018]
- 三、Transformer-XL [2019]
- 四、GPT1 [2018]
- 五、GPT2 [2019]
- 六、GPT3 [2020]
- 七、OPT [2022]
- 八、BERT [2018]
- 九、XLNet [2019]
- 十、RoBERTa [2019]
- 十一、ERNIE 1.0 [2019]
- 十二、ERNIE 2.0 [2019]
- 十三、ERNIE 3.0 [2021]
- 十四、ERNIE-Huawei [2019]
- 十五、MT-DNN [2019]
- 十六、BART [2019]
- 十七、mBART [2020]
- 十八、SpanBERT [2019]
- 十九、ALBERT [2019]
- 二十、UniLM [2019]
- 二十一、MASS [2019]
- 二十二、MacBERT [2019]
- 二十三、Fine-Tuning Language Models from Human Preferences [2019]
- 二十四 Learning to summarize from human feedback [2020]
- 二十五、InstructGPT [2022]
- 二十六、T5 [2020]
- 二十七、mT5 [2020]
- 二十八、ExT5 [2021]
- 二十九、Muppet [2021]
- 三十、Self-Attention with Relative Position Representations [2018]
- 三十一、USE [2018]
- 三十二、Sentence-BERT [2019]
- 三十三、SimCSE [2021]
- 三十四、BERT-Flow [2020]
- 三十五、BERT-Whitening [2021]
- 三十六、Comparing the Geometry of BERT, ELMo, and GPT-2 Embeddings [2019]
- 三十七、CERT [2020]
- 三十八、DeCLUTR [2020]
- 三十九、CLEAR [2020]
- 四十、ConSERT [2021]
- 四十一、Sentence-T5 [2021]
- 四十二、ULMFiT [2018]
- 四十三、Scaling Laws for Neural Language Models [2020]
- 四十四、Chinchilla [2022]
- 四十七、GLM-130B [2022]
- 四十八、GPT-NeoX-20B [2022]
- 四十九、Bloom [2022]
- 五十、PaLM [2022] (粗读)
- 五十一、PaLM2 [2023](粗读)
- 五十二、Self-Instruct [2022]
- 句子向量
- 词向量
- 传统CTR 预估模型
- CTR 预估模型
- 一、DSSM [2013]
- 二、FNN [2016]
- 三、PNN [2016]
- 四、DeepCrossing [2016]
- 五、Wide 和 Deep [2016]
- 六、DCN [2017]
- 七、DeepFM [2017]
- 八、NFM [2017]
- 九、AFM [2017]
- 十、xDeepFM [2018]
- 十一、ESMM [2018]
- 十二、DIN [2017]
- 十三、DIEN [2019]
- 十四、DSIN [2019]
- 十五、DICM [2017]
- 十六、DeepMCP [2019]
- 十七、MIMN [2019]
- 十八、DMR [2020]
- 十九、MiNet [2020]
- 二十、DSTN [2019]
- 二十一、BST [2019]
- 二十二、SIM [2020]
- 二十三、ESM2 [2019]
- 二十四、MV-DNN [2015]
- 二十五、CAN [2020]
- 二十六、AutoInt [2018]
- 二十七、Fi-GNN [2019]
- 二十八、FwFM [2018]
- 二十九、FM2 [2021]
- 三十、FiBiNET [2019]
- 三十一、AutoFIS [2020]
- 三十三、AFN [2020]
- 三十四、FGCNN [2019]
- 三十五、AutoCross [2019]
- 三十六、InterHAt [2020]
- 三十七、xDeepInt [2023]
- 三十九、AutoDis [2021]
- 四十、MDE [2020]
- 四十一、NIS [2020]
- 四十二、AutoEmb [2020]
- 四十三、AutoDim [2021]
- 四十四、PEP [2021]
- 四十五、DeepLight [2021]
- 图的表达
- 一、DeepWalk [2014]
- 二、LINE [2015]
- 三、GraRep [2015]
- 四、TADW [2015]
- 五、DNGR [2016]
- 六、Node2Vec [2016]
- 七、WALKLETS [2016]
- 八、SDNE [2016]
- 九、CANE [2017]
- 十、EOE [2017]
- 十一、metapath2vec [2017]
- 十二、GraphGAN [2018]
- 十三、struc2vec [2017]
- 十四、GraphWave [2018]
- 十五、NetMF [2017]
- 十六、NetSMF [2019]
- 十七、PTE [2015]
- 十八、HNE [2015]
- 十九、AANE [2017]
- 二十、LANE [2017]
- 二十一、MVE [2017]
- 二十二、PMNE [2017]
- 二十三、ANRL [2018]
- 二十四、DANE [2018]
- 二十五、HERec [2018]
- 二十六、GATNE [2019]
- 二十七、MNE [2018]
- 二十八、MVN2VEC [2018]
- 二十九、SNE [2018]
- 三十、ProNE [2019]
- Graph Embedding 综述
- 图神经网络
- 一、GNN [2009]
- 二、Spectral Networks 和 Deep Locally Connected Networks [2013]
- 三、Fast Localized Spectral Filtering On Graph [2016]
- 四、GCN [2016]
- 五、神经图指纹 [2015]
- 六、GGS-NN [2016]
- 七、PATCHY-SAN [2016]
- 八、GraphSAGE [2017]
- 九、GAT [2017]
- 十、R-GCN [2017]
- 十一、 AGCN [2018]
- 十二、FastGCN [2018]
- 十三、PinSage [2018]
- 十四、GCMC [2017]
- 十五、JK-Net [2018]
- 十六、PPNP [2018]
- 十七、VRGCN [2017]
- 十八、ClusterGCN [2019]
- 十九、LDS-GNN [2019]
- 二十、DIAL-GNN [2019]
- 二十一、HAN [2019]
- 二十二、HetGNN [2019]
- 二十三、HGT [2020]
- 二十四、GPT-GNN [2020]
- 二十五、Geom-GCN [2020]
- 二十六、Graph Network [2018]
- 二十七、GIN [2019]
- 二十八、MPNN [2017]
- 二十九、UniMP [2020]
- 三十、Correct and Smooth [2020]
- 三十一、LGCN [2018]
- 三十二、DGCNN [2018]
- 三十三、AS-GCN
- 三十四、DGI [2018]
- 三十五、DIFFPOLL [2018]
- 三十六、DCNN [2016]
- 三十七、IN [2016]
- 图神经网络 2
- 图神经网络 3
- 推荐算法(传统方法)
- 一、Tapestry [1992]
- 二、GroupLens [1994]
- 三、ItemBased CF [2001]
- 四、Amazon I-2-I CF [2003]
- 五、Slope One Rating-Based CF [2005]
- 六、Bipartite Network Projection [2007]
- 七、Implicit Feedback CF [2008]
- 八、PMF [2008]
- 九、SVD++ [2008]
- 十、MMMF 扩展 [2008]
- 十一、OCCF [2008]
- 十二、BPR [2009]
- 十三、MF for RS [2009]
- 十四、 Netflix BellKor Solution [2009]
- 推荐算法(神经网络方法 1)
- 一、MIND [2019](用于召回)
- 二、DNN For YouTube [2016]
- 三、Recommending What Video to Watch Next [2019]
- 四、ESAM [2020]
- 五、Facebook Embedding Based Retrieval [2020](用于检索)
- 六、Airbnb Search Ranking [2018]
- 七、MOBIUS [2019](用于召回)
- 八、TDM [2018](用于检索)
- 九、DR [2020](用于检索)
- 十、JTM [2019](用于检索)
- 十一、Pinterest Recommender System [2017]
- 十二、DLRM [2019]
- 十三、Applying Deep Learning To Airbnb Search [2018]
- 十四、Improving Deep Learning For Airbnb Search [2020]
- 十五、HOP-Rec [2018]
- 十六、NCF [2017]
- 十七、NGCF [2019]
- 十八、LightGCN [2020]
- 十九、Sampling-Bias-Corrected Neural Modeling [2019](检索)
- 二十、EGES [2018](Matching 阶段)
- 二十一、SDM [2019](Matching 阶段)
- 二十二、COLD [2020 ] (Pre-Ranking 模型)
- 二十三、ComiRec [2020](https://www.wenjiangs.com/doc/0b4e1736-ac78)
- 二十四、EdgeRec [2020]
- 二十五、DPSR [2020](检索)
- 二十六、PDN [2021](mathcing)
- 二十七、时空周期兴趣学习网络ST-PIL [2021]
- 推荐算法之序列推荐
- 一、FPMC [2010]
- 二、GRU4Rec [2015]
- 三、HRM [2015]
- 四、DREAM [2016]
- 五、Improved GRU4Rec [2016]
- 六、NARM [2017]
- 七、HRNN [2017]
- 八、RRN [2017]
- 九、Caser [2018]
- 十、p-RNN [2016]
- 十一、GRU4Rec Top-k Gains [2018]
- 十二、SASRec [2018]
- 十三、RUM [2018]
- 十四、SHAN [2018]
- 十五、Phased LSTM [2016]
- 十六、Time-LSTM [2017]
- 十七、STAMP [2018]
- 十八、Latent Cross [2018]
- 十九、CSRM [2019]
- 二十、SR-GNN [2019]
- 二十一、GC-SAN [2019]
- 二十二、BERT4Rec [2019]
- 二十三、MCPRN [2019]
- 二十四、RepeatNet [2019]
- 二十五、LINet(2019)
- 二十六、NextItNet [2019]
- 二十七、GCE-GNN [2020]
- 二十八、LESSR [2020]
- 二十九、HyperRec [2020]
- 三十、DHCN [2021]
- 三十一、TiSASRec [2020]
- 推荐算法(综述)
- 多任务学习
- 系统架构
- 实践方法论
- 深度强化学习 1
- 自动代码生成
工具
- CRF
- lightgbm
- xgboost
- scikit-learn
- spark
- numpy
- matplotlib
- pandas
- huggingface_transformer
- 一、Tokenizer
- 二、Datasets
- 三、Model
- 四、Trainer
- 五、Evaluator
- 六、Pipeline
- 七、Accelerate
- 八、Autoclass
- 九、应用
- 十、Gradio
Scala
- 环境搭建
- 基础知识
- 函数
- 类
- 样例类和模式匹配
- 测试和注解
- 集合 collection(一)
- 集合collection(二)
- 集成 Java
- 并发
五十二、Self-Instruct [2022]
最近的
NLP
文献见证了大量的building model
,这些模型能够遵循自然语言指令(natural language instruction
)。这些进展由两个关键部分所推动:大型预训练好的语言模型、人类编写的指令数据。PromptSource
和SuperNaturalInstructions
是最近两个值得注意的数据集,它们使用大量的人工标注来收集构建T0-Instruct
和Tk-Instruct
。然而,这个过程成本很高,而且考虑到大多数human generation
往往是流行的NLP
任务,常常遭受有限的多样性,没有涵盖真正的各种NLP
任务、以及描述任务的不同方式。鉴于这些局限性,要继续提高instruction-tuned
模型的质量,就必须开发出supervising instruction-tuned
模型的替代方法。在论文
《Self-Instruct: Aligning Language Model with Self Generated Instructions》
中,作者介绍了Self-Instruct
,这是一个半自动的过程,利用模型本身的instructional signal
对pretrained 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
条指令,与大约82K
个instance inputs
和target outputs
相配对。作者观察到,所产生的数据提供了多种多样的创造性的任务,其中50%
以上的任务与seed instruction
的重合度低于0.3 ROUGEL
。在这个结果数据上,作者通过微调GPT3
(即用于生成指令数据的同一模型)来建立 $ \text{GPT3}_\text{SELF-INST} $ 。作者在SuperNaturalInstructions
中包含的典型NLP
任务、以及为instruction-following model
的新用途而创建的一组新指令上,对 $ \text{GPT3}_\text{SELF-INST} $ 与其他各种模型进行评估。SUPERNI
的结果表明, $ \text{GPT3}_\text{SELF-INST} $ 比GPT3
(原始模型)有很大的优势(+33.1%
),几乎与 $ \text{InstructGPT}_{001} $ 的性能相当。此外,作者对新创建的指令集进行的人类评估表明, $ \text{GPT3}_\text{SELF-INST} $ 展示了广泛的instruction following
能力,超过了在其他公开可用的指令数据集上训练的模型,与 $ \text{InstructGPT}_{001} $ 仅有5%
的差距。综上所述,论文的主要贡献:
Self-Instruct
,一种用最少的人类标记数据诱导instruction following
能力的方法。通过广泛的
instruction-tuning
实验证明了Self-Instruct
方法的有效性。发布了一个由
52K
指令组成的大型合成数据集、以及一组手工编写的新任务,用于建立和评估未来的instruction-following
模型。
相关工作:
instruction-following
语言模型:一系列的工作发现,如果用人工标注的 "指令" 数据(这样的一种数据集:包含language instructional command
和基于人类判断的预期结果)进行微调,平凡的语言模型可以有效地遵循通用的语言指令。此外,这些工作还显示了 "指令" 数据的规模和多样性,与所产生的模型的泛化性(推广到unseen task
)之间的直接关系。由于这些发展依赖于人类标注的 "指令" 数据,这对实现更加泛化的模型构成了瓶颈。我们的工作旨在通过减少对人类标注员的依赖来解决这个瓶颈。此外,尽管像
InstructGPT
这样的模型有优秀的表现,但其构建过程仍然相当不透明。特别是,由于这些关键模型背后的主要企业实体发布的有限透明度和有限数据,数据的作用仍然没有得到充分研究。要解决这样的挑战,就必须建立一个涵盖广泛任务的大规模的公共数据集。在
multi-modal learning
文献中,instruction-following
模型也备受关注。Self-Instruct
作为扩展数据的一般方法,有可能在这些setting
中也有帮助;然而,这不在本工作的范围之内。用于
data generation
和data augmentation
的语言模型:许多工作都依靠生成式语言模型来生成数据、或增强数据。例如,《Generating datasets with pretrained language models》
提议用prompting large LM
取代给定任务的人类标注,并在SuperGLUE
任务的背景下使用所产生的数据来微调(通常较小的)模型。虽然我们的工作可以被看作是一种"augmentation"
形式,但我们的工作与这一方向不同,因为它不是专门针对某一特定任务(例如,QA
或NLI
)。相反,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
中,蒸馏的source
和target
是相同的,即一个模型的知识被蒸馏到自己身上。蒸馏的内容是
instruction task
的形式(即定义一个任务的指令,以及一组实例)。
用有限的实例进行
bootstrapping
:最近的一系列工作使用语言模型,用专门的方法来bootstrap some inference
。NPPrompt
(《Pre-trained language models can be fully zero-shot learners》
)提供了一种无需任何微调就能生成semantic label
的预测的方法。它使用模型自身的embedding
来自动寻找与数据实例的标签相关的单词,因此减少了对从model prediction
到label
(即,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 方法
标注大规模的指令数据对人类来说是一种挑战,因为它需要:创造性地提出新的任务、专业知识从而用于为每个任务编写标记的实例。在这一节中,我们将详细介绍我们的
Self-Instruct
过程,它指的是这样的pipeline
:用一个平凡的pretrained language model
来生成任务,然后用这些被生成的任务进行instruction tuning
从而使语言模型更好地遵循指令。这个pipeline
在下图中被描述。指令数据(
Instruction Data
)的定义:我们要生成的指令数据包含一组指令 $ \{I_t\}_{t=1,2,\cdots} $ ,其中每条指令 $ I_t $ 指令都用自然语言定义了一个任务 $ t $ 。每个任务有一个或多个input-output
实例 $ (X_t,Y_t) $ 。给定任务指令 $ I_t $ 和instance input
$ x $ ,一个模型 $ M $ 预期输出 $ y = M(I_t,x) $ ,其中 $ (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 $ 为空)。自动的指令数据生成:我们生成指令数据的
pipeline
包括四个步骤:指令生成、识别指令是否代表分类任务、用input-first
或output-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 example
来prompt
时,pretrained language model
可以在很大程度上实现这一点。一个自然的方法是Input-first Approach
,我们可以要求语言模型先根据指令来生成input field
,然后产生相应的output
。这种生成顺序类似于模型对指令和输入的响应方式。prompting template
如下表所示。然而,我们发现这种方法会产生偏向于
one label
的输入,特别是对于分类任务(例如,对于语法错误检测,它通常会生成grammatical input
)。因此,我们另外提出了一种用于分类任务的Output-first Approach
,即我们首先生成可能的class label
,然后以每个class label
为条件来生成input
。prompting template
如下表所示。我们将
Output-first Approach
应用于前一步所确定的分类任务,将Input-first Approach
应用于其余的非分类任务。过滤和后处理:为了鼓励多样性,只有当一条新指令与任何现有指令的
ROUGE-L overlap
小于0.7
时,这条新指令才会被添加到任务池中。我们还排除了包含一些特定关键词(如images, pictures, graphs
)的指令,这些关键词通常不能被语言模型所处理。在为每条指令生成新的实例时,我们过滤掉那些完全相同的实例或那些具有相同输入但不同输出的实例。不仅需要过滤指令,也需要过滤任务的实例。
微调语言模型从而
follow instructions
:在创建了大规模的指令数据后,我们用这些数据来微调原始语言模型(即self-instruct
)。为了做到这一点,我们将指令和instance input
拼接起来作为prompt
,并训练模型以标准的监督方式生成instance output
。为了使模型对不同的格式具有鲁棒性,我们使用多个
templates
来把指令和instance input
编码在一起。例如:指令的前缀可以是
"Task:"
,也可以不是。输入的前缀可以是
"Input:"
,也可以不是。"Output:"
可以附加在prompt
的末尾。中间可以放不同数量的换行符,等等。
每个实例都采用一组各式各样的模版格式,那么这些模板如何设计?论文并未深入地探索。
52.2 来自 GPT3 的 Self-Instruct 数据
这里我们将我们的方法应用于
GPT3
从而诱导指令数据,作为案例研究。我们使用最大的GPT3
语言模型("davinci" engine
)通过OpenAI API
访问。在为不同的目的查询GPT3 API
时,我们使用不同的超参数集合。我们发现这些超参数在GPT3
模型("davinci" engine
)和其他instruction-tuned GPT3
变体中运行良好。我们在下表中列出了它们。接下来我们介绍一下
generated data
的概况。统计数据:下表描述了
generated data
的基本统计数据。经过过滤之后,我们总共生成了超过52K
条指令,以及超过82K
个与这些指令相对应的实例。多样性:为了研究生成了哪些类型的指令、以及这些被生成指令的多样性,我们确定了被生成的指令中的 “动名词”(
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
、以及这些动词的前4
个direct noun object
,这些指令占了整个被生成指令的集合的14%
。总的来说,我们在这些指令中看到了相当多样化的意图和文本格式。我们进一步研究
generated instruction
与用于prompt the generation
的种子指令有何不同。对于每个generated instruction
,我们计算其与175
条种子指令的最高ROUGE-L overlap
。我们在Figure 3
中绘制了这些ROUGE-L
分数的分布,表明有相当数量的新指令与种子指令没有太多的overlap
。我们还在Figure 4
中展示了指令长度、instance input
和instance output
的多样性。质量:到目前为止,我们已经展示了
generated data
的数量和多样性,但其质量仍然不确定。为了调查这一点,我们随机采样了200
条指令,并在每条指令中随机选择1
个实例。我们请一位专家标注员(本论文的co-author
)从指令、instance input
和instance output
的角度来标注每个实例是否正确。下表中的评估结果显示,大多数
generated instruction
是有意义的,而generated instance
可能包含更多的噪音(在合理的范围内)。然而,我们发现,即使generation
可能包含错误,但大多数仍然是正确的格式,甚至是部分正确的,这可以为训练模型提供有用的指导从而遵循指令。我们在下表中分别给出了一些好的
generation
和坏的generation
。
52.3 实验
我们进行实验来衡量和比较各种
instruction tuning
设置下的模型质量。我们首先描述了我们的模型和其他baseline
,然后是我们的实验。 $ \text{GPT3}_\text{SELF-INST} $ :在GPT3
自己的指令数据上微调GPT3
。使用
instruction-generated
指令数据,我们对GPT3
模型本身("davinci" engine
)进行instruction tuning
。如前所述,我们使用各种模板来拼接指令和input
,并训练模型来生成output
。这种微调是通过OpenAI finetuning API
完成的。我们使用默认的超参数,除了将prompt loss
权重设置为0
,并对模型训练两个epoch
。最终的模型被称为 $ \text{GPT3}_\text{SELF-INST} $ 。"
prompt loss
权重设置为0
",意味着近考虑output
的损失。微调细节如下:
$ \text{GPT3}_\text{SELF-INST} $ 和我们的一些baseline
是由GPT3
模型(具有175B
参数的"davinci" engine
)微调的。我们通过OpenAI
的finetuning API
进行这种微调。虽然目前还没有关于如何用这个API
对模型进行微调的细节(例如,哪些参数被更新,或者优化器是什么),但我们用这个API
的默认超参数来微调我们所有的模型,以便结果具有可比性。我们只将"prompt_loss_weight"
设置为0
,因为我们发现这在我们的案例中效果更好,而且每个微调实验都训练了两个epochs
,以避免训练任务的过拟合。微调是根据训练文件中的token
数量来收费的。从GPT3
模型中微调 $ \text{GPT3}_\text{SELF-INST} $ 需要338
美元。baseline
:现成的语言模型:我们评估
T5-LM
和GPT3
作为平凡的语言模型baseline
(只有预训练而没有额外的微调)。这些baseline
将表明现成的语言模型在预训练之后能够在多大程度上自然地遵循指令。公开可用的
instruction-tuned
模型:T0
和Tk-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
数据进行比较,我们用PROMPTSOURCE
和SUPERNI
的数据进一步微调GPT3
模型,其中PROMPTSOURCE
和SUPERNI
是被用来训练T0
和Tk-INSTRUCT
模型。我们分别将其简称为T0 training
和SUPERNI training
。为了节省训练预算,我们对每个数据集采样50K
个实例(但涵盖其所有指令),其规模与我们生成的指令数据相当。根据SUPERNI
原始论文的研究结果和我们的早期实验,减少每个任务的实例数量并不会降低模型对unseen
任务的泛化性能。这是为了将开源的指令数据集,与
self-instruct
生成的指令数据集进行比较。
52.3.1 在 SUPERNI benchmark 上的 Zero-Shot 泛化
我们首先评估了模型在典型的
NLP
任务上以zero-shot
方式来遵循指令的能力。我们使用SUPERNI
的evaluation
集合,它由119
个任务组成,每个任务有100
个实例。在这项工作中,我们主要关注zero-shot
设置,即只用任务的定义来prompt
模型,而没有in-context demonstration example
。对于我们对GPT3
变体的所有请求,我们使用确定性的generation mode
(温度为0
,没有nucleus sampling
),没有特定的stop sequence
。温度为
0
、没有nucleus sampling
,这对于generation
是不利的,因此并不能代表模型的最佳效果。最好是调优这两个超参数,然后再对比各个模型。实验结果如下表所示:
Self-Instruct
在很大程度上提高了GPT3
的instruction-following
能力。平凡的
GPT3
模型基本上不能遵循人类的指令。经过人工分析,我们发现它通常会生成不相关的重复性文本,而且不知道何时停止生成。与其他没有专门为
SUPERNI
训练的模型相比, $ \text{GPT3}_\text{SELF-INST} $ 取得了比T0
模型、或在T0
训练集上微调的GPT3
更好的性能,而T0
训练集需要巨大的人工标注工作。值得注意的是, $ \text{GPT3}_\text{SELF-INST} $ 也几乎与 $ \text{InstructGPT}_{001} $ 的性能相匹配,后者是用私人用户数据、以及人类标注的标签来训练的。在
SUPERNI
训练集上训练的模型在其评估集上取得了更好的性能,我们将此归因于在训练期间采用了与评估时类似的指令风格和指令格式。然而,我们表明,当Self-Instruct
与SUPERNI
训练集相结合时,仍然带来了额外的收益,证明了Self-Instruct
作为补充数据的价值。
52.3.2 实验二:泛化到新任务上的面向用户的指令
尽管
SUPERNI
在收集现有的NLP
任务方面很全面,但这些NLP
任务大多是为研究目的而提出的,并且偏向于classification
任务。为了更好地获取instruction-following
模型的实用价值,本文所有作者中的一部分作者策划了一套新的指令,其动机是面向用户的应用。我们首先对大型语言模型可能有用的不同领域进行头脑风暴(例如,电子邮件写作、社交媒体、生产力工具、娱乐、编程),然后制作与每个领域相关的指令以及一个
input-output instance
(同样,input
是可选的)。我们的目标是使这些任务的风格和格式多样化(例如,指令可长可短;input/output
可采用bullet points
、表格、代码、方程式等形式)。我们总共创建了
252
个指令,每个指令有1
个实例。我们相信它可以作为一个测试平台,用于评估instruction-based
模型如何处理多样化和不熟悉的指令。下表展示了252
个任务中的一小部分。整个测试集对于request
可用。人类评价设置:在这个由不同任务组成的评估集上评估模型的性能是极具挑战性的,因为不同的任务需要不同的专业知识。事实上,许多任务不能用自动指标来衡量,甚至不能由普通的众包人员来判断(例如,编写一个程序,或将一阶逻辑转换为自然语言)。为了得到更忠实的评价,我们要求指令的作者对模型的预测进行判断。评估人员被要求根据输出是否准确有效地完成了任务来评分。我们实施了一个四级评分系统来对模型的输出质量进行分类,定义如下:
A
:输出是有效的,令人满意的。B
:输出是可接受的,但有轻微的错误或不完善之处,可以改进。C
:输出是相关的,是对指令的响应,但在内容上有重大错误。例如,GPT3
可能首先生成一个有效的输出,但继续生成其他不相关的东西。D
:输出是不相关的或无效的,包括对input
的重复,完全不相关的输出等。
下图给出了
GPT3
模型及其instruction-tuned
对应的版本在这个新编写的指令集上的表现。可以看到: $ \text{GPT3}_\text{SELF-INST} $ (即用Self-Instruct
微调的GPT3
模型)在很大程度上超过了那些在T0
或SUPERNI
上训练的对应模型。证明了尽管有噪音,但generated data
仍有价值。与
$ \text{InstructGPT}_{001} $ 相比, $ \text{GPT3}_\text{SELF-INST} $ 的表现相当接近。如果我们把有轻微缺陷的可接受的输出(等级为C
)算作有效, $ \text{GPT3}_\text{SELF-INST} $ 仅比 $ \text{InstructGPT}_{001} $ 落后5%
。最后,我们的评估证实了
$ \text{InstructGPT}_{002} $ 和 $ \text{InstructGPT}_{003} $ 模型令人印象深刻的instruction-following
能力。尽管这一成功背后有许多因素,但我们猜想,未来的工作在很大程度上可以通过使用人类标注员、或训练奖励模型来提高我们generated data
的质量,以选择更好的generation
,类似于InstructGPT
使用的算法。
我们在
Table 4
中介绍了一些面向用户的任务、相应的 $ \text{GPT3}_\text{SELF-INST} $ 产生的输出和标注人员的评分。我们看到,即使是被评为2
级(即,B
)的输出,该模型也展示了解决任务的详尽步骤,尽管其最终输出是错误的。
52.4 讨论和局限性
为什么
Self-Instruct
能工作?值得反思的是,高质量的人类反馈在促成最近关于
instruction-tuning
语言模型的成功方面所发挥的作用。这里有两个极端的假说:假说一:人类反馈是
instruction-tuning
的一个必要的、不可缺少的方面,因为语言模型需要学习在预训练中不太了解的问题。假说二:人类反馈是
instruction-tuning
的一个可选的方面,因为语言模型在预训练中已经对指令相当熟悉。观察人类反馈只是一个轻量级的过程,用于align
模型的pretraining distribution/objective
,这个轻量级过程可能会被不同的过程所取代。
虽然现实情况可能介于这两个极端之间,但我们猜测它更接近于假说二,特别是对于大型模型。这种直觉,即语言模型已经知道很多关于语言指令的信息,是
Self-Instruct
的关键动机,也得到了其经验性成功的支持。更广泛的影响:除了本文的直接焦点之外,我们认为
Self-Instruct
可能有助于为像InstructGPT
这样广泛使用的instruction-tuned
模型的 "幕后" 工作带来更多的透明度。不幸的是,这些工业模型仍然在API wall
后面,因为它们的数据集没有被公布,因此人们对它们的构造、以及它们为什么表现出令人印象深刻的能力了解甚少。现在,学术界有责任更好地理解这些模型的成功之源,并努力建立更好的(但却是开放的)模型。我们相信我们在本文中的发现证明了多样化的指令数据的重要性,我们的大型合成数据集可以成为更高质量数据的第一步,从而用于建立更好的instruction-following
模型。局限性:
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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论