BERT知识点汇总(en cour...)

这里写目录标题

Word2Vec

Word2Vec 之 Skip-Gram 模型

http://mccormickml.com/2016/04/19/word2vec-tutorial-the-skip-gram-model/
Word2Vec模型中,主要有Skip-Gram和CBOW两种模型,从直观上理解,Skip-Gram是给定input word来预测上下文。而CBOW是给定上下文,来预测input word。本篇文章仅讲解Skip-Gram模型。
BERT知识点汇总(en cour...)
BERT知识点汇总(en cour...)

BERT的模型架构

BERT知识点汇总(en cour...)
论文地址https://arxiv.org/pdf/1810.04805.pdf链接: link.
本文作者推出了一套新的语言表达模型BERT,全称为Bidirectional Encoder Representations from Transformers。与近年来提出的语言模型不一样的地方在于,BERT不再仅仅是只关注一个词前文或后文的信息,而是整个模型的所有层都去关注其整个上下文的语境信息。实验结果证明,使用预训练过的BERT模型,仅仅在后面再包一层输出层,并对其进行微调训练,就可以取得很不错的结果。具体有多不错,那就是刷爆了NLP领域的11大任务,甚至有几项任务的准确率已经超过了人类。

Token Embedding,Segment Embedding,Position Embedding

Token Embedding

BERT知识点汇总(en cour...)

Token embedding 层是要将各个词转换成固定维度的向量。在BERT中,每个词会被转换成768维的向量表示。
BERT知识点汇总(en cour...)
输入文本在送入token embeddings 层之前要先进行tokenization处理。此外,两个特殊的token会被插入到tokenization的结果的开头 ([CLS])和结尾 ([SEP]) 。其中CLS是classification,表示这是一个分类任务;SEP是separator,表示是分隔记号。

Tokenization使用的方法是WordPiece tokenization. 这是一个数据驱动式的tokenization方法,旨在权衡词典大小和oov(Out-of-vocabulary)的个数。这种方法把例子中的“strawberries”切分成了“straw” 和“berries”,可参阅 Wu et al. (2016) 和 Schuster & Nakajima (2012)。
使用WordPiece tokenization让BERT在处理英文文本的时候仅需要存储30,522 个词,而且很少遇到oov。

​Token Embeddings 层会将每一个wordpiece token转换成768维的向量。这样,例子中的6个token就被转换成了一个(6, 768) 的矩阵或者是(1, 6, 768)的张量(如果考虑batch_size的话)。

Segment Embedding

BERT 能够处理句子粒度的分类任务。这类任务就像判断两个文本之间的上下文关系。
​ Segment Embeddings 层只有两种向量表示。前一个向量是把0赋给第一个句子中的各个token, 后一个向量是把1赋给第二个句子中的各个token。如果输入仅仅只有一个句子,那么它的segment embedding就是全0。

Positon Embedding

加入position embeddings会让BERT理解下面下面这种情况:

I think, therefore I am

第一个 “I” 和第二个 “I”应该有着不同的向量表示。

Transform

Attension 方法

Scaled Dot Product Attention

BERT知识点汇总(en cour...)
论文地址https://paperswithcode.com/method/scaled链接: link.
BERT知识点汇总(en cour...)

BERT知识点汇总(en cour...)
Scaled Dot Porduct 和 Dot Product 唯一的区别就是乘上了一个 s q r t ( d k ) sqrt(d_{k}) sqrt(dk​)

当dk比较小时,两种点积的效果几乎相同,当输入信息的维度较高时,点积模型的值通常有比较大方差,从而导致 softmax 函数的梯度会比较小。因此,缩放点积模型可以较好地解决这一问题。

除了点积注意力模型之外还有addtive attension model,addtive attension 使用的是一个含有一个隐藏成的FN实现的,它和点积的复杂度在理论上相近,但是目前程序对于点积运算已经更好的算法上的优化,所以使用点积在性能上能取得更好的效果。

Multi-head

BERT知识点汇总(en cour...)

1.类似于CNN中通过多通道机制进行特征选择;

2.Transformer中先通过切头(spilt)再分别进行Scaled Dot-Product Attention,可以使进行点积计算的维度d不大(防止梯度消失),同时缩小attention mask矩阵。

Feed Forward Network

BERT知识点汇总(en cour...)
Transformer在抛弃了 LSTM 结构后,FFN 中的 ReLU成为了一个主要的提供非线性变换的单元。

Weight trying(sharing)

BERT知识点汇总(en cour...)
https://arxiv.org/pdf/1608.05859v3.pdf

词表数量级高,这样可以减少参数量。这样做可以大大减少模型的参数数量却没有影响模型的效果,在论文中还提到使用权值绑定和共享还可以降低模型的perplexity。
虽然weight共享了,但是embedding和pre-softmax仍然是两个不同的层,因为bias是彼此独立的

Gelu

https://arxiv.org/pdf/1606.08415.pdf
BERT知识点汇总(en cour...)
BERT知识点汇总(en cour...)
GeLu:在激活中引入了随机正则的思想,
原理
根据当前input大于其余inputs的概率进行随机正则化,即为在mask时依赖输入的数据分布,即x越小越有可能被mask掉,因此服从bernoulli(Φ(x))
相比于Relu的优点
ReLu缺乏随机因素,只用0和1

BERT的优缺点

优点
1.利用了文本的双向信息,得到基于上下文的token表示,效果更好

2.计算可并行化

缺点
1.[MASK]标记在实际预测中不会出现,训练时用过多[MASK]影响模型表现。预训练阶段与微调阶段不一致,因为微调阶段是不会有【MASK】存在的,所以考虑到这一层面,作者也不总是将随机选择的词屏蔽为MASK,主要的操作如下描述
BERT知识点汇总(en cour...)

2.每个batch只有15%的token被预测,所以BERT收敛得比left-to-right模型要慢(它们会预测每个token)正因为从理论上来讲每一次都只有15%的词是来被训练到的,所以,需要更多预训练的计算与时间成本。而作者也在后文实验证实了该方法确实收敛的较慢,但是效果好呀!(对于这种,只要做好一次,就能一劳永逸的预训练模型,时间和计算成本的增加对谷歌来说确实是小case哈哈)
3.这是非语言模型,所以不能适用于生成文本。

NLU pre-training

word level generative

MLM

Bert 采取的策略subword

15% tokens: 80% [MASK], 10% random, 10% unchanged
在预处理阶段,给每个句子采样10种mask方式

WWM(Whole Word Masking )

BERT知识点汇总(en cour...)

根据分词后的词边界mask,思想很简单如下图所示。
BERT知识点汇总(en cour...)

Pre-Training with Whole Word Masking for Chinese BERT

2019.6.19

https://arxiv.org/abs/1906.08101
https://github.com/ymcui/Chinese-BERT-wwm

Entity/Phrase (Baidu ERNIE1.0)

BERT知识点汇总(en cour...)

Mask策略:word-level/phrase-leve/entity-level
mask掉的不是字符也不是词变成了更大粒度的词组。
50%的时候选entity或phrase,剩下选word(保持总体subword在15%)
BERT知识点汇总(en cour...)

1.0: https://arxiv.org/abs/1904.09223

2019.4.19

2.0: https://arxiv.org/abs/1907.12412

2019.7.29

Span/N-gram (SpanBERT)

根据几何分布,先随机选择一段(span)的长度,之后再根据均匀分布随机选择这一段的起始位置,最后按照长度遮盖。文中使用几何分布取 p=0.2,最大长度只能是 10,平均被遮盖长度是 3.8 个词的长度。

参考Roberta的动态masking/一直训练长句

2019.7.24

https://arxiv.org/abs/1907.10529

https://zhuanlan.zhihu.com/p/75893972

Dynamic (RoBERTa)

每个Epoch见到的样本mask位置都不一样,实际上效果只提升了不到一个点

RoBERTa: A Robustly Optimized BERT Pretraining Approach

2019.7.26

https://arxiv.org/abs/1907.11692

PLM(XLNet)

