1.1 认识BERT
- 定义: 实质就是Transformer的encoder部分
- 表现: 在阅读理解上会有更好的表现.
- BERT分为三个模块
- 最底层: Embedding
- token embeding
- Segment embeding 句子分段嵌入向量
- position embeding
- 中间层: Transformer
- 只是用了encoder部分
- 最上层: 预微调模块
- 句子对关系的判断
- 单文本的主题分类
- QA问题模型 start end
- 句子贴标签(NER命名实体识别任务)
- BERT预训练任务
- 任务一: MLM(带有mask的LM)
- 随机选取15%token进行mask的训练任务
- 80%进行mask
- 10%进行token的替换
- 10%是原有的token
- 任务二: NSP(下一句预测任务)
- 50%是真实的下一句话 IsNext
- 50%是随机抽取的下一句话 notNext
1.2 Transformer的结构是什么样的? 各个子模块各有什么作用?
- 输入部分
- 编码器部分
- 多头自注意力机制
- 前馈全连接层
- 解码器部分
- 多头自注意力机制层(带有mask)
- 多头注意力层
- 前馈全连接层
- 输出部分
1.3 Transformer结构中的Decoder端具体输入是什么? 在训练阶段和预测阶段一致吗?
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-m9yJcEzR-1648561301352)(img/image-20220212151844243.png)]
- Decoder端的训练
- 使用了mask去模拟时间步的概念
- decoder端的预测
- sos —> Sos how —> sos how are ….
1.4 Transformer中一直强调的self-attention是什么? 为什么能发挥如此大的作用? 计算的时候如果不使用三元组(Q, K, V), 而仅仅使用(Q, V)或者(K, V)或者(V)行不行?
- Self-attention: 自注意力机制
- (QKV)目前为止数学意义更加完备,
1.5 Transformer为什么需要进行Multi-head Attention? Multi-head Attention的计算过程是什么?
- 原因: 进行多头是为了划分多个子空间, 让模型关注不同方面的语义维度, 提升模型的效果
- 计算过程
- embedding_dim维度进行分割—> 有多少个头
- 计算完成之后还需要进行concat操作, 将语义进行融合.
1.6 Transformer相比于RNN/LSTM有什么优势? 为什么?
- Transformer优点: 第一: 并行运算的能力 第二: 特征提取的能力强
1.7 为什么说Transformer可以代替基于传统模型的seq2seq架构?
- seq2seq缺点:
- 中间语义张量是固定, 信息损耗多
- 不能并行
- Transformer:
- 根据不同的步骤, 提取更完备的语义信息
- 并行计算
1.8 self-attention公式中的归一化有什么作用? 为什么要添加scaled?[难点]
- q * k 之后的结果会变大, softmax之后的梯度会变的非常小, 以至于可能照成梯度消失
- 为了防止梯度消失, 要在q * K 之后除以根号d_k
1.9 Transformer架构的并行化是如何进行的? 具体体现在哪里?
- encoder部分 训练过程和预测过程并行化是一样的
- embedding层, feed forward层, norm和add是实现正真意义上的并行
- self-attention层实现的是数据技巧上的并行化运算[矩阵运算]
- decoder部分
- 训练过程 并行化同encoder部分一样
- 预测过程 不能并行化[需要有时间步类似的过程]
1.10 BERT模型的优点和缺点?
- 优点;
- 并行化计算
- 可以使用双向的深度计算 self-attention
- 缺点:
- 模型大, 参数多 12层 768维度 12头 / 24层 1024维度 16头
- mask在训练阶段出现, 但是在预测阶段不出现, 会造成信息出现偏差
- bert收敛速度比较慢
1.11 BERT的MLM任务中为什么采用了80%, 10%, 10%的策略?
- mask如果在训练阶段是100的出现,会造成部分语义空间的消失, 为了防止这种情况的出现,调整策略选用80% 10% 10%
1.12 长文本预测任务如果想用BERT来实现, 要如何构造训练样本?
- 处理文本的长度是512个, 但是需要留出头和尾各一个, 所以正真处理的是510个
- 方式:
- 第一种方式就是只保留前面510个token.
- 第二种方式就是只保留后面510个token.
- 第三种方式就是前后分别保留一部分token, 总数是510.