BERT模型详解

Auto-Regressive & Auto-Encoding

在介绍当下最火热的BERT模型之前,我们先来看两个概念,Auto-Regressive和Auto-Encoding。

BERT模型详解_第1张图片

Auto-Regressive

Auto-Regressive如上图所示,其实很像是一个语言模型,遵循的是链式法则,即根据 t t t时刻之前的词预测当前的 x t x_t xt,目标函数为 l o g p ( x ∣ θ ) = l o g ∑ t = 1 T p ( x t ∣ x 1 : t − 1 , θ ) log{p(x|\theta)}=log\sum_{t=1}^T{p(x_t|x_{1:{t-1}},\theta)} logp(xθ)=logt=1Tp(xtx1:t1,θ)​​。其实在Seq2Seq模型中,如果我们不对Decoder部分使用teacher forcing,那它就是一个Auto-Regressive。

Auto-Regressive的优点:是无偏差的,因为它严格遵循链式法则

Auto-Regressive的缺点:是一个单向模型,在预测当前词的时候看不到后面的信息

Auto-Encoding

最原始的Auto-Encoding是将原本的输入 x x x​经过一个模型得到一个输出 x ^ \hat{x} x^​,然后我们希望 ∑ ∣ ∣ x − x ^ ∣ ∣ 2 \sum||x-\hat{x}||_2 xx^2​最小化。而另外一种叫做Denosing的Auto-Encoder,即我们的输入是 x + δ x+\delta x+δ​。如上图所示,输入中的[MASK]就是我们的噪声 δ \delta δ​,我们希望模型能够还原这些[MASK]。它的目标函数是 l o g p ( x ∣ x 1 : t − 1 , θ ) ≈ ∑ t = 1 T m t p ( x t ∣ x 1 : t − 1 , θ ) log{p(x|x_{1:{t-1}},\theta)}\approx{\sum_{t=1}^T{m_t p(x_t|x_{1:{t-1}},\theta)}} logp(xx1:t1,θ)t=1Tmtp(xtx1:t1,θ)​​,之所以是约等号,是因为它并不遵循链式法则​,是一个双向的模型。

Auto-Encoding的优点:双向模型
Auto-Encoding的缺点:1、有偏差(discrepancy)

​ 2、没有考虑[MASK]词之间的关系,即[MASK]之间是independent的

BERT

BERT的全称是Bidirectional Encoder Representation from Transformer,由此可见,BERT模型的主要部分是Transformer中的Encoder。

BERT是一个预训练模型,对于一个预训练模型,要考虑的问题通常有两个:

  1. model structure,即模型结构
  2. pre-train task,即用什么任务来做预训练

BERT模型结构

BERT就是利用了Transformer中的Encoder,模型结构上没有太大创新。

BERT模型有两种,一种叫 B E R T b a s e BERT_{base} BERTbase​,另一种叫做 B E R T l a r g e BERT_{large} BERTlarge​,这两者只是模型复杂度上的不同。

B E R T b a s e BERT_{base} BERTbase L a y e r : 12 Layer:12 Layer:12 H i d d e n _ d i m : 768 Hidden\_dim:768 Hidden_dim:768 A t t n _ H e a d : 12 Attn\_Head:12 Attn_Head:12 T o t a l _ P a r a m : 110 M Total\_Param: 110M Total_Param:110M

B E R T l a r g e BERT_{large} BERTlarge​: L a y e r : 24 Layer:24 Layer:24​, H i d d e n _ d i m : 1024 Hidden\_dim:1024 Hidden_dim:1024​, A t t n _ H e a d : 16 Attn\_Head:16 Attn_Head:16​, T o t a l _ P a r a m : 340 M Total\_Param: 340M Total_Param:340M

BERT的预训练任务

这一部分是BERT的核心,BERT之所以取得了巨大的成功,源于其设计的预训练任务和在预训练中使用了大量的文本。接下来我们分别介绍。

Mask Language Model(MLM)

MLM任务是BERT的核心,它的intuition其实就来自于我们高中英语非常常见的一种题型:完形填空。在模型中,作者将输入的文本进行MASK填充,具体细节如下:

  1. 在句子开头加入[CLS]token,两个句子之间加入[SEP]token
  2. 随机选择输入中 15 % 15\% 15%的token进行[MASK]填充
  3. 在这 15 % 15\% 15%选中的部分中, 80 % 80\% 80%是真的填充为[MASK], 10 % 10\% 10%被填充任意随机的token,剩下 10 % 10\% 10%​保持不变。
  4. 最后我们以训练好的[CLS]token的embedding作为当前文本的特征向量

BERT模型详解_第2张图片

Next Sentence Prediction(NSP)

MLM任务是在token级别进行学习,而NSP任务就是学习句子之间的特征。首先,我们来看一下BERT输入的构成

BERT模型详解_第3张图片

我们可以看到,除了Transformer中原有的Token Embedding和Position Embedding之外,BERT中增加了一个Segment Embedding。 Segment Embedding是用来区分每个token属于A句子还是B句子,而NSP的任务就是预测同时输入的A句和B句是不是上下句的关系,最后仍然使用[CLS]token映射到二维进行标签分类。

BERT的Fine-tune

BERT模型能做的下游任务很多,但是不包括文本生成任务。因为文本生成的时候模型是不能看到当前位置以及之后的信息的,而BERT只使用了Encoder部分,做的是Self-Attention,因此不适于用来做文本生成任务。

BERT进行Fine-tuning后可以完成的downstream tasks有:

  1. Sentence Pair Classification:这个很好理解,因为BERT本身就是同时训练两个句子,因此对于pair分类任务肯定能够完成
  2. Single Sentence Classification:就是文本分类,由于文本分类我们只会输入一个句子,因此这里的Segment Embedding只有一种
  3. Question Answering:这里的问答任务特指Stanford的问答数据集SQuAD v1.1,这个任务是一个问题对应一篇短文,而这个问题的答案就在文章当中。对于这个任务,BERT要做的只是多训练两个权重。首先,输入还是不变,同时输入Question和Paragraph。然后,我们定位问题答案的方式是判断答案[START]和[END]的位置,也就是找到答案区间。因此,我们给Paragraph中每个训练好的embedding一个[START]权重,一个[END]权重,其实就是训练两个全连接层,然后经过softmax得到概率,选择概率最大的作为[START]和[END]。
  4. Single Sentence Tagging:比如NER、POS-Tagging任务等,这个任务也比较好实现。

BERT模型的变体

  1. AlBERT:主要是进行参数量的缩减,作者注意到参数量主要集中在Embedding层中 ∣ V ∣ ∗ ∣ H ∣ |V|*|H| VH的部分,因为 ∣ V ∣ |V| V是非常大的,因此提出使用矩阵分解将 ∣ V ∣ ∗ ∣ H ∣ |V|*|H| VH的矩阵分解为 ∣ V ∣ ∗ ∣ E ∣ + ∣ E ∣ ∗ ∣ H ∣ |V|*|E|+|E|*|H| VE+EH的两个矩阵,而 E < < H E<E<<H,这样就大大减少了参数量并且模型的表现下降很小。
  2. RoBERTa:依然是进行了一些优化,然后提出了NSP任务没啥卵用。
  3. KBERT
  4. KGBERT
  5. FINBERT
  6. SpanBERT

这些我们在这里不详述,感兴趣可再去详细了解。

你可能感兴趣的:(Deep,Learning,bert,深度学习,自然语言处理)