自然语言处理中的Attention机制
Attention机制的理解
Attention机制也就是注意力机制,在自然语言处理中,就是对于一个语言序列的不同的部分给予不同的注意力,在数学上一般表现为权重,也就是对一个语言序列的各个元素加权。
对Attention机制给一个通用的定义:给定一组向量集合values,以及一个向量query,attention机制是一种根据该query计算values的加权求和的机制。这个定义来源于cs224n。
所谓attention就是这个value集和中的每个向量的权值的大小,attention机制就是用一种方式来计算出这个权值。
seq2seq中Attention机制的运用
attention在seq2seq模型中的计算方法大致如下:
- 将文本信息输入encoder模型中,每一步均会产生一个hidden state:
- 将encoding最后一个hidden state作为decoder中hidden state的初始值,输入到decoder中。
- 在decoder中每一个timestep均会产生一个hidden state:
- decoder的上一个timestep产生的hidden state:
,将
与encoder中的每个hidden state:
分别做点积,得到的标量叫做encoder中的每个hidden state的Attention score。
- 然后对Attention score做softmax得到一个概率分布叫做Attention distribution
。
- 根据Attention distribution对encoder中的每个hidden state加权平均得到context vector。
- 然后将context vector输入decoder最后输出预测的词。
上图中大概展示了attention机制中是如何计算出attention score 。
上图展示了如何计算Attention distribution:
。
上图展示了如何计算attention output,也就是context vector:
常见的几种Attention计算方式
- soft attention, global attention
- hard attention
- local attention
soft attention也就是global attention,soft attention和hard attention相对应,global attention和local attention相对应。soft attention在求出attention distribution之后将概率分布和encoder的hidden state相乘求和,也就是求加权平均。hard attention就是将attention distribution中概率最大的一项置为一,其余置为0。也就是将所有的attention集中在概率最大的一个hidden state,其他的直接忽略。local attention是soft和hard的结合体,先求hard attention,找到attention score最高的那个hidden state,然后以这个为中心,选取他周围的几个做soft attention。
如何改变Attention计算方式
有几个方向重新设计Attention:
- 改变Attention score/distribution的计算方式
- 改变加权平均hidden state的计算方式
上面介绍的soft attention/global attention、hard attention、local attention就是在改变加权平均hidden state的计算方式。通过改变计算Attention score的计算方式,也可以设计出很多新的attention机制。例如对将点乘改为concat、改为线性组合、加入激励函数等。
同样可以改变计算Attention distribution的计算方式,例如直接对Attention score归一化等: