目录
4. 位置信息表达——Positional Encoding
5.2 Layer Normalization 和 Batch Normalization 对比
一、概述
Bert——自然语言处理通用解决方案
- 需要熟悉word2vec,RNN网络模型,了解词向量如何建模
- 重点在于Transformer网络架构,BERT训练方法,实际应用
- 开源项目,都是现成的,套用进去就OK
- 提供预训练模型,基本任务拿过来直接用即可
二、Transformer和RNN
1. Transformer要做什么事?
- 基本组成依旧是机器翻译模型中常见的Seq2Seq网络
- 输入输出都很直观,其核心架构就是中间的网络设计了
2. 传统的RNN网络和Transformer
- 计算时有什么问题?
不能并行计算
- Self-Attention机制来进行并行计算,在输入和输出都相同
- 输出结果是同时被计算出来的,现在基本已经取代RNN了
3. 传统的word2vec
- 表示向量时有什么问题?答:预训练好的向量就永久不变了
- 如果‘干哈那’是一个词,不同语境中相同的词表达的含义不同
三、Transformer
- 输入如何编码?
- 输出结果是什么?
- Attention的目的?
- 怎样组合在一起?
1. Attention
- 对于输入的数据,你的关注点是什么?
- 如何才能让计算机关注到这些有价值的信息?
1.1 self-attention是什么
1.2 self-attention如何计算
- 输入经过编码后得到的向量
- 想得到当前词与上下文的关系,可以当作是加权
- 构建三个矩阵分别来查询当前词跟其他词的关系,以及特征向量的表达
三个需要训练的矩阵
- Q: query,要去查询的
- K: key,等着被查的
- V: value,实际的特征信息
q与k的内积表示有多匹配
- 输入两个词向量得到一个数值
- 得到的数值经过softmax就是最终上下文结果
- Scaled Dot-Product Attention,不能让分值随着向量维度的增大而增加
softmax回忆:
1.3 每个词的Attention计算
每个词的Q会跟整个序列中每一个K计算得分,然后基于得分再分配特征(乘V矩阵)
1.4 Attention整体计算流程
- 每个词的Q会跟每一个K计算得分
- Softmax后就得到整个加权结果
- 此时每个词看的不只是它前面的序列,而是整个输入序列
- 同一时间计算出所有词的表示结果(矩阵乘法)
例:一个句子中第一个词的q和其他词的k相乘并经过softmax的结果分别为0.13,0.21,0.53,0.13,则第一个词的self-attention(z1) = 0.13v1 + 0.21v2 + 0.53v3 + 0.13v4
2. multi-headed机制
- 一组q,k,v得到了一组当前词的特征表达
- 类似卷积神经网络中的filter,能不能提取多种特征呢?
- 卷积中的特征图:
- 通过不同的head得到多个特征表达
- 将所有特征拼接在一起
- 可以通过再一层全连接来降维
2.1 multi-headed机制图解(1)
2.2 multi-headed机制图解(2)
例:以两个head为例,将上面Scaled Dot-Product Attention中的q拆分为q1和q2(WQ拆分为WQ1和WQ2,WQ1*X=q1,WQ2*X=q2)。qi,1必须和ki,1或kj,1相乘最后乘以vi,1或vj,1,qi,2必须和ki,2或kj,2相乘最后乘以vi,2或vj,2。
也就是说,一句话中某个词的第1个head的q必须和其他词第1个head的k相乘,不能第1个head的q和其他词第2个head的k相乘。
2.3 multi-headed结果
- 不同的注意力结果
- 得到的特征向量表达也不相同
3. encoder堆叠多层
- 一层是不够的,多层为了提取高维特征
- 每层计算方法都是相同的
4. 位置信息表达——Positional Encoding
在self-attention中每个词都会考虑整个序列的加权,所以其出现位置并不会对结果产生什么影响,相当于放哪都无所谓,但是这跟实际就有些不符合了,我们希望模型能对位置有额外的认识。
Positional Encoding 公式
i 代表的是当前的维度,pos 代表的是当前的位置。
例:词向量维度为128,pos=3 即第3个词的 Positional Encoding:
5. Add与Normalize
5.1 Layer Normalization
归一化:让某一层的均值为0,标准差为1
5.2 Layer Normalization 和 Batch Normalization 对比
5.3 连接:基本的残差连接方式
5.4 Encoder整体架构
6. Decoder
- Attention计算不同
- 加入了MASK机制
7. 最终输出结果
- 得出最终预测结果
- 损失函数 cross-entropy即可
8. 整体梳理
- Self-Attention
- Multi-Head
- 多层堆叠,Positional Encoding
- 并行加速训练
9. 效果展示
两个句子中,it 和 animal 、street 的self- attention 值最大,即 it 分别指代 animal 和 street
四、BERT
1. BERT训练的词向量有什么不同
这里的词向量值 encoder 最终的输出 r 矩阵
- 在word2vec中,相同词对应的向量训练好后就固定了
- 但在不同的场景中,‘干哈呢’的意思会相同吗?
- encoder和decoder都叫transformer
2. BERT名词解释
- Bidirectional Encoder Representations from Transformers
- 说白了就是transformer的encoder部分
- 并不需要标签,有语料就能训练了
3. 如何训练BERT
方法1:
- 句子中有15%的词汇被随机mask掉
- 交给模型去预测被mask的家伙到底是什么
- 词语的可能性太多了,中文一般是字
- 如果BERT训练的向量好,那分类自然OK
方法2:
- 预测两个句子是否应该连在一起
- [seq]:两个句子之前的连接符,[cls]:表示要做分类的向量