Datawhale八月学习-NLP专题-BERT和GPT

一、 BERT

1. 什么是BERT

1)BERT简介:

    BERT与现有语言模型不同的是,BERT旨在通过调节所有层中的上下文来进行深度双向的预训练。因此,预训练的BERT表示可以通过另外的输出层进行调整,以创建用于广泛任务的状态模型,例如问题转换和语言参考,而无需实质的任务特定体系结构修改。
    BERT全称是“Bidirectional Encoder Representation from Transformers“,即双向Transformer解码器。是一种NLP领域的龙骨模型,用来提取各类任务的基础特征,即作为预训练模型为下游NLP任务提供帮助。

2)BERT的创新点

    BERT并没有过多的结构上的创新点,BERT依然采用的是transformer的结构。BERT模型有四大关键词:预训练,深度,双向转换,语言理解

  • 预训练: BERT是通过在无标注的数据上进行训练的预训练模型,所以泛化能力较强。BERT的预训练过程包含两个任务一个是Masked Language Model,还有一个是Next Sentence Prediction。
  • 深度: 最开始官网给了两个版本Base和Large两个版本的BERT模型,供所有人使用
      Base:版本Layer = 12, Hidden = 768, Head = 12, Total Parameters = 110M
      Large版本:Layer = 24, Hidden = 1024, Head = 16, Total Parameters = 340M
      对比于原始论文的Transformer: Layer = 6, Hidden = 2048, Head = 8,可以看出Bert是一个深而窄的模型,效果更好。但是由于transformer的残差(residual)模块,层数并不会引起梯度消失等问题,但是并不代表层数越多效果越好,有论点认为低层偏向于语法特征学习,高层偏向于语义特征学习。
  • 双向转换: BERT的模型架构基于多层双向转换解码。Bert直接引用了Transformer架构中的Encoder模块,并舍弃了Decoder模块, 这样便自动拥有了双向编码能力和强大的特征提取能力。“双向”表示模型在处理某一个词时,它能同时利用前面的词和后面的词两部分信息。“双向”的训练方式为随机遮蔽输入词块的某些部分,然后仅预测那些被遮蔽词块。我们将这个过程称为“遮蔽LM”(MLM)
  • 语言理解: 更加侧重语言的理解,而不仅仅是生成(Language Generation)

2. BERT的预训练过程

1)Masked Language Model ( MLM,带mask的单词级别语言模型训练 )

    MLM类似完形填空,文章作者在一句话中随机选择 15% 的词汇用于预测。对随机Mask处理的单词,用非监督学习的方法去预测mask位置的词。对于在原句中被抹去的词汇, 80% 情况下采用一个特殊符号 [MASK] 替换, 10% 情况下采用一个任意词替换,剩余 10% 情况下保持原词汇不变。

实际操作

在BERT中, Masked LM(Masked language Model)构建了语言模型, 这也是BERT的预训练中任务之一, 简单来说, 就是随机遮盖或替换一句话里面任意字或词, 然后让模型通过上下文的理解预测那一个被遮盖或替换的部分, 之后做 L o s s Loss Loss的时候只计算被遮盖部分的 L o s s Loss Loss, 其实是一个很容易理解的任务, 实际操作方式如下:

  1. 随机把一句话中 15 % 15 \% 15% t o k e n token token替换成以下内容:
    1) 这些 t o k e n token token有$80 % 的 几 率 被 替 换 成 的几率被替换成 [mask]$;
    2) 有 10 % 10 \% 10%的几率被替换成任意一个其他的 t o k e n token token;
    3) 有 10 % 10 \% 10%的几率原封不动.
  2. 之后让模型预测和还原被遮盖掉或替换掉的部分, 模型最终输出的隐藏层的计算结果的维度是:
    X h i d d e n : [ b a t c h _ s i z e ,   s e q _ l e n ,   e m b e d d i n g _ d i m ] X_{hidden}: [batch\_size, \ seq\_len, \ embedding\_dim] Xhidden:[batch_size, seq_len, embedding_dim]
    我们初始化一个映射层的权重 W v o c a b W_{vocab} Wvocab:
    W v o c a b : [ e m b e d d i n g _ d i m ,   v o c a b _ s i z e ] W_{vocab}: [embedding\_dim, \ vocab\_size] Wvocab:[embedding_dim, vocab_size]
    我们用 W v o c a b W_{vocab} Wvocab

你可能感兴趣的:(NLP学习,机器学习)