目录

  • 1 自监督学习的概念
  • 2 BERT
  • 2.1 BERT简介
  • 2.2 BERT的使用
  • 2.2.1 Sentiment Analysis(情感分析)
  • 2.2.2 POS(词性标记)
  • 2.2.3 Natural Language Inferencee(NLI,自然语言推论)
  • 2.2.4 Extraction-based Question Answering(QA)
  • 2.3 BERT的预训练
  • 2.4 BERT预训练的原理(猜想)
  • 2.5 Multi-lingual BERT
  • 2.6 BERT小结
  • 3 GPT



1 自监督学习的概念

在前面介绍的模型,如CNN、RNN、Transformer等等,都是监督学习的例子,即:输入到网络中的数据都是都标签(label)的。而自监督学习,则是只有一些无标签的数据,需要模型将这些数据分为两部分,一部分作为数据,另一部分作为标签。自监督学习是无监督学习的一个分支。

自监督目标检测框架_深度学习


 

2 BERT

2.1 BERT简介

 

在预训练BERT时,常常使用以下任务:

  • 恢复遮挡文字:输入一个句子,使用mask遮挡其中的部分内容,让模型还原出原来的语句;
  • 语句预测:输入两个句子,让BERT判断这两个句子是否是上下文的关系。然而,在许多的文章中说明了,语句预测并不能让模型具有较好的性能:RoBERTa.在ALBERT中,提出了一种Sentence Order prediction的任务,能够更有效地预训练模型。
    尽管训练BERT时都是使用一些简单的任务,但是BERT神奇的地方在于,训练完成后,经过调整,它可以解决一些其他的任务(下游任务)。在这个过程中,训练BERT完成简单任务的过程称为Pre-train,调整的过程称为Fine-tune

即使是Pre-train的过程相同,经过不同的Fine-tune之后,BERT也能够处理不一样的任务。因此在测试BERT性能时,常常会调整BERT,来测试其在不同的任务上的性能。General Language Understanding Evaluation中设置了9个下游任务,来评估BERT的性能,近年来提出的模型不断提高了在GLUE上的表现,如图2(黑色横线表示人类的识别能力):

自监督目标检测框架_机器学习_02


 

2.2 BERT的使用

2.2.1 Sentiment Analysis(情感分析)

情感分析的任务目标是,输入一条语句文本,输出该语句的情感是正面的还是负面的,该任务在分析用户对于产品的评价时非常有用。

如图3,在这个任务中,输入的语句添加一个CLS作为句子的开始,BERT主干部分之后还需接一个线性模型。整个模型中,BERT的主干部分的参数已经被预训练,不需要初始化,而线性模型的参数则随机初始化。

尽管BERT会有多个输出,但在情感分析任务中,只关注CLS对应的输出(猜想这样做是因为,语句中的每一个字在分析情感时地位相等,CLS对应的输出实际上是计算其他字与CLS的关联度,更能代表整个句子)

自监督目标检测框架_自监督目标检测框架_03


 

2.2.2 POS(词性标记)

词性标记任务与情感分析的做法类似,只是在词性标记中,关注的BERT的输出是语句中每一个词的输出,而CLS对应的输出则被舍弃。

2.2.3 Natural Language Inferencee(NLI,自然语言推论)

NLI的输入是两个句子,一个称为前提(premise),一个称为假设(hypothesis),两个句子之间用一个特殊符号SEP分隔,开头以CLS指示。模型的任务是推断在给定前提下,假设是否成立,输出一个类别来表示两个句子的这种关系。

与情感分析类似,在NLI任务中,关注的是是输入整体的关系,因此只关注CLS对应的输出。

2.2.4 Extraction-based Question Answering(QA)

该任务是有限制的QA,即问题的答案一定出现在材料中。在这个任务中,输入是两个由字组成的序列D和Q,D代表文章材料,Q代表问题。模型的输出是两个整数s和e,而问题Q的答案就是文本材料D中第s个字到第e个字,如图4.

自监督目标检测框架_自然语言处理_04


 

除了BERT主干部分之外,还需要训练两个向量,一个用于标记答案开始,一个用于标记答案结束,它们的长度与BERT输出向量的长度相同。在训练时,只需将两个向量与D对应输出的向量作内积,结果再经过Softmax即可得到s和e,如图5:

