Bert:Bidirectional Encoder Representation from Transformers(深度双向预训练Transformer)
Bert是基于Transfomer的深度双向语言表征模型,利用了Transformer结构构造了一个多层双向的Encoder网络。主要特征是所有层都结合上下文语境进行预训练。
OpenAI GPT:采用的是Transformer的Decoder,每个时刻的计算只能依据前面时刻输入的监督型单向语言模型。
ELMO:采用的是LSTM,采用的是门限技术,控制记忆门和遗忘门,这个模型可以学习到语言前后的语义,但是输出依赖于前面的输入,决定了ELMO的网络层数不会太多,会造成大量耗时,决定了提取的特征有限。
Pre-Training:Bert基于Transformer的深度双向语言表征能力的Encoder网络,一次性读取整个文本序列,结合上下文预训练一个大量数据集,构成一个预训练的通用模型
Fine-tuning:Bert是一个用Transformer的Encoder层作为特征提取器的深度双向预训练的语言模型。这是通过google词汇预训练的一个无监督模型;是一个通用模型,在完成训练后,通过特定的下游任务,加上线性叠加层和softmax进行分类、翻译、问答等监督任务;
Bert预训练
Bert的输入相比较其它模型,采用了三个Embedding相加的方式:
bert中的三个embedding主要包括:词的Embedding(Token Embedding),位置Embedding(表示每个词的相对位置或绝对位置),句子Embedding(表示这个词所在的句子位置),将三个Embedding求和之后传输到下一层。
Token Embeddings
- 针对单个字符构成为本的细粒度Token Embeddings,在输入句子进行embedding之前,需要先将两个特殊字符:开头[cls]和结尾[sep]加入到句子中
- bert在处理英文文本时只需要30522个词,Token Embeddings层会将每个词转换为786维的向量;
Segment Embedding
- bert处理句子对的分类任务时,判断两个句子的依据
- segement层有两种向量表示,前一个向量把0赋值给第一个句子的每个Token,后一个向量把1复制给每个Token。问答系统任务是要预测下一个句子,因此输入的是关联的句子对。分类只有一个句子,segment embeddings全部就为0
Position Embedding
- 在Transformer的encoder中,只是考虑了词意,不考虑位置信号,同一个词在不同的句子位置中表现的意义不相同,但是encoder过程中向量包含的意思相同,为了避免这种情况,因此需要对每个词向量中加入位置信息(相对位置和绝对位置),保证不同位置的相同词含义不相同
注:BERT的最长序列是512个Token,长度超过512会被截取,模型的输入是将Token Embeddings + Segment Embeddings + Position Embeddings 求和得到的一个Embeddings作为模型的输入。
Bert中预训练的两个任务:
任务一: Masked language Model-随机遮住部分的Token,模型通过上下文去预测这个masked的词,通过调整模型参数使得预测的正确率尽可能大;
任务二: 在数据集中抽取两个句子A和B,以及负采样的方法采集其他句子,判断B是否是A的下一句;