Bert说明
1 模型结构
1.1 说明
-
Bert的结构 = Embedding层 + transformer encoder层 x N个
-
Bert的输入文本序列,根据具体任务不同,即可以是一句话,也可以是两句话,下文以两句话为例进行说明。两句话的文本结构如下:[CLS] + 上句 + [SEP] + 下句 + [SEP] 。
-
Bert的特殊token
- [CLS] 分类token,输入序列的第一个token,起分类作用
- [SEP] 标明上句或下句结束的token
- [MASK] 被遮住的token
-
超参数说明
- V 词袋长度,即词的个数
- L 最大序列长度,[CLS] + 上句 + [SEP] + 下句 + [SEP] 的最大长度
- E Embedding维度,即一个token用E维向量表示,也等于transformer encoder层的隐层维度
- F feedforward全连接层的维度
- H multi-head的head个数
- M transformer encoder层的个数
-
为方便,下文不考虑batch_size,只以1个输入序列为例进行说明,且该序列的长度即等于最大序列长度L。该序列用X表示。同时,也不考虑激活函数层和dropout层。
1.2 Embedding层
-
任何一个token的embedding向量 = word embedding + segment embedding + position embedding
- word embedding : 词汇表里的每一个词对应一个向量,即上图的Token embedding。矩阵的大小 (V, E)
- segment embedding : 上句或下句对应一个向量。矩阵的大小 (2, E)
- position embedding : 输入序列里的每一个位置对应一个向量。矩阵的大小 (L, E)
-
经过Embedding层,X大小由(L) 变为 (L, E)
1.3 transformer encoder层
- 由self-attention层 + feedforward层 + add&norm层构成
- multi-head的每个head平均处理 E/H 个维度,每个head的处理结果再拼接起来,经过add&norm层,再传给feed-forward层,再经过add&norm层输出给下一个encoder层。
- 最后一个encoder层的输出即bert的输出。
1.3.1 self-attention层
-
每个head经由3个全连接层,输入X,生成Q, K, V,即。
- Q = Linear(X) Q的大小(L, E/H)
- K = Linear(X) K的大小(L, E/H)
- V = Linear(X) V的大小(L, E/H)
-
s o f t m a x ( Q K T