自然语言中的Attention

来源:互联网 发布:淘宝默认发票抬头 编辑:程序博客网 时间:2024/05/01 01:44

/* 版权声明:可以任意转载,转载时请标明文章原始出处和作者信息 .*/

author: 张俊林

| 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等

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 是很有帮助作用的。

0 0
原创粉丝点击