传统的seq2seq-attention
encoder通过self-attention机制计算出各输入向量的隐表示来作为K,V,decoder中每个时间步的输入隐状态作为Q,然后Q和K做点乘经softmax操作得到各输入向量的权重,然后再和V做点乘得到上下文表示,将上下文表示和该时间步的输出隐表示拼接后作为该时间步的解码输出

指针网络 Pointer Network
指针网络就是生成一个指向输入中每个词的概率分布,使用attention权重作为概率分布,(替换了softmax操作)
传统的seq2seq-attention最后经softmax生成vacab的概率分布,根据每个时间步计算的attention权重生成一个输入词汇(假设输入有T个词)的概率分布,学习一个0到1之间的权重,将这两个概率分布按各自的比重相乘后进行拼接,得到一个(V+T)维的概率分布,选取概率最大的作为输出。
优点:适合从输入中直接拷贝某些词
缺点:某个词在vocab中出现过也在输入中出现过,将会有两个概率
Pointer Generate Network
学习一个0到1之间的gen权重,将两种概率分布分别乘以权重后进行相加,更倾向于选择输入词汇中的词。
Coverage mechanism
解决输出重复现象
不希望模型在过多的依赖,关注输入中的某个词,尽量使得在不同的时间步去关注不同位置的词。
正则项:期望输入每个位置得到的attention值尽量平均起来