EBET易博app【NLP预训练】深入理解“预训练”语言模型

  新闻资讯     |      2023-10-01 22:18

  文本预训练系列是我的专栏《小小的机器世界》中的一个重要子系列,系列里包含了文本预训练历程中有重要影响和意义的预训练框架的详细讲解,每篇都从insight的角度进行了深入的讲解。本篇目的是从预训练模型的发展历程中,挖掘出一些作者们思路的脉络。希望读者看完本文后可以理解预训练发展的动力,以及论文的作者们是如何从现有模型的优缺点出发,改进预训练目标(pre-training objective)而发明新模型的。

  如今大火的chatGPT,就是由GPT系列工作一脉相承而来。想要理解语言模型,不能错过这篇文章。

  如果想用一句话讲清楚“预训练“做了一件什么事,那我想这句话应该是“使用尽可能多的训练数据,从中提取出尽可能多的共性特征,从而能让模型对特定任务的学习负担变轻。“

  要想深入理解预训练,首先就要从它产生的背景谈起,第一部分回答了这样2个问题:预训练解决了什么问题,怎样解决的。

  比如说,如果我想对一批法律领域的文件进行关系抽取,我就需要投入大量的精力(意味着时间和金钱的大量投入)在法律领域的文件中进行关系抽取的标注,然后将标注好的数据“喂”给模型进行训练。但是即使是我标注了几百万条这样的数据(实际情况中,在一个领域内标注几百万条几乎不可能,因为成本非常高),和动辄上亿的无标注语料比起来,还是显得过于单薄。“预训练”这时便可以派上用场。

  上面的两句分别从两个不同的角度来解释了预训练思想的本质。第一句话从模型的角度,第二句话从数据的角度。下面展开讲讲第二种解释。

  “预训练“的做法一般是将大量低成本收集的训练数据放在一起,经过某种预训方法去学习其中的共性,然后将其中的共性“移植”到特定任务的模型中,再使用相关特定领域的少量标注数据进行“微调”,这样的话,模型只需要从”共性“出发,去“学习”该特定任务的“特殊”部分即可。

  其实举一个最简单的身边的例子大家就懂了,让一个完全不懂英文的人(我们称ta为)去做英文法律文书的关键词提取的工作会完全无法进行,或者说ta需要非常多的时间去学习,因为ta现在根本看不懂英文。但是如果让一个英语为母语但是没接触过此类工作的人(我们称ta为B)去做这项任务,ta可能只需要相对比较短的时间学习就可以上手这项任务。在这里,英文知识就属于“共性”的知识,这类知识不必要只通过英文法律文书的相关语料进行学习,而是可以通过大量英文语料,不管是小说、书籍,还是自媒体,都可以是学习资料的来源。

  因此,可以将预训练类比成学习任务分解:在上面这个例子中,如果我们直接让A去学习这样的任务,这就对应了传统的直接训练方法。如果我们先让A变成B,再让ta去学习同样的任务,那么就对应了“预训练+微调”的思路。

  ⬆️⬆️⬆️ 在上面的例子中,EBET易博官方网站B的学习路径是先学习英文,再学习法律文书关键词提取。而图中的C是将“法律文书关键词提取”任务进一步分解成为“法律文书”+“关键词提取”,先学习英文的法律文书领域的知识,再去学习如何在英文的法律文书领域做关键词提取。

  很显然,从“英文法律文书”出发的学习速度从“英文”出发的学习速度从0出发的学习速度。其实采用“预训练”思路的B和C,不仅仅是学习速度高于A,更重要的是,他们的学习效果往往好于A。

  NLP进入神经网络时代之后。NLP领域中的预训练思路可以一直追溯到word2vec的提出。

  第一代预训练模型专注于word embedding的学习(word2vec),神经网络本身关于特定任务的部分参数并不是重点。其特点是context-free,也即word embedding,每个token的表示与上下文无关,比如“苹果”这个词在分别表示水果和公司时,对应的word embedding是同样的。

  第二代预训练模型以context-aware为核心特征,也就是说“苹果”这个词在分别表示水果和公司时,对应output是不一样的,其中具有代表性的有ELMo, GPT, BERT等。

  需要提一点的是,早期的PTMs研究者们在模型结构上做的尝试比较多,比如ELMo使用了双向LSTM。然而在Transformer出现后,研究者们研究的重点就从模型结构转移到了训练策略上。比如GPT和BERT都是基于Transformer结构的: GPT基于Transformer decoder,而BERT基于Transformer encoder。因此,本篇文章也是侧重于解释不同的训练策略。

  NLP领域主要分为自然文本理解(NLU)和自然语言生成(NLG)两种任务。何为理解?我看到一段文字,我懂了它的意思,但是只需要放在心里----懂了,但不需要说出来。何为生成?我看到一段文字,我懂了它的意思,并且能够用语言组织出我理解的内容----懂了,还需要说出来。

  常见的NLU benchmark有GLUE: 包含九项NLU任务,语言均为英语。涉及到自然语言推断、文本蕴含、情感分析、语义相似等多个任务。

  在预训练语言模型的学习过程中,我们往往最早会接触到GPT和BERT。实际上,GPT和BERT代表了两种最基本的预训练范式,它们分别被称作“自回归预训练“(如GPT)和“自编码预训练”(如BERT),各自适用于不同类型的下游任务,其中GPT往往更适合文本生成任务,BERT往往更适合文本理解任务。两者都是基于Transformer结构的部分参数。

  GPT这一缩写来自于GenerativePre-Training,也就是生成式预训练,这个名称已经预示着GPT擅长文本生成任务。

  GPT的优化目标是单向(从左到右或者从右到左)建模序列的联合概率,是传统意义上的语言模型,后预测的词以先预测的词为条件,比较适合文本生成任务,但是缺陷是只使用了单向的语言表征信息,无法获取双向上下文信息表征,而文本理解任务中经常需要用到双向的上下文信息(比如,完形填空),因此,这就带来了pre-train阶段和下游NLU任务的不一致。

  BERT的全称为BidirectionalEncoderRepresentations fromTransformers,名称中强调了“双向表示”,预示着BERT是双向建模的。BERT双向建模的方式就是将一些位置的token替换成特殊的[MASK]字符,并且在目标端去预测这些被替换的字符。BERT的特点在于它在预训练阶段已经使用了双向上下文信息,因此特别适合NLU任务。

  由GPT和BERT这两个基本的预训练范式出发,后面一些工作致力于将两者的优点结合,做出一个既适用于NLG又适用于NLU的“大一统”预训练模型。其中的代表有:

  我在下面的表格里总结了一下上面提到的PTMs的训练目标、模型结构、论文提出的背景是为了针对性地解决什么场景的问题、受哪些前期工作的影响。

  ** Encoder/Decoder指的是,训练目标不是Encoder的(双向建模),也不是Decoder的(单向建模),但是模型结构和Encoder或者Decoder是一样的。