BERT and its family V2

870 阅读16分钟

[toc]

题目介绍

上一代模型

在介绍BERT模型之前,我们先回顾一下其他自然语言模型

Word2Vec

缺点
  • 由于词和向量是一对一的关系,所以多义词的问题无法解决。
  • Word2vec 是一种静态的方式,虽然通用性强,但是无法针对特定任务做动态优化
优点
  • 由于 Word2vec 会考虑上下文,跟之前的 Embedding 方法相比,效果要更好(但不如 18 年之后的方法)

  • 比之前的 Embedding方 法维度更少,所以速度更快

  • 通用性很强,可以用在各种 NLP 任务中

ELMo

优点
  • ELMo着重解决一词多义
  • ELMo生成的词向量利用了上下文的信息,根据下游任务,能够通过权值来调整词向量以适应不同任务
缺点
  • LSTM对长距离的提取特征不如Transformer

  • lstm是串行机制

各个模型的对比图 image.png

唯有BERT同时满足并行,获取上下文语义,和更深程度的长距离语义

BERT简介

BERT是谷歌公司开源的一个自然语言处理框架,近年来在这这个框架上的改进也层出不穷,在学术界和工业界得到了广泛的应用。例如百度的ernie,美团的mt-bert,华为的tiny-bert, Facebook的roberta。

what is BERT ?

BERT is designed to pretrain deep bidirectional representations from unlabeled text by jointly conditioning on both left and right context in all layers. As a result, the pre-trained BERT model can be finetuned with just one additional output layer to create state-of-the-art models for a wide range of tasks, such as question answering and language inference, without substantial taskspecific architecture modifications.

BERT来自Google的论文Pre-training of Deep Bidirectional Transformers for Language Understanding,BERT是”Bidirectional Encoder Representations from Transformers”的首字母缩写。如下图所示,BERT能够同时利用前后两个方向的信息,而ELMo和GPT只能使用单个方向的。

  • 题外话: 可能大家都了解BERT等深度学习自然语言框架,其实包括BERT在内的一众模型的名字都来自于美国知名动画片「芝麻街」 (Sesame Street)里的虚拟人物。

image.png

主要主要原理分析

BERT介绍

在介绍bert之前,我们可以想象一下什么样的model才是state-of-the-art model,也许应该是:

  • 支持并行
  • 考虑上下文
  • 解决一词多义
  • 泛化能力强,可以完成不同的下游任务

GPT2 完美解决上述问题,但是美中不足的就是它是单向的Transformer,这也导致了其在训练得过程中会消耗一些性能。这就要引入本文要介绍的主角BERT了。

BERT模型总体结构

BERT是一种基于微调的多层双向Transformer编码器,其中的Transformer与原始的Transformer是相同的,并且实现了两个版本的BERT模型,在两个版本中前馈大小都设置为4层:

BERTBASE:L=12,H=768,A=12,Total Parameters=110M

BERTLARGE:L=24,H=1024,A=16,Total Parameters=340M

其中层数(即Transformer blocks块)表示为L,隐藏大小表示为H,自注意力的数量为A。 image.png

模型对比图

image.png

其中BERT细节图如下:

image.png

由上述图我们可以看出BERT是通过transformer的encode提取特征,获得双向上下文语义的。

BERT模型输入

输入表示可以在一个词序列中表示单个文本句或一对文本(例如,[问题,答案])。对于给定的词,其输入表示是可以通过三部分Embedding求和组成。Embedding的可视化表示如下图所示:

image.png

  • token Embeddings:表示的是词向量,第一个单词是CLS标志,可以用于之后的分类任务,对于非分类任务,可以忽略词向量;

  • Segment Embeddings:用来区别两种句子,因为预训练不只做语言模型还要做以两个句子为输入的分类任务;

  • Position Embeddings:是通过模型学习得到的。

Pre-training

掩码语言模型(MLM)

为了训练深度双向Transformer表示,采用了一种简单的方法:随机掩盖部分输入词,然后对那些被掩盖的词进行预测,此方法被称为“Masked LM”(MLM)。预训练的目标是构建语言模型,BERT模型采用的是bidirectional Transformer。那么为什么采用“bidirectional”的方式呢?因为在预训练语言模型来处理下游任务时,我们需要的不仅仅是某个词左侧的语言信息,还需要右侧的语言信息。

