Bert理论笔记

bert理论视频笔记
  • 附加另一个github资料连接
    我爱自然语言处理

Transformer

之前讲的很多了,再多说一点:对于位置编码,使用的是相对位置编码,这样可以保证比较好的相对的位置关系(之后的openAI GPT和bert使用的都是简单的绝对编码)。对于decoder部分不经存在self-attention还有encoder-decoder-attention,并且decoder部分使用mask,防止看到后面的信息(为下三角) (作弊)。处理的并行计算的问题,因此可以计算很多的层数;encode的时候可以顾及上下文的信息
但是现实生活中监督数据少

Elmo

无监督方法学习word embedding 同时考虑了上下文:使用pretraining的方法得到一个双向的语言模型,当一个句子来的时候分别通过前向和后向,最后每个词得到2n个向量(n为lstm堆叠的层数,2是前后向),最后通过加权组合起来得到新的向量作为该词的向量。因为这些向量是考虑上下文的,做了指代消解的,所以是比word embedding更好的。

但是Elmo是把上下文相关的embedding作为特征,这个上下文的embedding是通过语言模型无监督的语料学习到的,所以和我们真是的任务有一点的差异,所以并不是所有的都适合我们的任务

openAI GPT

openAI GPT 也是通过Transformer学习到一个语言模型,但是可以根据任务进行fine-tuning,但是这里的Transformer是不含有Encoder部分,所以decoder部分不包含encoder-decoder的attention部分,而只存在self-attention的attention机制,层数(12层)比ELMO的层数深,所以取得的效果比ELMO好很多。

我们在训练语言模型的时候是一个句子比如情感分类,但是对于语言相似度这样的两个句子的我们可以吧两个句子拼起来,为了判断不同的句子使用Delim连接
但是由于模型方面的约束(decoder的Mask)使得只可以看句子前面的信息;还有pretraining与fine-tunning的不匹配(比如相似度计算,训练的时候是一个句子,tunning出现两个句子)
Bert理论笔记_第1张图片

Bert

于是Bert提出了Masked LM(language model)解决单向信息流的问题,使用NSP(next sentence prediction) Multi-task Learning 把pretraining变成两个句子的输入,使得pretraining和fine-tunning都是输入两个句子的任务
如下图,输入两个句子,两个句子使用一个SEP分隔符来分割(备注:这里BPE编码是机器翻译里面的常见的方式,position embedding是位置编码,segment embedding标明分别是属于那个句子)
Bert理论笔记_第2张图片
怎么解决单向信息流呢?:一般都是只看前面的信息不看后面的信息或者从后往前看,同样是看不到完整的信息,Bert就换了一个任务,在对15%的字或者词中,80%的词进行mask,10%的词随机替换成其他的字或者词,10%捕捉改变,这样让模型来预测,类似于完形填空,这样bert学到self-attention能后考虑双向的信息的模型
Bert理论笔记_第3张图片
怎么弄两个句子呢?:50%的概率抽取两个连续的句子,50%的概率随机抽取两个句子,联系的句子就预测为,否则为0。这种关系的预测可以学习到两个句子的关系,这就可以在问答之类的任务里都很有作用。
Bert理论笔记_第4张图片
这样做了一个Masked LM 和NSP multi-task learnning 联合的多任务的学习,就可以学习到一个很好的pretraining的模型。

使用:例如对于情感分类,通过bert编码,获得第一个时刻的输出向量,然后再到上面接一个全连接层再做个分类,然后用标注监督的数据来fine-tunning bert和全连接之类的参数。
那么为什么使用第一个词的embedding呢?可以用第二个第三个吗?:不可以!就像编码it,虽然会参考其他的词,但是主要还是编码it的语义 ,如果使用it去做分类是完全不行的,而【CLS】是一个没有任何语义的词,它的输出语义全部参考自其他的词,所以用它来预测是没有问题的。当然,把所有时刻的输出都平起来进行lstm也是没有问题的!
Bert理论笔记_第5张图片
最后的loss不仅要计算预测结果的 l o s s 1 loss_1 loss1,还要考虑被mask的 部分称为 l o s s 2 loss_2 loss2

对于2个句子的任务也是同样的使用第0时刻的embedding进行预测
Bert理论笔记_第6张图片
对于问答类认为输出的是这个词是否是句子的开始或者结束
Bert理论笔记_第7张图片
序列数据来预测每个时刻的标签
Bert理论笔记_第8张图片
我们使用bert的话是不从头开始训练pretraining的,因为需要大量的数据,我们可以使用中文的bert,也就是图中的最后一个。同时介绍一下别的,uncase就是不区分大小写
Bert理论笔记_第9张图片

Bert’s Tips:

  • 使用中文模型不要使用多语言模型,因为google训练中文模型的时候是在维基百科上训练的,包含常见的英文
  • max_seq_lenght可以调小一点,提高效率
  • 内存不够,可以调整train_batch_size
  • 有足够多的领域数据时可以进行Pretraining
  • Bert理论笔记_第10张图片

你可能感兴趣的:(nlp)