天然语言处理中的Attention Model:是什么及为何

/* 版权声明:能够任意转载,转载时请标明文章原始出处和做者信息 .*/
框架

                                                     author: 张俊林     机器学习


要是关注深度学习天然语言处理方面的研究进展,我相信你必定据说过Attention Model(后文有时会简称AM模型)这个词。AM模型应该说是过去一年来NLP领域中的重要进展之一,在不少场景被证实有效。听起来AM很高大上,其实它的基本思想是至关直观简洁的。本文做者能够对灯发誓:在你读完这篇啰里啰嗦的文章及其后续文章后,必定能够透彻了解AM究竟是什么,以及轻易看懂任何有关论文看上去复杂的数学公式部分。怎么样,这广告打的挺有吸引力吧,尤为是对那些患有数学公式帕金森病的患者。函数

 

在正戏开演前,咱们先来点题外话。学习

 

|引言及废话编码

 

你应该经常听到被捉奸在床的男性常常感叹地说一句话:女性的第六感一般都很准,固然这里的女性通常是特指这位男性的老婆或者女朋友,固然也多是他的某位具备女性气质的男朋友。要我说,男人的第六感其实也不差(这里的“男人”特指本文做者本人,固然非上文所引用的“男性”,为避免混淆特作声明)。当我第一次看到机器学习领域中的Attention Model这个名字的时候,个人第一直觉就是:这是从认知心理学里面的人脑注意力模型引入的概念。若干年前,也就是在我年轻不懂事的花样年华里,曾有一阵子沉迷于人脑的工做机制,大量阅读了认知心理学方面的书籍和论文,而通常注意力模型会做为书籍的单独一章来说。下面请容许我显摆一下鄙人渊博的知识。spa

 

注意力这东西其实挺有意思,可是很容易被人忽略。让咱们来直观地体会一下什么是人脑中的注意力模型。首先,请您睁开眼并确认本身处于意识清醒状态;第二步,请找到本文最近出现的一个“Attention Model”字眼(就是“字眼”前面的两个英文单词,…^@@^)并盯住看三秒钟。好,假设此刻时间中止,在这三秒钟你眼中和脑中看到的是什么?对了,就是“Attention Model”这两个词,可是你应该意识到,其实你眼中是有除了这两个单词外的整个一副画面的,可是在你盯着看的这三秒钟,时间静止,万物无息,仿佛这个世界只有我和你…..对不起,串景了,仿佛这个世界只有“Attention Model”这两个单词。这是什么?这就是人脑的注意力模型,就是说你看到了整幅画面,但在特定的时刻t,你的意识和注意力的焦点是集中在画面中的某一个部分上,其它部分虽然还在你的眼中,可是你分配给它们的注意力资源是不多的。其实,只要你睁着眼,注意力模型就无时不刻在你身上发挥做用,好比你过马路,其实你的注意力会被更多地分配给红绿灯和来往的车辆上,虽然此时你看到了整个世界;好比你很精心地偶遇到了你心仪的异性,此刻你的注意力会更多的分配在此时神光四射的异性身上,虽然此刻你看到了整个世界,可是它们对你来讲跟不存在是同样的…...net

 

这就是人脑的注意力模型,说究竟是一种资源分配模型,在某个特定时刻,你的注意力老是集中在画面中的某个焦点部分,而对其它部分视而不见。翻译

 

其实吧,深度学习里面的注意力模型工做机制啊,它跟你看见心动异性时荷尔蒙驱动的注意力分配机制是同样同样的。code

 

好,前戏结束,正戏开场。游戏


|Encoder-Decoder框架

 

本文只谈谈文本处理领域的AM模型,在图片处理或者(图片-图片标题)生成等任务中也有不少场景会应用AM模型,可是咱们此处只谈文本领域的AM模型,其实图片领域AM的机制也是相同的。

 

 

要提文本处理领域的AM模型,就不得不先谈Encoder-Decoder框架,由于目前绝大多数文献中出现的AM模型是附着在Encoder-Decoder框架下的,固然,其实AM模型能够看做一种通用的思想,自己并不依赖于Encoder-Decoder模型,这点须要注意。

 

 

Encoder-Decoder框架能够看做是一种文本处理领域的研究模式,应用场景异常普遍,自己就值得很是细致地谈一下,可是由于本文的注意力焦点在AM模型,因此此处咱们就只谈一些不得不谈的内容,详细的Encoder-Decoder模型之后考虑专文介绍。下图是文本处理领域里经常使用的Encoder-Decoder框架最抽象的一种表示:

                                                         

图1. 抽象的Encoder-Decoder框架

 

Encoder-Decoder框架能够这么直观地去理解:能够把它看做适合处理由一个句子(或篇章)生成另一个句子(或篇章)的通用处理模型。对于句子对<X,Y>,咱们的目标是给定输入句子X,期待经过Encoder-Decoder框架来生成目标句子Y。X和Y能够是同一种语言,也能够是两种不一样的语言。而X和Y分别由各自的单词序列构成:

 

Encoder顾名思义就是对输入句子X进行编码,将输入句子经过非线性变换转化为中间语义表示C:

                                                            

 

对于解码器Decoder来讲,其任务是根据句子X的中间语义表示C和以前已经生成的历史信息y1,y2….yi-1来生成i时刻要生成的单词yi 

                                                               

 

 

每一个yi都依次这么产生,那么看起来就是整个系统根据输入句子X生成了目标句子Y。

 

Encoder-Decoder是个很是通用的计算框架,至于Encoder和Decoder具体使用什么模型都是由研究者本身定的,常见的好比CNN/RNN/BiRNN/GRU/LSTM/Deep LSTM等,这里的变化组合很是多,而极可能一种新的组合就能攒篇论文,因此有时候科研里的创新就是这么简单。好比我用CNN做为Encoder,用RNN做为Decoder,你用BiRNN作为Encoder,用深层LSTM做为Decoder,那么就是一个创新。因此正准备跳楼的憋着劲想攒论文毕业的同窗能够从天台下来了,固然是走下来,不是让你跳下来,你能够好好琢磨一下这个模型,把各类排列组合都试试,只要你能提出一种新的组合并被证实有效,那恭喜你:施主,你能够毕业了。

 

扯远了,再拉回来。

 

Encoder-Decoder是个创新游戏大杀器,一方面如上所述,能够搞各类不一样的模型组合,另一方面它的应用场景多得不得了,好比对于机器翻译来讲,<X,Y>就是对应不一样语言的句子,好比X是英语句子,Y是对应的中文句子翻译。再好比对于文本摘要来讲,X就是一篇文章,Y就是对应的摘要;再好比对于对话机器人来讲,X就是某人的一句话,Y就是对话机器人的应答;再好比……总之,太多了。哎,那位施主,听老衲的话,赶忙从天台下来吧,无数创新在等着你发掘呢。

 

|Attention Model

 

图1中展现的Encoder-Decoder模型是没有体现出“注意力模型”的,因此能够把它看做是注意力不集中的分心模型。为何说它注意力不集中呢?请观察下目标句子Y中每一个单词的生成过程以下:

                                           

 

 

其中f是decoder的非线性变换函数。从这里能够看出,在生成目标句子的单词时,不论生成哪一个单词,是y1,y2也好,仍是y3也好,他们使用的句子X的语义编码C都是同样的,没有任何区别。而语义编码C是由句子X的每一个单词通过Encoder 编码产生的,这意味着不管是生成哪一个单词,y1,y2仍是y3,其实句子X中任意单词对生成某个目标单词yi来讲影响力都是相同的,没有任何区别(其实若是Encoder是RNN的话,理论上越是后输入的单词影响越大,并不是等权的,估计这也是为什么Google提出Sequence to Sequence模型时发现把输入句子逆序输入作翻译效果会更好的小Trick的缘由)。这就是为什么说这个模型没有体现出注意力的原因。这相似于你看到眼前的画面,可是没有注意焦点同样。若是拿机器翻译来解释这个分心模型的Encoder-Decoder框架更好理解,好比输入的是英文句子:Tom chase Jerry,Encoder-Decoder框架逐步生成中文单词:“汤姆”,“追逐”,“杰瑞”。在翻译“杰瑞”这个中文单词的时候,分心模型里面的每一个英文单词对于翻译目标单词“杰瑞”贡献是相同的,很明显这里不太合理,显然“Jerry”对于翻译成“杰瑞”更重要,可是分心模型是没法体现这一点的,这就是为什么说它没有引入注意力的缘由。没有引入注意力的模型在输入句子比较短的时候估计问题不大,可是若是输入句子比较长,此时全部语义彻底经过一个中间语义向量来表示,单词自身的信息已经消失,可想而知会丢失不少细节信息,这也是为什么要引入注意力模型的重要缘由。

 

上面的例子中,若是引入AM模型的话,应该在翻译“杰瑞”的时候,体现出英文单词对于翻译当前中文单词不一样的影响程度,好比给出相似下面一个几率分布值:

 

(Tom,0.3)(Chase,0.2)(Jerry,0.5)

 

每一个英文单词的几率表明了翻译当前单词“杰瑞”时,注意力分配模型分配给不一样英文单词的注意力大小。这对于正确翻译目标语单词确定是有帮助的,由于引入了新的信息。同理,目标句子中的每一个单词都应该学会其对应的源语句子中单词的注意力分配几率信息。这意味着在生成每一个单词Yi的时候,原先都是相同的中间语义表示C会替换成根据当前生成单词而不断变化的Ci。理解AM模型的关键就是这里,即由固定的中间语义表示C换成了根据当前输出单词来调整成加入注意力模型的变化的Ci。增长了AM模型的Encoder-Decoder框架理解起来如图2所示。

   

                                             图2 引入AM模型的Encoder-Decoder框架

