赞
踩
2018年google AI组发表的一篇文章BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding在多个自然语言处理问题上取得了很大的提升。
BERT是一个迁移学习模型,在双向深度网络Transformer (https://arxiv.org/pdf/1706.03762.pdf )的基础上做多任务学习(MLM和下个句子预测),得到预训练模型,然后在模型的最后添加一层迁移到具体的任务上去。
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 数量
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层用来区分单词在序列中的位置,是第几个单词。
举个例子,假设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这些都是通过参数学出来的。
(1)MLM:masked language model,在每一轮迭代中随机选择15%的词隐藏,目标是通过它们的上下文来预测这些单词,这些词对应的最后一个隐单元向量后接一个softmax来预测这个词;( 通常多层双向网络会让单词间接的看到自己,MLM避免了这个问题)。
需要注意的是:
(2)Next Sentence Prediction:预测第二个句子是否可以自然的接在第一个句子后面,是个二分类问题,用于理解句子间的关系。
训练语料的构建:每个输入包括A和B两个句子,50% B是A的下一句,50% B不是A的下一句(从语料中随机选出来的B);
最后的二分类预测准确率大约在97%—98%。
语训练过程是把把这两个任务的损失函数相加,同时学习这两个任务。
BERTbase 16块TPU芯片 4天完成训练
BERTlarge 64快TPU芯片4天完成训练
把预训练好的BERT模型用到其他任务上,例如文本分类,QA等。大部分参数都和训练时保持一致,部分参数需要根据任务调整:
• Batch size: 16, 32
• Learning rate (Adam): 5e-5, 3e-5, 2e-5
在分类任务上,用第一个单词 [CLS] 对应的最终隐单元状态 C,使用softmax进行类别预测 softmax(CW)。调整BERT的参数和W来最小化类别预测损失函数。
SQuAD:输入:A—问题,B—文章,在文章中寻找一段文字来回答问题。增加两个参数,start-vector S,end-vector E,求概率最大的起始词和结束词
CoNLL-2003 NER:每个单词对应的最终隐单元输出都对应一个分类器
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。