tf.contrib.seq2seq.LuongAttention
init(
num_units,
memory,
memory_sequence_length=None,
scale=False,
probability_fn=None,
score_mask_value=float(‘-inf’),
name=’LuongAttention’
)
| 参数 | 含义 |
|---|---|
| num_units | 在encoder阶段产生了多个特征向量,每个特征向量的大小 |
| memory | 一个batch里,encoder阶段产生的所有的特征向量,在RNNencoder中,维数为[batch_size, max_time, num_units],即encoder阶段产生了max_time个大小为num_units的特征向量 |
| memory_sequence_length | 记录memory中 的特征向量的长度,维数是[batch_size,],令memory中超过memory_sequence_length的值为0 |
| scale | 是否进行scale |
| probability_fn | 将打分函数直接转成概率,默认的是softmax |
| score_mask_value | 在将分数传到probability_fn函数之前的掩码值,在有Probability_fn函数的情况下才用 |
原理
论文为Effective Approaches to Attention-based Neural Machine Translation.
论文中提出了两种模式:Global Attention和Local Attention,Global Attention在encoder产生的所有信息中进行Attention操作,Local Attention在部分信息中进行Attention操作。
Global Attention
针对encoder产生的时序特征向量hs,有一个与其长度相同的对齐向量at,at 相当于在t时刻对hs 的权重向量,作用就是在t时刻找到hs中对deocder有影响的部分, at 由decoder当前隐藏状态和hs 得到:
文中使用了三种打分函数:
最后一种将decoder当前隐藏状态ht和hs直接相连进行打分,