在训练的过程中,随机地掩盖每个序列中15%的token,并不是像word2vec中的cbow那样去对每一个词都进行预测。MLM从输入中随机地掩盖一些词,其目标是基于其上下文来预测被掩盖单词的原始词汇。与从左到右的语言模型预训练不同,MLM目标允许表示融合左右两侧的上下文,这使得可以预训练深度双向Transformer。Transformer编码器不知道它将被要求预测哪些单词,或者哪些已经被随机单词替换,因此它必须对每个输入词保持分布式的上下文表示。此外,由于随机替换在所有词中只发生1.5%,所以并不会影响模型对于语言的理解。

Transformer和BERT的位置编码有什么区别? BERT的位置编码是学习出来的,Transformer是通过正弦函数生成的。

原生的Transformer中使用的是正弦位置编码(Sinusoidal Position Encoding),是绝对位置的函数式编码。由于Transformer中为self-attention,这种正余弦函数由于点乘操作,会有相对位置信息存在,但是没有方向性,且通过权重矩阵的映射之后,这种信息可能消失。

BERT中使用的是学习位置嵌入(learned position embedding),是绝对位置的参数式编码,且和相应位置上的词向量进行相加而不是拼接。

句子连贯性判定(NSP)

image.png

很多句子级别的任务如自动问答(QA)和自然语言推理(NLI)都需要理解两个句子之间的关系,譬如上述Masked LM任务中,经过第一步的处理,15%的词汇被遮盖。那么在这一任务中我们需要随机将数据划分为等大小的两部分,一部分数据中的两个语句对是上下文连续的,另一部分数据中的两个语句对是上下文不连续的。然后让Transformer模型来识别这些语句对中,哪些语句对是连续的,哪些对子不连续。

不同预训练模型的的效率如下

image.png 通过对比BERT-Base 和其他方法可以知道,MLM任务和NSP的必要之处,另外self-attention机制的双向SQuAD和MRPC任务也影响很大

Fine-tuning

能解决的问题

image.png

  • 句对分类

判断两句子之间的关系,如句子语义相似度、句子连贯性判定等,其本质是文本分类。

输入:两句子;

输出:句子关系标签。

  • 单句子文本分类

判断句子属于哪个类别,如新闻自动分类、问题领域分类等。

输入:一个句子;

输出:输出句子类别标签。

  • 抽取式问答

给定问答和一段文本,从文本中抽取出问题的答案,如机器阅读理解等。其本质是序列标注。

输入:一个问题,一段文本;

输出:答案在文本中的索引。

  • 单句子序列标注

给输入句子的每个token打上目标标签,如分词、词性标注、实体识别等。

输入:一段文本;

输出:文本中每个token对应的标签。

模型评价

实验数据以及对应的NLP任务
GLUE语料集的介绍
名称全名用途
MNLIMulti-Genre NLI蕴含关系推断
QQPQuora Question Pairs问题对是否等价
QNLIQuestion NLI句子是否回答问句
SST-2Stanford Sentiment Treebank情感分析
CoLACorpus of Linguistic Acceptability句子语言性判断
STS-BSemantic Textual Similarity语义相似
MRPCMicrosoft Research Paraphrase Corpus句子对是否语义等价
RTERecognizing Texual Entailment蕴含关系推断
WNLIWinograd NLI蕴含关系推断

包含了各种理解句子含义和关系的任务。看一下效果:

image.png

如上图所示,当时BERT模型到达了state-of-the-art。

its family

BERT模型问世之后,对其改进的模型层出不穷。下面介绍一下,对BERT模型的改进。

修改掩码语言模型(MLM)任务

Ernie

bert是随机mask输入序列中的字,这样能很简单地推测出字之间的搭配,这样会让本来应该有强相关的一些连在一起的字词,在训练时是割裂开来的。这对于中文文本中广泛包含多个字的实体、短语等单一的语义的词,俘获其语义信息是欠佳的。

因而ERNIE在输入为字的基础上,对输入序列中的短语和实体类的词实体词进行连续mask,这样一来短语信息就会融入到字的 embedding中了。

