BERT关键总结

99 阅读3分钟

BERT的结构

BERT是由多层双向的transformer编码器组成的。
input会经过token embedding,positional embedding和segment embedding,用来表示输入的每个词及其位置和句子区分。 与transformer不同的是,BERT新加入了segment embedding的部分,用于区别句子对任务中的不同句子,适用于更复杂的任务。而transformer中没有这项技术,因为他设计初衷是用于单一序列任务。 image.png

BERT的三部分embedding为什么是相加而不是concat

相加操作可以固定维度,如果使用concat,会导致维度变得很大,计算复杂度会增加。
使用相加操作可以融合不同类型的特征,每个维度都可以包含词嵌入、位置嵌入和分段嵌入的信息。提高模型理解能力

Pre-train BERT

在预训练BERT的过程中,使用了两个无监督任务进行预训练,分别是Masked LM和Next sentence prediction(NSP).
为了训练BERT模型,15%的input token被掩蔽掉。将他们替换为[mask]标记。模型会试图基于上下文来预测被掩盖的单词是什么。
之后,又进行了NSP任务的预训练,简单来说,给模型一个句子对,让模型去判断B句子是否是A句子的下一个句子,又或者他只是语料库中一个随机的句子.

Masked LM的缺点

会造成pre-train和fine-tuning的不匹配.因为[mask]标记不会在fine-tuning阶段出现。另外,固定的掩蔽比例在不同的任务上缺乏灵活性,不一定是最优解。

BERT参数量

  • 隐藏层维度:H
  • 注意力头数:A
  • 前馈神经网络中间层维度:4H
  • Transformer编码器层数:L
  • 词汇表大小:V
  • 最大序列长度:S

token embedding

token embedding将每个token映射到H维的向量;词汇表大小为V,所以参数量为VHV*H

position embedding

position embedding编码token的位置信息,最大序列长度为S,所以参数量为SHS*H

segment embedding

segment embedding用于区分不同的句子,通常只有两种类型(0和1),因此参数量为2H2*H

多头注意力机制

每个注意力头的参数包括:WQW_Q,WKW_K,WVW_V 每个矩阵的维度为HHAH* \frac{H}{A},所以每个注意力头的参数量为3(HHA)3*(H*\frac{H}{A}) 总共有A个注意力头,所以多头注意力机制总参数量为A×3×(H×HA)=3H2A×3×(H×\frac{H}{A})=3H^2
另外,多头自注意力机制的总参数量还有一个输出投影矩阵WOW_O,其维度为HHH*H
所以多头自注意力总参数量为4H24H^2

前馈神经网络

FFN由两个全连接层组成
第一层将输入从H维映射到4H维,参数量为:H4H=4H2H*4H=4H^2
第二层将输入从4H映射回H维,参数量为:4HH=4H24H*H=4H^2
因此,FFN层总参数量为8H28H^2

层归一化

层归一化的参数量较小,主要包括两个可学习的参数,每个参数的维度为H,因此每层的层归一化参数量为:2H2H

总结

整个BERT模型的参数量=embeddings参数量+L*每层参数量

BERT中的[CLS]有什么用

[CLS]主要用于下游的分类任务。相比于文本序列中的其他词,[CLS]没有明显的语义信息,它可以更公平地融合文本中各个词的语义信息,从而更好表示整句话的含义。

BERT模型的优缺点有哪些

优点:

  • BERT模型使用了双向transformer结构,可以应对各种自然语言处理任务

缺点:

  • BERT的预训练任务主要是MLM和NSP,这些任务可能无法捕捉复杂的语言现象
  • 需要与其他模型结合才能用于生成任务