BERT模型实战1
BERT 模型实战 1 本资源主要介绍了 BERT 模型的基本组成和实现细节,涵盖了自注意机制、多头机制、位置信息表达、LayerNormalize、Decoder 和训练 BERT 等方面。 BERT 基本组成 BERT 模型的基本组成是一个 Seq2Seq 网络,输入和输出都为序列的网络,中间为 Transformer。传统的 RNN 网络每个循环体都需要上一个循环体的中间结果,无法并行运算(不独立),因此采用 Self-Attention 机制并行计算,取代 RNN。 Self-Attention 机制 Self-Attention 机制可以在不同的语境下赋予不同的词不同的权重。该机制通过词->向量编码 x1->权重向量编码 z1,将输入词向量分别与三个矩阵(权重)Wq、Wk、Wv 进行运算,然后用 softmax 进行归一化,求得每个词在当前句子中的权重(影响程度)。 Multi-headed 机制 Multi-headed 机制可以提取多种词向量特征。通过多个头机制(一般 8 个),得到多个特征表达,然后将所有特征拼接起来,再加一层全连接来降维。 位置信息表达 位置信息表达是相对于上述得到的词特征向量再加上位置信息编码,一般是周期信号(正余弦等)。 LayerNormalize LayerNormalize 是对每个词的所有特征进行归一化处理(区别于对每批数据进行归一化),以使得训练更快,更稳定。 连接 连接是层归一化的同时,加入残差连接。 Decoder Decoder 相对于 Encoder,Self-Attention 计算不同(用 q 来查),加入了 MASK 机制。 训练 BERT 训练 BERT 是将句子中 15%(替换为 mask,随机变为其他词或不变)的词随机 mask 掉,让模型去预测被 mask 的是什么;预测两个句子是否应该连在一起([seq]连接符,[cls]分类向量)。 源代码解析 源代码解析包括准备数据、创建模型两个部分。 准备数据 准备数据包括根据数据生成 tf_record 数据文件,添加标签列表,进行 wordpiece 分词,加入起始和分割等特殊标记,查询每个词的 id 来生成 input_ids,设置对应的 input_mask 并补全,构建 feature 样本并序列化保存。 创建模型 创建模型包括构建 embedding 层、输入查询 input_ids,在词表中对应的编码,得到词嵌入编码,加入层归一化和 dropout,构建 Transformer(encoder),将 2D mask 变为 3D attention mask,表示每个序列的每个词应该和该序列的哪个词计算。