什么是BERT?
BERT(Bidirectional Encoder Representations from Transformer)源自论文Google2018年的论文”Pre-training of Deep bidirectional Transformers for Language Understanding“,其前身是Google在2017年推出的transormfer模型。
核心点为:
1.预训练
2.双向的编码表征
3.深度的Transformer
4.以语言模型为训练目标
BERT的两个任务
1.语言模型,根据词的上下文预测这个词是什么
2.下一句话预测(NSP)模型接收成对的句子作为输入,并学习预测该对中的第二个句子是否是原始文档中的后续句子
双向attention
在之前常见的attention结构都是单向的attention,顺序的从左到右,而借鉴Bi_LSTM和LSTM的关系,如果能将attention改为双向不是更好吗?
将attention改为双向遇到的最大问题就是深度的增加导致信息泄露问题,如下图:
解决该问题主要的解决方案有两种:
1.多层单向RNN,独立建模(ELMo)。前项后项信息不公用,分别为两个网络
2.Mask ML(BERT采用)
解决的问题:多层的self-attention信息泄漏问题
随机mask语料中15%的token,然后将masked token 位置输出的最终隐层向量送入softmax,来预测masked token。
在训练过程中作者随机mask 15%的token,而不是把像cbow一样把每个词都预测一遍。最终的损失函数只计算被mask掉那个token。
Mask如何做也是有技巧的,如果一直用标记[MASK]代替(在实际预测时是碰不到这个标记的)会影响模型,所以随机mask的时候10%的单词会被替代成其他单词,10%的单词不替换,剩下80%才被替换为[MASK]。]
BERT整体结构
Input representation
输入表征主要由下面三部分加和而成:
1.词的向量化编码
就是常用的词向量化,例如Word2vec等或者直接embedding
2.段编码
使用[CLS]、[SEP]做标记区分段,每个段用于其各自的向量Ei,属于A段的每个词都要加EA,属于B段的每个词都要加EB…
主要是为了下句话预测任务
3.位置编码
和transormer不同的是,这里的position embedding是可训练的,不再是适用固定的公式计算
Transformer Encoder
这里还会沿用Transformer的Encoder网络,首先是一个Multi-head self-attention,然后接一个Position-wise前馈网络,并且每个结构上都有残差连接.
Losses
Losses就是两部分,一部分是语言模型的任务的损失,一部分是上下文是否连续的损失。
语言模型的任务的损失
对于Mask ML随机选择进行mask的15%的词,是否正确做损失函数(一般为交叉熵损失函数)
上下文是否连续损失
二分类的损失函数,连续/不连续
常见问题
1.Bert的mask ml相对Cbow有什么相同和不同?
相同点:两种方式都采用了使用一个词周围词去预测其自身的模式。
不同点:1.mask ml是应用在多层的bert中,用来防止 transformer 的全局双向 self-attention所造成的信息泄露的问题;而Cbow时使用在单层的word2vec中,虽然也是双向,但并不存在该问题
2.cbow会将语料库中的每个词都预测一遍,而mask ml只会预测其中的15%的被mask掉的词
2.Bert针对以往的模型存在哪些改进?
1.创造性的提出了mask-ml来解决多层双向 self-attention所出现的信息泄露问题
2.position embedding采用了可训练的网络取到了余弦函数公式
3.Bert的双向体现在那里?
Bert的双向并不是说他和transformer相比,模型结构进行了什么更改,而是transformer原始的Encoder部分在使用到语言模型时就是一种双向的结构,而本身transformer之所以不是双向的是因为他并不是每个单词的语言建模,而是一种整体的表征,因此不存在单向双向一说
4.对输入的单词序列,随机地掩盖15%的单词,然后对掩盖的单词做预测任务,预训练阶段随机用符号[MASK]替换掩盖的单词,而下游任务微调阶段并没有Mask操作,会造成预训练跟微调阶段的不匹配,如何金额绝?
15%随机掩盖的单词并不是都用符号[MASK]替换,掩盖单词操作进行了以下改进:
80%用符号[MASK]替换:my dog is hairy -> my dog is [MASK]
10%用其他单词替换:my dog is hairy -> my dog is apple
10%不做替换操作:my dog is hairy -> my dog is hairy
5.手写muti-attention
>
>
>
6、 elmo、GPT、bert三者之间有什么区别?(elmo vs GPT vs bert)
(1)特征提取器:elmo采用LSTM进行提取,GPT和bert则采用Transformer进行提取。很多任务表明Transformer特征提取能力强于LSTM,elmo采用1层静态向量+2层LSTM,多层提取能力有限,而GPT和bert中的Transformer可采用多层,并行计算能力强。
(2)单/双向语言模型:
- GPT采用单向语言模型,elmo和bert采用双向语言模型。但是elmo实际上是两个单向语言模型(方向相反)的拼接,这种融合特征的能力比bert一体化融合特征方式弱。
- GPT和bert都采用Transformer,Transformer是encoder-decoder结构,GPT的单向语言模型采用decoder部分,decoder的部分见到的都是不完整的句子;bert的双向语言模型则采用encoder部分,采用了完整句子。