BERT的结构
BERT是由多层双向的transformer编码器组成的。
input会经过token embedding,positional embedding和segment embedding,用来表示输入的每个词及其位置和句子区分。
与transformer不同的是,BERT新加入了segment embedding的部分,用于区别句子对任务中的不同句子,适用于更复杂的任务。而transformer中没有这项技术,因为他设计初衷是用于单一序列任务。
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,所以参数量为
position embedding
position embedding编码token的位置信息,最大序列长度为S,所以参数量为
segment embedding
segment embedding用于区分不同的句子,通常只有两种类型(0和1),因此参数量为
多头注意力机制
每个注意力头的参数包括:,,
每个矩阵的维度为,所以每个注意力头的参数量为
总共有A个注意力头,所以多头注意力机制总参数量为
另外,多头自注意力机制的总参数量还有一个输出投影矩阵,其维度为
所以多头自注意力总参数量为
前馈神经网络
FFN由两个全连接层组成
第一层将输入从H维映射到4H维,参数量为:
第二层将输入从4H映射回H维,参数量为:
因此,FFN层总参数量为
层归一化
层归一化的参数量较小,主要包括两个可学习的参数,每个参数的维度为H,因此每层的层归一化参数量为:
总结
整个BERT模型的参数量=embeddings参数量+L*每层参数量
BERT中的[CLS]有什么用
[CLS]主要用于下游的分类任务。相比于文本序列中的其他词,[CLS]没有明显的语义信息,它可以更公平地融合文本中各个词的语义信息,从而更好表示整句话的含义。
BERT模型的优缺点有哪些
优点:
- BERT模型使用了双向transformer结构,可以应对各种自然语言处理任务
缺点:
- BERT的预训练任务主要是MLM和NSP,这些任务可能无法捕捉复杂的语言现象
- 需要与其他模型结合才能用于生成任务