美文网首页
自然语言处理中的注意力机制

自然语言处理中的注意力机制

作者: l1n3x | 来源:发表于2019-03-11 11:17 被阅读0次

传统翻译模型

最早注意力记忆是在[1]中提出,这里利用翻译任务来举例。传统的翻译任务通常使用的为sequence to sequence模型,使用一个encoder将输入编码为一个context vector,再使用decoder将context 解码为输出。更正式一点,encoder 将输入X=(x_1,..,x_T)编码为一个向量c。最通常的方法是使用RNN:
h_t = f(x_t, h_{t-1})
c = q({h_1,...,h_T})
其中 h_t \in R^n 是RNN的隐藏状态。c是从隐藏状态中生成的一个向量。一个典型的方式是使用q(h_1,...,h_T)=h_T。decoder通过c以及t时刻前的输出预测下一个输出:
p(y)=\prod_{t=1}^Tp(y_t|{y_1,...,y_{t-1}},c)
这种模型的不足之处在于无论多长的的输入都会被压缩为一个固定长的向量c,在[2]提到了,这种方式随着输入序列的增加,sequence to sequence的模型的性能会迅速下降。

align模型

针对上面提到的问题,[1]中提出了align模型,也就是记忆力模型的基础。在align模型中,c并不是一个固定的向量,而是通过通过对encoder的隐藏状态h进行加权得到的一个向量:
c_t=\sum_{j=1}^{T}a_{tj}h_j
a_{tj} = \frac{exp(e_{tj})} {\sum_{k=1}^{T}exp(e_{tj})}
e_{tj}=a(s_{t-1}, h_j)
通俗的来说,就是当计算y_t时,通过t-1时刻decoder状态s_{t-1}与encoder的所有状态h_1, ..., h_T通过函数a计算权重,并对所有个状态向量进行加权。在传统的sequence to sequence模型中,向量c是不变的。而在align模型中,向量c在每一个时刻t都是由encoder的隐藏状态h_1,...,h_t加权生成的。而这些权重不同,代表不同的隐藏状态对最终生成的向量c贡献是不同的,可以理解为注意力更集中于权重较大的隐藏状态,这也是注意力机制的由来,a函数也可以理解为相似度函数。而之所以称之为align(对齐)模型,是因为计算权重的过程其实是寻找decoder隐藏状态与encoder隐藏状态哪一个更相似,就类似与一个把s_th_t对齐的过程。
论文给出的图如下:

align模型图

attention for neural machine translation

[3]将[1]提到的模型用于机器翻译任务,这里也就正式提出attention这个概念。其方式在时刻t获取到向量c_t后,最终的状态向量:
\hat h_t = tanh(W_c[c_t;h_t])
[x;y]表示对矩阵行进行连接,得到最终的概率输出为:
p(y_t|y_{<t}, x) = softmax(W_s*\hat h_t)
结构图为:

attention for nlp

这里的\overline h_s是指encoder的隐藏状态。此外,论文中还给出了a函数的几个形式:
\operatorname{score}\left(\boldsymbol{h}_{t}, \overline{\boldsymbol{h}}_{s}\right)=\left\{\begin{array}{ll}{\boldsymbol{h}_{t}^{\top} \overline{\boldsymbol{h}}_{s}} & {\text { dot }} \\ {\boldsymbol{h}_{t}^{\top} \boldsymbol{W}_{a} \overline{\boldsymbol{h}}_{s}} & {\text { general }} \\ {\boldsymbol{W}_{\boldsymbol{a}}\left[\boldsymbol{h}_{t} ; \overline{\boldsymbol{h}}_{s}\right]} & {\text { concat }}\end{array}\right.
此外,还可以使用余弦相似度等方法计算相似度。目前其他论文中使用的较多的是第一种点乘相似度和余弦相似度。
此外论文还提出了全局注意力局部注意力,全局注意力即是上面描述的方式。
局部注意力会先计算出一个p_t,然后只计算h_t\{\overline h_s| s \in [p_t-D, p_t+D]\}的相似度。D是一个经验值。论文中给出了两种计算p_t的方式:

  1. Monotonic alignment
    直接将p_t设置为t,这种方式认为encoder与decoder是单调对齐的。此时的权重计算方式不变。
  2. Predictive alignment
    这种方式p_t是通过训练得来。S为source sentence的长度,\boldsymbol{W}_{\boldsymbol{p}}\boldsymbol{v}_{p}为模型参数。
    p_{t}=S \cdot \operatorname{sigmoid}\left(\boldsymbol{v}_{p}^{\top} \tanh \left(\boldsymbol{W}_{\boldsymbol{p}} \boldsymbol{h}_{t}\right)\right)
    此外,使用这种方式计算的权重还会使用一个正太分布改变权重:
    \boldsymbol{a}_{t}(s)=\operatorname{align}\left(\boldsymbol{h}_{t}, \overline{\boldsymbol{h}}_{s}\right) \exp \left(-\frac{\left(s-p_{t}\right)^{2}}{2 \sigma^{2}}\right)
    这种方式相当于假设注意力主要集中于位置p_t,逐渐向两边减弱。

参考

[1] Neural Machine Translation by Jointly Learning to Align and Translate
[2] Sequence to sequence learning with neural networks
[3] Effective Approaches to Attention-based Neural Machine Translation

相关文章

网友评论

      本文标题:自然语言处理中的注意力机制

      本文链接:https://www.haomeiwen.com/subject/hthupqtx.html