这样做的目的是:使模型能够学习到实体、短语的语义信息,训练完成后字的embedding就具有了实体、短语的语义信息了,这对于有大量短语、实体的文本任务(特别是实体识别任务)是非常友好。

image.png image.png

ERNIE的效果比原始的BERT也有所提升

Robert
  • 静态Mask变动态Mask

Bert在整个预训练过程,选择进行mask的15%的Tokens是不变的,也就是说从一开始随机选择了这15%的Tokens,之后的N个epoch里都不再改变了。这就叫做静态Masking。

而RoBERTa一开始把预训练的数据复制10份,每一份都随机选择15%的Tokens进行Masking,也就是说,同样的一句话有10种不同的mask方式。然后每份数据都训练N/10个epoch。这就相当于在这N个epoch的训练中,每个序列的被mask的tokens是会变化的。这就叫做动态Masking。

修改句子连贯性判定(NSP)任务

ALBERT
  • 移去NSP任务,使用SOP任务

BERT的NSP任务实际上是一个二分类,训练数据的正样本是通过采样同一个文档中的两个连续的句子,而负样本是通过采用两个不同的文档的句子。该任务主要是希望能提高下游任务(如文本匹配)的效果,但是后续的研究发现该任务效果并不好。NSP其实包含了两个子任务,主题预测(两个句子是否来源于同一类文章)与关系一致性(两个句子是否是承接关系)预测,但是主题预测相比于关系一致性预测简单太多了,并且在MLM任务中其实也有类型的效果。

因而,ALBERT中,为了只保留一致性任务去除主题识别的影响,提出了一个新的任务—句子连贯性预测 sentence-order prediction(SOP),SOP的正样本和NSP的获取方式是一样的,负样本把正样本的顺序反转即可。SOP因为实在同一个文档中选的,其只关注句子的顺序并没有主题方面的影响。并且SOP能解决NSP的任务,但是NSP并不能解决SOP的任务,该任务的添加给最终的结果提升了一个点。

这样做的目的是:通过调整正负样本的获取方式去除主题识别的影响,使预训练更关注于句子关系一致性预测。

模型参数大小上做文章

  • TinyBERT

TinyBERT 是华为、华科联合提出的一种为基于 transformer 的模型专门设计的知识蒸馏方法,模型大小不到 BERT 的 1/7,但速度提高了 9 倍,而且性能没有出现明显下降。

引入知识图谱

  • K-BERT

多模态

  • VideoBERT
  • VisualBERT
  • SpeechBERT

Python实现结果

原始论文结果

image.png

GLUE测试结果,由GLUE评估服务器给出。每个任务下方的数字表示训练样例的数量

实战

百度2021语言与智能技术竞赛:机器阅读理解任务

百度2021语言与智能技术竞赛:机器阅读理解任务

代码见demo文件夹

赛题说明:

给定一个问题q,一段篇章p及其标题t,参赛系统需要根据篇章内容,判断该篇章p中是否包含给定问题的答案,如果是,则给出该问题的答案a;否则输出“无答案”。数据集中的每个样本,是一个四元组,例如: 问题 ( q ): 番石榴汁热量 篇章 ( p ): 番石榴性温,味甜、酸、涩…,最重要的是番石榴所含的脂肪热量较低,一个番石榴所含的脂肪约0.9克重或84卡路里。比起苹果,番石榴所含有的脂肪少38%,卡路里少42%。 标题 ( t ): 番石榴汁的热量 - 妈妈网百科 参考答案 ( a ): [‘一个番石榴所含的脂肪约0.9克重或84卡路里’]

image.png

ERINE - BERT - RoBERTa 结果对比图如下,可以看出ERINE的性能最好。

image.png

在baselin之上的提升方法

  • 加载其他数据集
  • 模型融合
  • robert

总结与讨论

  • BERT overview

image.png

  • BERT特性

真正的双向:使用双向 Transformer,能同时利用当前单词的上下文信息来做特征提取,这与双向RNN分别单独利用当前词的上文信息和下文信息来做特征提取有本质不同,与CNN将上下文信息规定在一个限定大小的窗口内来做特征提取有本质不同;

