论文笔记:Word Attention for Sequence
论文地址:Word Attention for Sequence to Sequence Text Understanding
代码:ლ(′◉❥◉`ლ)木有
论文来源:AAAI2018
一句话总结:
1.Background
1.1. 基于seq2seq 模型的注意力机制
自然语言处理领域的大多数任务都可以用基于RNN的seq2seq框架处理,例如机器翻译,文本摘要,对话系统等,而自从Bahdanau等人于2014年提出注意力机制之后,注意力机制现在已经成为了seq2seq的一个重要组成单元。
attention机制存在的优点主要有以下两点:
- 解决RNN中只支持固定长度输入的瓶颈
-
解决长句子依赖问题
因为目前大多数说的attention mechanism都是soft attention,所以我们这里以soft attention为例,介绍注意力机制的工作流程:
attention是在解码的时候,对于输入句子X中任意一个单词都给出个权重,从而区分source端的哪个word对于当前decode的word贡献更大更重要。然后利用公式
得到context vector,也就是上下文向量,decode每一个word时,context word都是不同的,是动态变化的,这就是attention mechanism的贡献,这是符合现实世界人类语言理解的规律的。
例如:I love you在解码"爱"的时候,很明显“love"的权重是应该大于"i"和"you"的。
具体来说,在解码第t个word时:
-
这里的 ‘Aa' 是一个attetnion 得分函数,有以下三种形式(下文里的Query代表s,Key代表h):
本文用的是第三种:
2.然后归一化得到对于source sequence的每一个时刻rnn输出的隐藏状态的attention。
这里需要注意的是不论是在计算attention的时候,还是已经得到attention vector计算context vextor的时候,都是用的 也就是在当前的关注机制中,给定encoder的结构,上下文向量建立在RNN隐藏状态向量上,RNN隐藏状态向量充当源句子的前缀子字符串的表示。
1.2 Motivation
以往的attention机制都是基于encoder的RNN隐藏状态向量得出的,hidden state vector已经经过了RNN的处理,融合或者丢失了一些原本word的信息。所以原始的attention 机制不能直接有选择性地利用source中的word embedding的信息。
1.3 Contribution
-
本文提出了word attention机制,直接基于source word embedding计算注意力和context vector,增加了source端内容向量的可解释性。
从source语义表示的角度来看,word attention增强模型将先前的subsequence级别的representation与low-level的word representation结合在一起,在不同的抽象级别上提取了源句的语义信息。通过这种方式,我们能够更全面的获得context vector来对源语句进行编码,这有助于每次解码步骤中结果输出。 -
为了更好地结合hidden context(也就是原本一般方式的attention 得到的context vector)和word context(也就是基于word attention提出的context vector),我们利用门控机制进行动态赋予每个解码步骤中两种context vector的权重。
-
自动摘要生成与神经网络机器翻译明确表明结合word attention的方法能够提高模型性能。特别是关于WMT'14英文 - 法文翻译任务,使用12M训练数据集,我们的方法在所有公布的结果中达到最佳效果。
2.模型
2.1 word attention
word attention.jpgword attention model的整体架构
图中编码器上层红色部分
代表attention vector,也就是[a1,a2,...aeos]其中每个ai都是一个标量,代表1.2中我们是介绍的基于RNN hidden state算出的注意力权重, 是每个hidden state与他的attention相乘得到的context vector。
图片绿色部分下层蓝色代表的就是我们用word attention算出的attention和基于word attention得到的context vector。
计算公式和原来的attention基本相同,只是hidden state换成了word embedding向量。
已经有了context vector(还是两个),我们该如何得到decoder i时刻的hidden state 以及i时刻的输出呢?
f函数的具体设置类似于GRU,如下公式
在这里的第2-4公式中, 两种attention mechanism得到的context vector是相同权重的,也就是1,然而,平等对待它们可能并不是最优的,因为不同的decoder侧单词可能依赖于不同层次的源端信息:它们中的一些可能优先使用sequence级别的源端上下文信息也就是基于hidden state的attenion得到的context vector,诸如包含在短语中的一些组合语义,而其他可能需要更具体和干净的单词上下文来获取更低级别的信息。因此,作者建议使用门单元来动态控制每个解码步骤的上下文数量。
2.2 门控机制
contextual 门控机制通过自适应控制subsequence level的和word level的
的权重,可以实现子序列级别和字级源端信息的更好平衡 。具体而言,在第i个解码步骤中,contextual 门控机制检查两种context vector,结合RNN隐藏状态si-1和最后生成的词yi-1,输出一个门矢量oi来决定接受两种context的信息的权重。
word embedding的dimension是n,decoder hidden state的维度是m,所以