当前位置: 代码迷 >> 综合 >> 论文阅读——Don‘t Stop Pretraining: Adapt Language Models to Domains and Tasks
  详细解决方案

论文阅读——Don‘t Stop Pretraining: Adapt Language Models to Domains and Tasks

热度:22   发布时间:2024-02-28 03:27:01.0

文章链接:https://www.aclweb.org/anthology/2020.acl-main.740.pdf

 

背景:预训练

在正式开始阅读论文之前,我们必须要理解nlp中语言模型的“预训练(pretraining)”。

我们知道,文本是不能直接输入神经网络的,因此需要找到关于文本的合理的数学表示方法,能将文本映射为向量,这些向量应该要包含文本的语法和语义信息,然后再将这些向量输入到下游任务的神经网络中进行训练。

因此,从2018年开始(这个时间点是论文里说的...),nlp的模型训练分为两个阶段:(1)一个很大的语言模型(Language Model, LM)在一个很大的无标签数据集预训练,这样的语言模型有例如word2vec, ELMo, bert, RoBERTa等等,文本数据通过语言模型可以转化为向量数据(即由text转变为vector)。(2)将从预训练语言模型中得到的单词向量表示输入到下游任务进行有监督训练,如果需要,可以根据下游任务的训练结果再对预训练网络和及其单词表示进行微调(fine-tuning)。

由此可见在nlp中预训练语言模型的重要性,预训练语言模型提供了一种文本的数学表示方法,有了一个好的预训练语言模型就等于成功了一大半。

 

虽然background: pretraining这一块文章中也有,但是我还是觉得把它放在最前面说要好一些,因为在文章的摘要部分就有讲到“a second phase of pretraining”了,接下来正式开始——

摘要

现在的语言模型(Language Model, LM)大多是在大量且广泛的文本数据上训练而成的,表现优异。那么作者思考还有没有必要将模型调整迁移到特定目标任务的领域上(domain of a target task)。因此,作者设计了4个领域上的8个分类任务(每个领域上各有2个分类任务),将已经在大量且广泛文本上预训练过的模型进行第二阶段的预训练,作者分别用领域数据任务数据增强的任务数据进行了实验,即用这些数据对模型进行第二阶段的预训练,然后再用经过两个预训练阶段后得到的模型生成的数据做分类任务。实验表明,不要停止预训练,对于特定的任务,我们完全可以用任务相关的数据再对语言模型做二次预训练,能大大提高模型性能。

 

引入

现在的语言模型都是在大型的通用的语料库中做预训练的,比如wikipedia,通过该语言模型学习得到的向量表示能够在许多不同的任务中都有很好的表现,那么这里就有一个问题:是否这样极大型的预训练模型就能通用了呢,还是说在特定的领域上建立特定的预训练模型仍有价值?

简单来说,这就是一个trade-off:是大而广好呢,还是小而精好呢?在这里,对于特定的领域来说,追求的当然是在该领域中的高性能(即小而精好),因此在通用语言模型BERT的基础上,有了基于生物医学文本的BioBERT,基于科学文本的SciBERT的等。但是这些研究的只是某个特定的领域(生物医学,科学),缺少统一的有对比的研究,那这就是这篇文章的工作啦——作者在4个领域的8个分类任务中(每个领域上各有2个分类任务),进行了领域自适应预训练(domain-adaptive pretraining, DAPT)、任务自适应预训练(task-adaptive pretraining, TAPT)和增强训练数据的任务自适应预训练(augmenting training data for task-adaptive pretraining)实验。

在这篇文章中,源领域、目标领域和任务的关系如下图所示。

  • 黄色部分代表的是源LM预训练的领域,本文中使用现成的RoBERTa模型,该模型已经在BookCorpus, Wikipedia等数据集上进行了预训练(这就是第一阶段预训练,是用已经训练好的模型)。
  • 蓝色部分代表的是目标领域,该领域不一定在源领域内,两者可以有重叠部分,对应本文中的四个领域
  • 黑色部分代表的是任务数据,对应本文中的八个任务,每个任务数据都是该任务所在的领域数据的一个小子集。
  • 灰色部分代表的同样也是任务数据,但它与黑色部分的区别是,黑色部分为从灰色部分中非随机采样得到,并经过标记的数据,因此灰色部分为该任务的无标签数据,被用在“增强训练数据的任务自适应预训练”实验中。

 

领域自适应预训练(domain-adaptive pretraining, DAPT)

这篇文章进行领域自适应预训练的方法是很直接的(straightforward, hhhhhh),就是在预训练完成的语言模型RoBERTa的基础上,分别使用4个领域的数据接着做第二阶段的预训练,生成4个领域自适应的语言模型

这四个领域分别是:生物医学领域(BioMed)、计算机科学领域(CS)、新闻领域(News)、评论领域(Reviews)。如下表所示,可以看出RoBERTa的原始预训练数据是通用数据,而文章选了4个特定领域的领域数据,来进行第二阶段的预训练。第5,6列给出了RoBERTa在随机选的50k篇文章上的masked loss,第5列为进行DAPT之前的,第6列为进行DAPT之后的,很显然,DAPT之后各个模型在其对应的领域上都更加拟合。

各预训练数据集的重合程度如图所示。其中,RoBERTa的原始预训练数据集(用PT表示)与New预训练语料库重合部分最多,与BioMed和CS预训练语料数据重合部分较少。根据预训练语料的相似程度可以预估DAPT的潜力,即语料相似度也低,DAPT自适应的效果越好。

 语言模型完成两个阶段的预训练后(第一个阶段为RoBERTa本身自带的,第二个阶段为4个领域上各自的预训练)得到了4个领域自适应的预训练语言模型,就能得到语句在模型最后一层的【CLS】标记符位置上的向量表示,将向量表示输入下表8个分类任务的8个分类网络(论文仅使用了最简单的一层前向分类网络)。每个领域的预训练语言模型各自输出该领域里两个任务的文本向量表示,并输入到其对应的分类网络中。