动态表征:利用单词的上下文信息来做特征提取,根据上下文信息的不同动态调整词向量,解决了word2vec一词多义的问题;

并行运算的能力:Transformer组件内部使用自注意力机制(self- attention),能同时并行提取输入序列中每个词的特征。

易于迁移学习:使用预训练好的BERT,只需加载预训练好的模型作为自己当前任务的词嵌入层,后续针对特定任务构建后续模型结构即可,不需对代码做大量修改或优化。

  • 模型改进

MLM :动态mask(RoBERTa)

MLM:mask字改为mask词(ERINE)

NSP:考虑删除,改成SOP任务(ALBERT)

  • BERT模型的影响

BERT是一个语言表征模型(language representation model),通过超大数据、巨大模型、和极大的计算开销训练而成,在11个自然语言处理的任务中取得了最优(state-of-the-art, SOTA)结果。或许你已经猜到了此模型出自何方,没错,它产自谷歌。估计不少人会调侃这种规模的实验已经基本让一般的实验室和研究员望尘莫及了,但它确实给我们提供了很多宝贵的经验:

  1. 深度学习就是表征学习 (Deep learning is representation learning)

"We show that pre-trained representations eliminate the needs of many heavily engineered task-specific architectures". 在11项BERT刷出新境界的任务中,大多只在预训练表征(pre-trained representation)微调(fine-tuning)的基础上加一个线性层作为输出(linear output layer)。在序列标注的任务里(e.g. NER),甚至连序列输出的依赖关系都先不管(i.e. non-autoregressive and no CRF),照样秒杀之前的SOTA,可见其表征学习能力之强大。

  1. 规模很重要(Scale matters)

"One of our core claims is that the deep bidirectionality of BERT, which is enabled by masked LM pre-training, is the single most important improvement of BERT compared to previous work". 这种遮挡(mask)在语言模型上的应用对很多人来说已经不新鲜了,但确是BERT的作者在如此超大规模的数据+模型+算力的基础上验证了其强大的表征学习能力。这样的模型,甚至可以延伸到很多其他的模型,可能之前都被不同的实验室提出和试验过,只是由于规模的局限没能充分挖掘这些模型的潜力,而遗憾地让它们被淹没在了滚滚的paper洪流之中。

  1. 预训练价值很大(Pre-training is important)

"We believe that this is the first work to demonstrate that scaling to extreme model sizes also leads to large improvements on very small-scale tasks, provided that the model has been sufficiently pre-trained". 预训练已经被广泛应用在各个领域了(e.g. ImageNet for CV, Word2Vec in NLP),多是通过大模型大数据,这样的大模型给小规模任务能带来的提升有几何,作者也给出了自己的答案。BERT模型的预训练是用Transformer做的,但我想换做LSTM或者GRU的话应该不会有太大性能上的差别,当然训练计算时的并行能力就另当别论了。

  1. 对BERT模型的观点

high-performance的原因其实还是归结于两点,除了模型的改进,更重要的是用了超大的数据集(BooksCorpus 800M + English Wikipedia 2.5G单词)和超大的算力(对应于超大模型)在相关的任务上做预训练,实现了在目标任务上表现的单调增长。这个模型的双向和Elmo不一样,大部分人对他这个双向在novelty上的contribution 的大小有误解,我觉得这个细节可能是他比Elmo显著提升的原因。Elmo是拼一个左到右和一个右到左,他这个是训练中直接开一个窗口,用了个有顺序的cbow。

参考资料及引用文献

csdn:ELMo算法介绍

李宏毅人类语言处理ppt

知乎:万字长文带你纵览 BERT 家族

美团BERT的探索和实践

BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding

Attention Is All You Need

Attention? Attention!

NEURAL MACHINE TRANSLATION BY JOINTLY LEARNING TO ALIGN AND TRANSLATE

ERNIE: Enhanced Representation through Knowledge Integration

TinyBERT: Distilling BERT for Natural Language Understanding

K-BERT: Enabling Language Representation with Knowledge Graph

csdn:超详细中文预训练模型ERNIE使用指南

机器阅读理解算法与实践

The Illustrated BERT, ELMo, and co. (How NLP Cracked Transfer Learning

知乎:比 Bert 体积更小速度更快的 TinyBERT