Encoder-Decoder
架构模型,如下图:
Encoder会利用整个原始句子生成一个语义向量
,Decoder再利用这个向量翻译成其它语言的句子。这样可以把握整个句子的意思、句法结构、性别信息等等。
Encoder对X 进行非线性变换得到中间语义向量c
:
Decoder根据语义c 和生成的历史单词来生成第个单词 :
Encoder和Decoder具体使用什么模型,都可以自己选择。通常有CNN,RNN,BiRNN,GRU,LSTM, Deep LSTM。
当句子较长时,所有语义完全通过一个中间语义向量来表示,单词自身的信息已经消失,会丢失更多的细节信息。
Attention Model的架构如下:
生成每个单词时,都有各自的语义向量,不再是统一的C 。
普通注意力机制
将编码器和解码器的隐含状态用来求解打分函数:
Local-based
,没有外部的关注对象,自己关注自己。
General
, 有外部的关注对象,直接乘积,全连接层。
Concatenation-based
, 有关注的对象,先concat或相加再过连接层。
注意力分数经过softmax层:
Soft Attention
是对所有的信息进行加权求和。Hard Attention
是选择最大信息的那一个。若是使用软性注意力选择机制,求得编码器的隐含状态与归一化分数的加权平均:
串联得到带有注意力的解码器隐含状态:
通过注意力隐状态得到预测概率:
多头注意力
Multi-head Attention
利用多个查询Q来并行地从输入信息中选取多个信息。每个注意力关注输入信息的不同部分。
硬性注意力
硬性注意力是只关注到一个位置上
。选取最高概率的输入信息,在注意力分布上随机采样。
缺点:loss与注意力分布之间的函数关系不可导,无法使用反向传播训练。一般使用软性注意力。
需要:硬性注意力需要强化学习来进行训练。
键值对注意力
输入信息:键值对(Key, Value)
。 Key用来计算注意力分布 ,Value
用来生成选择的信息。
结构化注意力
如果输入信息,本身就有层次化的结构,词、句子、段落、篇章等不同粒度的层次。这时用层次化的注意力
来进行更好的信息选择。
也可以使用一种图模型,来构建更加复杂的结构化注意力分布。
指针网络
指针网络pointer network
是一种序列到序列的模型,用来指出相关信息的位置。也就是只做第一步。
输入:
输出: ,∈[1,n] , 输出是序列的下标。