XLNet: Generalized Autoregressive Pretraining for Language Understanding
AR(autoregressive):自回归,假设序列数据存在线性关系,用 x 1 , . . . , x t − 1 x_{1},...,x_{t-1} x1​,...,xt−1​ 预测 x t x_{t} xt​ 。以前传统的单向语言模型(ELMo、GPT)都是以AR作为目标。

AE(autoencoding):自编码,将输入复制到输出。BERT的MLM就是AE的一种。

本文作者指出了BERT采用AE方法带来的两个问题:

BERT有个不符合真实情况的假设:即被mask掉的token是相互独立的。比如预训练时输入:“自然[Mask][Mask]处理”,目标函数其实是 p(语|自然处理)+p(言|自然处理),而如果使用AR则应该是 p(语|自然)+p(言|自然语)。这样下来BERT得到的概率分布也是基于这个假设的,忽略了这些token之间的联系。
BERT在预训练和精调阶段存在差异:因为在预训练阶段大部分输入都包含[Mask],引入了噪声,即使在小部分情况下使用了其他token,但仍与真实数据存在差异。
以上就是BERT采用AE方法存在的痛点,接下来请看XLNet如何解决这些问题。
与其说XLNet解决了BERT的问题,不如说它基于AR采用了一种新的方法实现双向编码,因为AR方法不存在上述两个痛点。

XLNet的创新点是Permutation Language Modeling,如下图:
BERT知识点汇总(en cour...)

理论上
对于长度为T的序列x,存在T!种排列方法,如果把 [公式] 重新排列成 [公式] ,再采用AR为目标函数,则优化的似然为 [公式]

因为对于不同的排列方式,模型参数是共享的,所以模型最终可以学习到如何聚集所有位置的信息。

操作上
由于计算复杂度的限制,不可能计算所有的序列排列,因此对于每个序列输入只采样一个排列方式。而且在实际训练时,不会打乱序列,而是通过mask矩阵实现permutation。作者特意强调,这样可以保持与finetune输入顺序的一致,不会存在pretrain-finetune差异。

对于实现的细节,问题的信息如何加入成为了问题,因为要计算概率,在公式的已知信息中没有信息。

那下一个问题又来了,传统的attention只带有token编码,位置信息都在编码里了,而AR目标是不允许模型看到当前token编码的,因此要把position embedding拆出来。怎么拆呢?作者就提出了Two-Stream Self-Attention。

Query stream:只能看到当前的位置信息,不能看到当前token的编码

Content stream:传统self-attention,像GPT一样对当前token进行编码

预训练阶段最终预测只使用query stream,因为content stream已经见过当前token了。在精调阶段使用content stream,又回到了传统的self-attention结构。
BERT知识点汇总(en cour...)

SBO(SpanBERT)

在训练时取 Span 前后边界的两个词,不在 Span 内,然后用这两个词向量加上 Span 中被遮盖掉词的位置向量,来预测原词。详细做法是将词向量和位置向量拼接起来,过两层全连接层

比NSP表现好,有一个点的提升(个别3个点)

在span抽取式任务上有很大提升

infoWord

BERT知识点汇总(en cour...)

ICLR2020

A Mutual Information Maximization Perspective of Language Representation Learning

2019.10.18

DeepMind & CMU

https://arxiv.org/abs/1910.08350

word level descrimitive

WSO (StructBERT)

BERT知识点汇总(en cour...)BERT知识点汇总(en cour...)

按K个一组打乱token顺序,预测原顺序(5%个trigram)

和MLM jointly等权重训练

平均不到1个点或负增长,CoLA任务上有4个点的提升

ICLR2020

https://arxiv.org/abs/1908.04577

问题:

  1. 负增长是否由于joint训练?mask掉和需要预测位置的重合?以前只有15%的噪音,现在有30%

  2. pretrain batchsize
    文章参考
    https://www.cnblogs.com/d0main/p/10447853.html#token-embeddings
    https://www.jianshu.com/p/4cb1f255cd7c

上一篇:【8】查询练习:子查询


下一篇:HDU 2136 Largest prime factor