学习 | BERT模型结构

前言

1.Bert使用Transformer的Encoder

2.预训练包括masked lamngluage modeling和next sentence classification 2个任务

3.强大且开源

1.模型结构,对照pytorch实现

1.BertModel继承自BertPreTrainedModel,父类包括不同种类的权重和偏置的初始化函数以及模型加载函数。

2.BertModel实施EmbeddingEncoder、取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模块包括BertAttentionBertIntermediateBertOutput三个步骤。

6.BertAttention包括BertSelfAttentionBertSelfOutput

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,输出维度为intermediate_size)和非线性激活

10.BertOutput 包括一个线性变换(输入维度为intermediate_size,输出维度为hidden_size)及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,上文和下文

你可能感兴趣的:(学习 | BERT模型结构)