您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 酒店餐饮 > elmo到transformer再到bert
自然语言处理近来主要成果——从ELMo到Transformer再到BertContents目录0102BertELMo01ELMo自然语言处理中的基本问题:词的表示(词向量)及词向量的生成方法PART在自然语言处理任务中,首先需要考虑词如何在计算机内部表示。词向量技术是将词转化成为向量,并且尽量让相似的词其对应的词嵌入向量也相似。通常,有两种表示方式:one-hotrepresentation(离散表示)和WordEmbedding(词嵌入)。Wordembedding也称作Distributionalrepresentation。ELMoPART01词嵌入向量one-hotrepresentation(离散表示)ELMoPART01最早的词向量是很冗长的,它使用是词向量维度大小为整个词汇表的大小,对于每个具体的词汇表中的词,将对应的位置置为1。比如我们有下面的5个词组成的词汇表,词Queen的序号为2,那么它的词向量就是(0,1,0,0,0)。同样的道理,词Woman的词向量就是(0,0,0,1,0)。one-hotrepresentation相当于给每个词分配一个id,这就导致这种表示方式不能展示词与词之间的关系。另外,one-hotrepresentation将会导致特征空间非常大,但也带来一个好处,就是在高维空间中,很多应用任务线性可分。distributionrepresentation(分布式表示)ELMoPART01One-hotrepresentation用来表示词向量非常简单,但是却有很多问题。最大的问题是我们的词汇表一般都非常大,比如达到百万级别,这样每个词都用百万维的向量来表示简直是内存的灾难。这样的向量其实除了一个位置是1,其余的位置全部都是0,表达的效率不高,能不能把词向量的维度变小呢?Dristributedrepresentation可以解决Onehotrepresentation的问题,它的思路是通过训练,将每个词都映射到一个较短的词向量上来。所有的这些词向量就构成了向量空间,进而可以用普通的统计学的方法来研究词与词之间的关系。这个较短的词向量维度是多大,一般需要我们在训练时自己来指定。比如下图我们将词汇表里的词用Royalty,Masculinity,Femininity和Age4个维度来表示,King这个词对应的词向量可能是(0.99,0.99,0.05,0.7)。当然在实际情况中,我们并不能对词向量的每个维度做一个很好的解释。distributionrepresentation(分布式表示)ELMoPART01有了用Dristributedrepresentation表示的较短的词向量,我们就可以较容易的分析词之间的关系了,比如我们将词的维度降维到2维,有一个有趣的研究表明,用下图的词向量表示我们的词时,我们可以发现:queenwomanman-king从左图各词向量表示中,我们可以明显的看出,king和queen二者词义接近,man和woman词义接近。生成词向量的方法有很多,这些方法都依照一个思想:任一词的含义可以用它的周边词来表示。生成词向量的方式可分为:基于统计的方法和基于语言模型的方法。ELMoPART01词向量的生成方法基于统计的方法——SVD(奇异值分解)ELMoPART01SVD得到了word的稠密(dense)矩阵,该矩阵具有很多良好的性质:语义相近的词在向量空间相近,甚至可以一定程度反映word间的线性关系。Word2Vec连续CBOW01ELMoPART层次Softmax是Softmax的一种加速方法,Softmax的计算速度是线性的,复杂度是O(k*h),k是类别数量,h是文本特征的维度数。而基于哈夫曼树的层次Softmax可以将计算复杂度降到O(hlog(𝑘)),减少了每次反向传播的时间,适合类别数巨大的分类问题。还有一种对Softmax的加速方法,负采样,即对负样本采样,由于是互斥的分类问题,所以每个输出只有一个正样本,其他都是负样本,为了减少计算量,每次只取一部分的负样本进行反向传播。Word2Vec创新型工作01ELMoPART基于大量文本,ELMo模型是从深层的双向语言模型(deepbidirectionallanguagemodel)中的内部状态(internalstate)学习而来的,而这些词向量很容易加入到QA、文本对齐、文本分类等模型中,后面会展示一下ELMo词向量在各个任务上的表现。ELMo简介01ELMoPARTELMo简介——引入原因在“WordEmbedding”领域经常会存在多义词问题,我们知道,多义词是自然语言中经常出现的现象,也是语言灵活性和高效性的一种体现。多义词对WordEmbedding来说有什么负面影响?如下图所示,比如多义词Bank,有两个常用含义,但是WordEmbedding在对bank这个单词进行编码的时候,是区分不开这两个含义的。因为它们尽管上下文环境中出现的单词不同,但是在用语言模型训练的时候,不论什么上下文的句子经过word2vec,都是预测相同的单词bank,而同一个单词占的是同一行的参数空间,这导致两种不同的上下文信息都会编码到相同的wordembedding空间里去。所以wordembedding无法区分多义词的不同语义,这就是它的一个比较严重的问题。01ELMoPARTELMo简介——优势和步骤ELMoPART01ELMo的两个优势:(1)ELMo能够学习到词汇用法的复杂性,比如语法、语义。(2)ELMo能够学习不同上下文情况下的词汇多义性。ELMo的两个步骤:ELMO采用了典型的两阶段过程,第一个阶段是利用语言模型进行预训练;第二个阶段是在做下游任务时,从预训练网络中提取对应单词的网络各层的WordEmbedding作为新特征补充到下游任务中。该阶段在大文本语料库上预训练了一个深度双向语言模型(biLM),然后把根据它的内部状态学到的函数作为词向量。ELMo:预训练阶段ELMoPART01预训练阶段——双层双向模型ELMoPART01下图展示的是预训练过程。它的网络结构采用了双层双向LSTM,目前语言模型训练的任务目标是根据单词Wi的上下文去正确预测单词Wi,Wi之前的单词序列Context-before称为上文,之后的单词序列Context-after称为下文。图中左端的前向双层LSTM代表正方向编码器,输入的是从左到右顺序的除了预测单词外Wi的上文Context-before;右端的逆向双层LSTM代表反方向编码器,输入的是从右到左的逆序的句子下文Context-after;每个编码器的深度都是两层LSTM叠加。预训练阶段——结果ELMoPART01这个网络结构其实在NLP中是很常用的,使用这个网络结构利用大量语料做语言模型任务就能预先训练好这个网络。如果训练好这个网络后,输入一个新句子Snew,句子中每个单词都能得到对应的三个Embedding:1.最底层是单词的WordEmbedding;2.往上走是第一层双向LSTM中对应单词位置的Embedding,这层编码单词的句法信息更多一些;3.再往上走是第二层LSTM中对应单词位置的Embedding,这层编码单词的语义信息更多一些。也就是说,ELMO的预训练过程不仅仅学会单词的WordEmbedding,还学会了一个双层双向的LSTM网络结构,而这两者后面都有用。在上一阶段中,我们训练好的网络结构,如何给下游任务使用呢?在本阶段我们以SQuAD(斯坦福问答数据库)问题为例,来说明ELMo模型在下游任务中的使用。下游任务的使用ELMoPART01下游任务的使用——QA问题ELMoPART01在QA问题中,对于问句X,我们可以先将句子X作为预训练好的ELMO网络的输入,这样句子X中每个单词在ELMO网络中都能获得对应的三个Embedding,之后给予这三个Embedding中的每一个Embedding一个权重s,这个权重可以在下游任务调整时学习得来,根据各自权重累加求和,将三个Embedding整合成一个。然后将整合后的这个作为X句在自己任务的那个网络结构中对应单词的输入,以此作为补充的新特征给下游任务Embedding使用。对于上图所示下游任务QA中的回答句子Y来说也是如此处理。因为ELMO给下游提供的是每个单词的特征形式,所以这一类预训练的方法被称为“Feature-basedPre-Training”。ELMo效果——应用于6个NLP任务ELMoPART01文章对QA问题,文本蕴涵问题,语义角色标注问题,共指消解问题,命名实体抽取问题,情绪分析问题这六个NLP任务进行了ELMo模型的嵌入,最终得到的效果都要比原模型有所提高。02Bert目前效果最好的模型,在多种任务上达到最先进的效果。PARTBertPART02Google没有选择传统的CNN和RNN,而是使用了其在《Attentionisallyouneed》一文中提出的transformer结构。因为现有的RNN模型难以并行,CNN模型对语言模型的效果不是很好,所以提出了纯Attention的方案。Attention主要包含三个要素:Query,Key,Value,其中Key-Value是对应的,通过计算Query与Key的相似度,对Value加权求和。在论文中,Google给出了其提出的ScaledDot-ProductAttention的公式定义。其与一般的Attention其实区别并不大,以前的attention是用LSTM做encoder,也就是用它来生成key和value,然后decoder来生成query。其中Q与K内积是一种计算注意力的方法,作者称这种点乘的方法比加法速度更快,更节省空间。其中𝑑𝑘起缩放作用,使得softmax结果不至于过于极端。AttentionBertPART02Google在Attention的基础上提出了Multi-HeadAttention,其实就是对Q,K,V进行h次不同的变换,分别Attention,然后concat,与卷积十分相似。Multi-HeadAttention位置表示BertPART02前面的Multi-headAttention只能计算注意力,但是捕捉序列的顺序信息,相当于一个词袋模型,所以Google提出了Positionalencoding。将id为pos的位置映射为一个dmodel维的位置向量,这个向量的第i个元素的值是PE(pos,i)。这样做的目的是因为正弦和余弦函数具有周期性,对于固定长度偏差k(类似于周期),post+k位置的PE可以表示成关于pos位置PE的一个线性变化(存在线性关系),这样可以方便模型学习词与词之间的一个相对位置关系。𝑃𝐸𝑝𝑜𝑠,2𝑖=sin𝑝𝑜𝑠/100002𝑖/𝑑𝑚𝑜𝑑𝑒𝑙𝑃𝐸𝑝𝑜𝑠,2𝑖+1=cos𝑝𝑜𝑠/100002𝑖/𝑑𝑚𝑜𝑑𝑒𝑙BertPART02右图就是Transformer的架构,左边的编码器采用了N=6的重复结构,包含一个Multi-HeadAttention和一个Position-wisefeed-forward(一次线性变换后用Relu激活然后再线性变换)。右边的解码器,最下面是输出序列的tokens,在翻译任务中就是目标语言的词表。并且第一个Multi-HeadAttention是带有Mask的,以消除右侧单词对当前单词attention的影响,经过对Github上对别人实现的Transformer源码的查看,左边的encoder全部做完后的输出,将会插入到右边decoder的每一层,作为Key和Value。Transformer复杂度O(n2·d),完全可并行化,方便在GPU上并行。将每个词之间的距离都为1,可以捕捉长时依赖。可解释性比CNN和RNN好。有些rnn轻易可以解决的问题transformer没做到,如复制string。大部分时候需要限制n的大小,则复杂度为O(n·r
本文标题:elmo到transformer再到bert
链接地址:https://www.777doc.com/doc-4588695 .html