即生成目标句子单词的过程成了下面的形式:

                                               

 

而每一个Ci可能对应着不一样的源语句子单词的注意力分配几率分布,好比对于上面的英汉翻译来讲,其对应的信息可能以下:

                      

 

其中,f2函数表明Encoder对输入英文单词的某种变换函数,好比若是Encoder是用的RNN模型的话,这个f2函数的结果每每是某个时刻输入xi后隐层节点的状态值;g表明Encoder根据单词的中间表示合成整个句子中间语义表示的变换函数,通常的作法中,g函数就是对构成元素加权求和,也就是经常在论文里看到的下列公式:

 

                                           

 

假设Ci中那个i就是上面的“汤姆”,那么Tx就是3,表明输入句子的长度,h1=f(“Tom”),h2=f(“Chase”),h3=f(“Jerry”),对应的注意力模型权值分别是0.6,0.2,0.2,因此g函数就是个加权求和函数。若是形象表示的话,翻译中文单词“汤姆”的时候,数学公式对应的中间语义表示Ci的造成过程相似下图:

          

                                        

                                                                         图3 Ci的造成过程

 

 

这里还有一个问题:生成目标句子某个单词,好比“汤姆”的时候,你怎么知道AM模型所须要的输入句子单词注意力分配几率分布值呢?就是说“汤姆”对应的几率分布:

 

(Tom,0.6)(Chase,0.2)(Jerry,0.2)

 

是如何获得的呢?

 

为了便于说明,咱们假设对图1的非AM模型的Encoder-Decoder框架进行细化,Encoder采用RNN模型,Decoder也采用RNN模型,这是比较常见的一种模型配置,则图1的图转换为下图:

                                                                        图4 RNN做为具体模型的Encoder-Decoder框架

 

那么用下图能够较为便捷地说明注意力分配几率分布值的通用计算过程:

 

                                     

                                                                                 图5 AM注意力分配几率计算

 

 

对于采用RNN的Decoder来讲,若是要生成yi单词,在时刻i,咱们是能够知道在生成Yi以前的隐层节点i时刻的输出值Hi的,而咱们的目的是要计算生成Yi时的输入句子单词“Tom”、“Chase”、“Jerry”对Yi来讲的注意力分配几率分布,那么能够用i时刻的隐层节点状态Hi去一一和输入句子中每一个单词对应的RNN隐层节点状态hj进行对比,即经过函数F(hj,Hi)来得到目标单词Yi和每一个输入单词对应的对齐可能性,这个F函数在不一样论文里可能会采起不一样的方法,而后函数F的输出通过Softmax进行归一化就获得了符合几率分布取值区间的注意力分配几率分布数值。图5显示的是当输出单词为“汤姆”时刻对应的输入句子单词的对齐几率。绝大多数AM模型都是采起上述的计算框架来计算注意力分配几率分布信息,区别只是在F的定义上可能有所不一样。

 

上述内容就是论文里面经常提到的Soft Attention Model的基本思想,你能在文献里面看到的大多数AM模型基本就是这个模型,区别极可能只是把这个模型用来解决不一样的应用问题。那么怎么理解AM模型的物理含义呢?通常文献里会把AM模型看做是单词对齐模型,这是很是有道理的。目标句子生成的每一个单词对应输入句子单词的几率分布能够理解为输入句子单词和这个目标生成单词的对齐几率,这在机器翻译语境下是很是直观的:传统的统计机器翻译通常在作的过程当中会专门有一个短语对齐的步骤,而注意力模型其实起的是相同的做用。在其余应用里面把AM模型理解成输入句子和目标句子单词之间的对齐几率也是很顺畅的想法。

 

固然,我以为从概念上理解的话,把AM模型理解成影响力模型也是合理的,就是说生成目标单词的时候,输入句子每一个单词对于生成这个单词有多大的影响程度。这种想法也是比较好理解AM模型物理意义的一种思惟方式。

 

图6是论文“A Neural Attention Model for Sentence Summarization”中,Rush用AM模型来作生成式摘要给出的一个AM的一个很是直观的例子。

                            

                                                            图6 句子生成式摘要例子

 

 

这个例子中,Encoder-Decoder框架的输入句子是:“russian defense minister ivanov called sunday for the creation of a joint front for combating global terrorism”。对应图中纵坐标的句子。系统生成的摘要句子是:“russia calls for joint front against terrorism”,对应图中横坐标的句子。能够看出模型已经把句子主体部分正确地抽出来了。矩阵中每一列表明生成的目标单词对应输入句子每一个单词的AM分配几率,颜色越深表明分配到的几率越大。这个例子对于直观理解AM是颇有帮助做用的。

最后是广告:关于AM,咱们除了本文,下周还会有续集:从AM来谈谈两种科研创新模式,请不要转台,继续关注,谢谢。

相关文章
相关标签/搜索