深度剖析知识增强语义表示模型——ERNIE

如图中是Luong Attention 和Bahdanau Attention两种注意力机制的主要区别点,Luong Attention是计算当前时间节点也就是i时刻,而Bahdanau Attention则是计算上一时间点,也就是i-1时刻。实际应用中效果区别不大,只是Luong Attention 更容易理解。

位置编码

后来的出现了掩盖词语的训练任务,出现了位置的编码信息,对于针对位置的编码,主要有以下几种:

正玄位置编码:

如:我在智联招聘。智的映射为:学习位置向量:把智所在的位置学习成为一个向量。

相对位置的表达,则是针对当前的位置信息的相对位置,如当前智为0,左右两边term距离当前距离的数值,正负号表示方向。绝对位置可以保留更多的信息,但是如bert中长度是512,如果一个句子是120,那么后面的位置信息全是0,过多的无用位置编码无意义。transformer-xl对位置编码改进为相对位置,引入了segment,不采用整个句子的,而是采用左右两端固定segment个数的term作为上下文。

上述的各个模型都特别好,怎么应用呢,进入了自然语言深度学习特别经典的预训练和下游任务的微调的机制,我们可以通过大量的无监督语料去学习一些简单的深度学习任务,就能得到一个很好的模型,比如bert 、ernie等等,这时候神经网络结构已经有了,它的神经网络的参数权重也有了,我们对下游的任务,比如说文本情感分析,哈尔滨是一个美丽的城市。判断它是一个积极的情绪还是消极的情绪,小规模的标注数据,把网络结构、参数照搬,热启动,在做一个反向传播的梯度更新,在这个任务里就能得到很好很好的效果,预训练和微调的机制。如下图:

ERNIE的原理介绍

上面简单回顾了静态词向量与动态词向量,以及其中重要的点,那么ERNIE是怎么工作,以及任务是怎么训练的呢?其实,ERNIE实在BERT的基础上进行的改进,那么将对比着BERT进行一步步剖析。

跟bert的缺陷进行对比,BERT训练任务是随机掩盖住15%的词进行预测,中文就是字,英文就是词,盖住之后去预测盖住的部分是什么样子的,训练任务叫做隐码语言模型,这个使它得到很好的效果,这个任务也存在缺陷,强行掩盖把词与词,字与字之间的关系给拆散了,比如说哈尔滨,再去训练的时候把尔给盖住了,ERNIE的隐码语言模型盖住的不是一个字而是词或短语、命名实体,这样去预测整体。两者的主要区别如下:

  • BERT mask(sub-word) lm任务存在的问题

    • Word哈尔滨:sub-word  哈##尔##滨

    • Sub-word :预测可以通过word的 局部信息完成

    • 模型缺乏全局建模信息的能力

  • 针对BERT mask sub-word 任务存在的问题,百度提出基于知识增强的语义理解模型

    • ERNIE mask word & entity

    • 强迫模型通过全局信息去预测mask掉的内容,学习序列里mask信息里蕴含的知识

ERNIE学到全局的信息,使它能学习到非常先验的结果,已经进行了大量的自然语言处理的分词模型,短语拼接的模型,命名实体识别的模型,能够提前把这些词或者短语给标注出来,标注出来之后再去学,这样看它是基于已有的策略再去进行海量的数据上训练出一个很好的模型。

ERNIE 1.0的效果图:

针对bert的变种不断更新迭代,以及XLNET的产生,都不再局限于某个词,也是可以掩盖住短语、实体等进行任务训练,ERNIE也在不断的更新迭代,出现了ERNIE 2.0。

2.0加入更多的任务,经过左边各种各样的自然语言处理的任务去设计一些自然语言处理的辅助任务,基于这些辅助任务让ernie不断的去学习,持续的学习各种各样的多任务,效果不断的提升,然后再去处理下游的任务,比如文本相似度、只能问答,文本匹配效果得到非常明显的提升。

神经网络上的改造

上述所说各种各样的任务,怎么让ernie区分,特别加入了最下面这行的taskid,叫做taskid embedding,对于上面的输入是典型的ernie 1.0的输入,每个词的embedding,每个词所在句子的embedding,以及词在语料中位置的embedding,第四个呢就加上了任务的id embedding.让每个任务有单独的识别。

辅助任务

总共整理了7个任务,7个任务分位3类,一类是词法层的任务,一类是语法类的任务,一类是语义类的任务,词法层的任务 1.0的掩盖短语、实体。典型的词法任务就是句子排序,我们把三句话打乱顺序的给摆正,3句话的所有组合的阶乘,遍历组合都遍历一遍,让ernie去判断是这么多可能的哪一个,就把排序问题变成了一个多分类的问题,这样就很好的排序。语义层的关系:乱砍、乱伐,出现自然灾害,因为所以的关系,还有如果就的关系。尽管 但是 转折关系,或者并且这种并列关系,等等是语义的逻辑关系,大量的语料去学习这些关系,使得ernie能很好的提升自己的效果,

如下图所示:

学习过程

有这么多的输入,那么对于输出怎么学习呢?这些任务让它很好的学习,关键看他的输出,大致分为两类,token_evel就是词汇层次的任务,一类是sentence_level就是句子层次的任务,可以理解为填空题,判断这个词到底是哪一类 哪个词 是敏感词  还是非敏感词,是关键词还是非关键词,另一部分呢就是句子输出cls是a类还是b类是顺序1还是顺序2,来学习到句子级别的任务。那么这部分神经网络是什么样的呢?

在这里插入图片描述

其实上述提到过,ERNIE是基于BERT的改进,内部网络的设计其实还是基于双向的self-attention的encoder。

来自与all attention you need 这篇论文,tranfromer,总共有12层,然后每一层又包括自注意力机制、归一化、又包括求和与归一化、以及一些前馈神经网络的一些机制,最终构成了一个相对复杂的神经网络结构,这里面最核心的是自注意力机制,能学会每个词汇和词之间的关系比如说:词汇与词汇之间的搭配,keep up  we have  他们之间的关系线的粗细表示关系的强弱。在一步步理解bert中已经描述过,这里不再过多的赘述。