当前位置:   article > 正文

深度学习迁移模型BERT详解

迁移模型

2018年google AI组发表的一篇文章BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding在多个自然语言处理问题上取得了很大的提升。

      BERT是一个迁移学习模型,在双向深度网络Transformer (https://arxiv.org/pdf/1706.03762.pdf )的基础上做多任务学习(MLM和下个句子预测),得到预训练模型,然后在模型的最后添加一层迁移到具体的任务上去。

1、总体架构

BERT总体结构
BERT的结构类似于 OpenAI GPT,主要的区别在于BERT用了Transformer,Transformer的双向self-attention可以同时考虑左右两边的上下文信息,而GPT只用了单词(或字符)左边的上下文信息。
      Google团队设计了两个BERT模型,分别是 B E R T B A S E BERT_{BASE} BERTBASE B E R T L A R G E BERT_{LARGE} BERTLARGE。L:Transformer层数, H:隐单元个数, A:self-attention heads 数量

  • B E R T B A S E BERT_{BASE} BERTBASE: L=12, H=768, A=12, 模型大小110M
  • B E R T L A R G E BERT_{LARGE} BERTLARGE: L=24, H=1024, A=16, 模型大小340M

2、模型输入

BERT输入
      BERT模型的输入可以是单个句子(例如分类任务)或者句子对(例如QA任务)。如上图输入两个句子“My dog is cute”、“he likes play”,BERT模型构建三个层Token 层、Segment层、Position层,这三个层的值相加作为Transformer的输入。Token层是单词的词向量嵌入;Segment层用来区分单词属于哪个句子,属于第一个句子就用向量 E A E_A EA,属于第二个句子就用向量 E B E_B EB。Position层用来区分单词在序列中的位置,是第几个单词。

  • 序列长度最长512个单词。
  • [CLS] 起始位置,如果是分类任务,则用这个标志对应的最终输出隐状态做分类;对于非分类任务,没有特殊的作用,可以忽略。
  • 句子对放在同一个序列里,使用 [SEP] 标志分隔,另外还加上 E A E_A EA E B E_B EB 进行区分。第一个句子的词都加上 E A E_A EA 向量,第二个句子的词都加上 E B E_B EB 向量。
  • 如果输入是单个句子,则不使用 E B E_B EB 向量。

      举个例子,假设Token层是1维[0,1]之间的向量,Segment层 E A E_A EA等于10000, E B E_B EB等于20000, E 0 E_0 E0 E 1 E_1 E1 E 2 E_2 E2分别是0,10,20,那么最后加起来“my”对应的输入值是1000+10+[0,1]之间某个数,“he”对应的值是20000+60+[0,1]之间某个数,那么在后面的建模中模型可以根据数值来区分这个单词是在第一句还是第二句,是在第几个单词。这就在输入中嵌入了句子和位置信息,当然在实际中, E A E_A EA E B E_B EB E 0 E_0 E0 E 1 E_1 E1 E 2 E_2 E2这些都是通过参数学出来的。

3、预训练任务

(1)MLM:masked language model,在每一轮迭代中随机选择15%的词隐藏,目标是通过它们的上下文来预测这些单词,这些词对应的最后一个隐单元向量后接一个softmax来预测这个词;( 通常多层双向网络会让单词间接的看到自己,MLM避免了这个问题)。
需要注意的是:

  • 使用 [MASK] 标志是的预训练和finetune不匹配,因为finetune的时候是不会出现 [MASK] 这个单词的。
    解决方法:80%的情况使用 [MASK] 标志,10%的情况随机选择单词单词,10%的情况用原词填入;
  • 每个batch只有15%的单词是需要预测的,所以需要更多的迭代轮数来达到收敛,比left-to-right模型收敛要慢,但效果提升值得付出这样的开销。

(2)Next Sentence Prediction:预测第二个句子是否可以自然的接在第一个句子后面,是个二分类问题,用于理解句子间的关系。
训练语料的构建:每个输入包括A和B两个句子,50% B是A的下一句,50% B不是A的下一句(从语料中随机选出来的B);
最后的二分类预测准确率大约在97%—98%。

语训练过程是把把这两个任务的损失函数相加,同时学习这两个任务。

4、预训练

  • 语料:BooksCorpus 800M单词,English Wikipedia 2500M单词
    选取A和B的组合(50%是连续句子,50%不是连续句子),单词个数不超过512。随机选取15%的单词隐藏。做Multi-task训练。
  • 每个batch 256个序列,需要1000000次迭代;
  • Adam 0.0001学习率, β 1 \beta_1 β1=0.9, β 2 \beta_2 β2=0.99,前10000步学习率保持不变,然后线性减小;
  • 所有层dropout=0.1,激活函数gelu
  • 损失函数:MLM 似然 + Next Sentence Prediction 似然

BERTbase 16块TPU芯片 4天完成训练
BERTlarge 64快TPU芯片4天完成训练

5、迁移学习

      把预训练好的BERT模型用到其他任务上,例如文本分类,QA等。大部分参数都和训练时保持一致,部分参数需要根据任务调整:
• Batch size: 16, 32
• Learning rate (Adam): 5e-5, 3e-5, 2e-5

(1)分类任务

分类任务
在分类任务上,用第一个单词 [CLS] 对应的最终隐单元状态 C,使用softmax进行类别预测 softmax(CW)。调整BERT的参数和W来最小化类别预测损失函数。

(2)QA和NER

QA和NER

SQuAD:输入:A—问题,B—文章,在文章中寻找一段文字来回答问题。增加两个参数,start-vector S,end-vector E,求概率最大的起始词和结束词
在这里插入图片描述
CoNLL-2003 NER:每个单词对应的最终隐单元输出都对应一个分类器

参考:

https://arxiv.org/pdf/1810.04805.pdf

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/代码探险家/article/detail/857202
推荐阅读
相关标签
  

闽ICP备14008679号