前言
1.Bert使用Transformer的Encoder
2.预训练包括masked lamngluage modeling和next sentence classification 2个任务
3.强大且开源
1.模型结构,对照pytorch实现
1.BertModel继承自BertPreTrainedModel,父类包括不同种类的权重和偏置的初始化函数以及模型加载函数。
2.BertModel实施Embedding、Encoder、取Encoder的最后一层进行BertPooler,可选择输出Encoder的最后一层或全部,此外还输出Pooler的结果。
3.Embedding模块将input_ids、position_ids、token_type_ids分别进行nn.Embedding变换,3个输出矩阵相加后进行层归一化和dropout后输出。其中position_ids初始化为位置编号(0,1,…);token_type_ids为段号(segment_ids),当输入为两个句子时,以0/1区分,否则该字段为0.
4.Encoder模块由若干个相同BertLayer模块串联组成,由bool型参数output_all_encoded_layers控制输出所有模块的输出列表或仅输出尾模块的结果。
5.BertLayer模块包括BertAttention、BertIntermediate、BertOutput三个步骤。
6.BertAttention包括BertSelfAttention、BertSelfOutput。
7.BertSelfAttention中几处实现细节:1)通过nn.Linear(hidden_state)得到q、k、v;2)使用4维向量的计算和变换实现muti_head;3)句长掩码的值为0/-10000.,通过与score相加实现。
8.BertSelfOutput包括一个等形的线性变换【多头合并之后,线性变换】及dropout、残差连接后进行层归一化。
9.BertIntermediate包括一个线性变换(输入维度为hidden_size即768,输出维度为intermediate_size即3072=768*4)和非线性激活。
10.BertOutput 包括一个线性变换(输入维度为768*4,输出维度为768)及dropout,残差连接后进行层归一化。
11.BertPooler模块取隐藏状态hidden_states的第一个时间步(其size为[batch_size,hidden_size]),经过输出维度同为hidden_size的线性变换,经tanh非线性激活函数后输出。
2.预训练
参考 1.3预训练任务
3.预训练权重
Bert提供7种预训练好的模型文件:
-Base 12-layer,768-hidden,12-heads,110M parameters
-Large 24-layer,1024-hidden,16-heads,340Mparameters
-Uncased 不区分大小写,NER任务尤其需要不区分大小写
-Cased 区分大小写
以上组合共4种,
此外base还包括与 -multilingual 多语言 组合的2种,以及-Chineae 1种。
PRETRAINED_MODEL_ARCHIVE_MAP = {
'bert-base-uncased': "https://s3.amazonaws.com/models.huggingface.co/bert/bert-base-uncased.tar.gz",
'bert-large-uncased': "https://s3.amazonaws.com/models.huggingface.co/bert/bert-large-uncased.tar.gz",
'bert-base-cased': "https://s3.amazonaws.com/models.huggingface.co/bert/bert-base-cased.tar.gz",
'bert-large-cased': "https://s3.amazonaws.com/models.huggingface.co/bert/bert-large-cased.tar.gz",
'bert-base-multilingual-uncased': "https://s3.amazonaws.com/models.huggingface.co/bert/bert-base-multilingual-uncased.tar.gz",
'bert-base-multilingual-cased': "https://s3.amazonaws.com/models.huggingface.co/bert/bert-base-multilingual-cased.tar.gz",
'bert-base-chinese': "https://s3.amazonaws.com/models.huggingface.co/bert/bert-base-chinese.tar.gz",
}
4.几种预训练语言模型
1.CBOW:词袋模型,上下文,无位置信息
2.GPT:Transformer的Decoder,上文
3.Bert:Transformer的Encoder,上下文
4.ELMo:BiLSTM,上文和下文