自监督目标检测框架_自然语言处理_05


 

2.3 BERT的预训练

BERT的训练包含两个步骤:预训练和微调。

在预训练的步骤中,使用大量的文本(google使用了超过300万的单词进行预训练),这个过程需要大量的计算资源,如图6:

自监督目标检测框架_机器学习_06


 

2.4 BERT预训练的原理(猜想)

回顾BERT的运作过程,预训练和下游任务实际上没有太大的关联,但是如果随机初始化BERT的参数而不是用预训练的参数,最终得到的结果却会变差。看起来,BERT是一个参数规模庞大的“黑盒”,其运作的原理难以理解,研究预训练的过程中究竟发生了什么,为什么经过与训练之后的BERT就能够拥有强大的处理各种人物的能力,依然是目前科学研究的一个方向。

结合目前为止的实验,有人提出了这样的猜想:

在预训练后,为BERT输入一个文字,BERT将能够输出一个向量,这个向量代表了输入文字的含义,并且这个含义将会考虑到输入上下文,不同的上下文能够给出不同的向量。例如:吃苹果的“果”,和西瓜的“瓜”,它们都是水果,输出的向量也可能会比较接近。事实上,也有实验证明了这件事。

如果真的是这样,那么每一个字经过BERT输出之后,都会变成一个能够代表这个字的向量,并且意义相近的次对应向量的距离也会比较近,这种特点使得BERT输出的向量成为word embeding,并且由于输出与上下文有关,BERT也称为Contextualized word embeding。在若干年前提出的CBOW模型,在思想上也与BERT相似,根据上下文计算某一词的word embeding,不过CBOW模型仅仅包含两层线性回归模型,十分简单。

2.5 Multi-lingual BERT

前述的BERT的预训练往往是在单一语言数据集上完成的,如果使用多种不同的语言来预训练BERT,那么得到的模型称为Multi-lingual BERT。Google使用104种不同的语言,对BERT进行了预训练,这个模型的神奇之处在于,完成预训练之后,模型拥有了“跨语言”QA的能力:例如调整BERT时,使用英文数据集,而在测试模型时,使用中文数据集,对于这两种完全不同的语言,Multi-BERT 居然也可以做的比较好:

自监督目标检测框架_情感分析_07


 这也许说明,Multi-BERT已经学习到了各种语言的共同点,在模型看来,各种语言都没有说明不同,因此才会完成英文训练-中文测试这样的任务。但是,在训练和测试的过程中,模型却不会输出一段既包含英文,又包含中文的数据,这又说明,各种语言之间还是有差距的。

2.6 BERT小结

BERT的出现对于NLP是一大进步,与训练之后的BERT只要花费较低的计算成本进行Fine-tune,就能够完成各种不同的任务。

但是,BERT的预训练过程依然令人难以理解,其耗费的庞大计算资源也令想要自己预训练模型的研究者望而却步。BERT依然是一个“黑盒”,有诸多问题值得继续深入研究。

3 GPT

GPT是一个比BERT更大的预训练模型,其结构与Transformer中的Decoder相似,预训练阶段,GPT的任务是输入语句,预测语句的下一个字。预训练时的模型也是使用masked-attention,也就是说产生输出时,模型只看上文的内容,不看下文的内容。结构如图9:

自监督目标检测框架_机器学习_08


 比起BERT来说,GPT的体积要大得多,大到在这样一个模型上,进行Fine-tune也变得困难。但是,GPT的使用上有一个更加超前的想法:既然GPT拥有文本补全的能力,那么如果为模型输入一段文本,代表任务的内容和少数范例,在文本的末尾添加一个问题,模型是否能够结合这段文本,回答这个问题呢?

这种方式来训练模型,称为Few-shot Learning,假如仅仅给出一个范例,则称One-shot Learning,甚至有的方法在输入中一个范例也没有,称为Zero-shot Learning.

那么在现实中,这种不经过微调和梯度下降的训练方法究竟是否有效呢?在GPTv3中,三种不同的训练方式被测试用于42项不同的任务,其准确率如图10:

自监督目标检测框架_深度学习_09