DAPT的分类实验结果如表所示。其中第3列为RoBERTa不进行第二阶段的预训练,直接用分类网络进行分类和微调的实验结果;第4列为在各个领域进行第二阶段的预训练后,各LM再用分类网络进行分类和微调的实验结果,能够看出DAPT使得在所有任务的表现都有了提升。

第5列为用与该领域最不相关领域的预训练模型,在该领域任务上进行分类的结果,如对于News中的两个任务,使用CS的语言模型来生成文本向量然后做News中的任务分类,这一对比实验是为了消除“模型效果提升仅仅是因为输入了更多训练数据”的假设。

 

任务自适应预训练(task-adaptive pretraining, TAPT)

这篇文章进行任务自适应预训练的方法同样也很简单,即将各个任务本身的训练数据当作无标签数据来进行第二阶段的预训练,得到8个任务自适应的预训练语言模型,然后再用这些数据(是相同的数据)做分类和微调,分类网络同样是最简单的单层前向网络。与DAPT相比,TAPT使用的是更小的,但与目标任务更相关的预训练数据集。

实验结果如下表所示。相比于RoBERTa, TAPT在每个任务上都有提升;在RCT,HyperPartisan,AGNews,Helpfulness,IMDB上其结果更是超过了DAPT,使用较小的数据集,却得到了较优的结果,这就是TAPT的优势。此外,这篇文章还探究了将DAPT和TAPT联合起来的效果,即对预训练模型RoBERTa先做DAPT(第二阶段预训练),再做TAPT(第三阶段预训练),总共三个阶段的预训练,如下表最后一列,实验证明这样结合能达到最好的效果。

与DAPT相似,为了保证实验完整性,作者还将领域中的一个任务数据集用于语言模型的预训练,然后将预训练得到的语言模型用于领域中的另一个分类任务,例如将RCT数据集作为无标签数据集进行预训练,然后将预训练模型用于ChemPort分类任务,这一操作就是下表中的"Transfer-TAPT"。可以看出,在所有任务上,Transfer-TAPT相比于TAPT结果都有所下降,这说明了即使在同一个领域内,不同的任务数据分布可能还是不同的。

 

增强训练数据的任务自适应预训练(augmenting training data for task-adaptive pretraining)

在TAPT中,我们使用的预训练数据仅仅只是任务数据集本身,从TAPT的好结果中得到启发,如果我们能有与目标任务数据分布相同的更大的无标签数据集,会不会也能得到好结果呢?作者这里将“更大的无标签数据集”分为两个场景,1)人工提供较大型无标签数据集;2)使用算法自动在领域数据中挑选出与任务数据分布相同的数据集

1)人工提供较大型无标签数据集(Human Curated-TAPT)

任务数据集往往是从一个更大的无标签数据集中下采样,然后进行标注得到的,因此可以推断这个更大的无标签数据集与任务数据集有着相同数据分布,可以作为“更大的无标签数据集“来进行模型预训练。

根据task那张表中的信息,可知任务HyperPartisan和任务IMDB是自带有无标签数据集的,可以直接使用。除此之外,将RCT下采样得到500个样本作为有标签分类数据集,其余的作为无标签预训练数据集。实验结果如下表所示,DAPT+Curated-TAPT的结果是最优的。

也正因此,作者在这里推荐任务设计者们能够提供任务的大型无标签数据集。

2) 算法自动选择(Automated Data Selection for TAPT)

由于并不是所有的任务数据都存在有与其同分布的较大型无标签数据集,而DAPT需要消耗较大的计算资源。如果是任务设计者并没有释放更多的、与任务相关的无标签数据,且计算资源短缺的情况下,我们该如何从TAPT中受益呢。作者将这两点结合,提出了根据任务数据在领域数据中挑选出部分无标签数据的算法,从而得到TAPT的增强预训练数据集。

文章采用的算法是使用领域数据对VAMPIRE(一种轻量的词袋模型)进行训练,然后将领域数据和任务数据一起嵌入到VAMPIRE的向量空间中。在这个向量空间中,对于每个任务数据嵌入点使用KNN方法找出里它最近的K个领域数据嵌入点,所有任务点对应的领域点数据构成增强数据,作为任务相关的无标签数据进行TAPT,在下面的表格中被记为KNN-TAPT,其中K值表示KNN中选择最近的K个点。

由下表实验结果可以看出KNN-TAPT普遍优于TAPT,且随着K值的增加,KNN-TAPT的结果稳步变好。

 

 

总结

总结中有一句话挺有意思的:“Our findings suggest it may be valuable to complement work on ever-larger LMs with parallel efforts to identity and use domain- and task- relevant corpora to specialize models”. 探寻表达能力更强,更普遍的模型当然是最重要的,但是当面对特定的任务时,完全可以在已有预训练模型的基础再进行领域或任务相关的预训练,能大大地提高特定模型的性能。

 

 

参考文献

https://mp.weixin.qq.com/s?__biz=MzIwNzc2NTk0NQ==&mid=2247494004&idx=1&sn=2cd5aedceda9a3c54be4c8d7b2aee80e&chksm=970fc1a2a07848b4c850c98fda0671709d05d4cde7d9273052f6d7989f4aea6e10227b554a75&scene=38#wechat_redirect

(这篇推文真的写的好好哦)

 

有问题请指出,禁止转载哦~

  相关解决方案