文章链接: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的等。但是这些研究的只是某个特