Encoder-decoder框架
Encoder-decoder框架最抽象的一种表示:即由一个句子生成另一个句子的通过处理模型。
对于句子对
X,y分别由各自的单词序列构成:x=
encoder就是对输入句子x进行编码,将输入句子通过非线性变换转化为中间语义表示C:
C=f(x1,x2,…,xm)
decoder就是根据句子x的中间语义C和之前已经生成的历史信息y1,y2,y(i-1)来生成i时刻要生成的单词yi:yi=G(C,y1,y2,…,y(i-1));每个yi都依次这么产生。
Encoder-decoder具体使用模型可以是CNN/RNN/BiRNN/GRU/LSTM等,各种模型可以随意组合。应用场景也特别多:例如:机器翻译-输入和输出对应不同语言的句子;文本摘要-输入和输出对应输入文本和摘要;对话机器人-输入和输出对应query-机器人的回答。
AttentionModel
上图展示的encoder-decoder模型没有attention机制,以目标句子y中每个单词的生成过程说明:
其中f是decoder的非线性变换函数。
在生成目标句子的单词时,对于目标输出中的每个单词其使用的语义编码都是C。语义编码C是由句子x中的每个单词经过encoder编码产生的,这意味着句子x中的任意单词对生成目标输出y中的每个单词的影响是一样的,然而事实是每个单词对目标中的单词影响力是不一样的。
例如:tomchase jerry.Encoder-decoder逐步生成中文单词:汤姆/追逐/杰瑞。在翻译“杰瑞”这个单词时,上述模型输入中的每个英文单词对翻译目标单词“杰瑞”的贡献是一样的,但是显然jerry对于翻译成杰瑞更加重要。因此上述模型没有引入attention机制。
没有引入attention机制的模型在输入句子比较短的时候问题估计不大,但是当输入句子非常长时,此时所有语义还是通过一个中间语义表示的话,则待翻译的单词的自身信息就会丢失很多,导致丢失很多细节信息。
若引入attention模型,则应该在翻译杰瑞的时候,体现出英文单词对于翻译当前中文单词的不同影响程度,例如给出一个概率分布值:权重代表重要性程度。
因此,目标单词中的每个单词都应该学习其对应输入句子中每个单词的概率分布信息,这意味着子阿生成目标输出中的每个单词时,原先由相同的中间语义表示C替换成根据当前生成单词而不断变化的Ci。
attentionmodel的关键就在于将固定的中间语义C表示换成了根据当前输出单词来调整成加入注意力模型的变化的Ci。其模型如下所示:
此时目标句子的生成过程变为:
每个Ci可能对应不同的输入单词的概率分布,例如上述的翻译,其对应的信息可能如下:
其中f2代表encoder对输入单词的某种变换函数,例如若encoder使用的是RNN模型,这个f2函数往往是某个时刻输入xi后隐层节点的状态值;
g则代表encoder根据单词的中间表示合成整个句子中间语义表示的变换函数,一般常见的做法是加权求和。即:
同样以上面翻译例子为例,翻译中文单词汤姆的时候,数学公式对应的中间语义表示Ci的形成过程如下所示:
接下来的问题就是如何得到attentionmodel所需要的概率分布呢?
针对不是attentiion模型的encoder-decoder框架进行细化,encoder和decoder都采用RNN模型,则模型框架如下:
下图很清楚的描述了如何计算attention概率分布的通用计算过程:
对于采用RNN的decoder而言,如果要生成yi单词,在时刻i,可以得到在生成yi之前的隐层节点i时刻的输出值Hi的,此时需要做的就是计算生成yi时输入句子里每个单词的概率分布,这时可以用decoder阶段i时刻的隐层节点状态Hi去分别计算和每个输入单词对应的encoder阶段的RNN隐层节点状态hj进行对比,即通过F(fj,Hi)来获得目标单词yi和每个输入单词对齐的可能性,F函数在不同实现中不同,然后F函数的输出经过softmax归一化就得到了符合概率分布的attention概率分布值。例如,F可以是cosine相似度。
attention模型也可以理解成影响力模型,就是指在生成目标单词的时候,输入句子每个单词对于生成这个单词有多大的影响程度。
下面是论文《aneural attention model for sentencesummarization》使用attention模型做生成式摘要给出的一个attention很直观的例子:
这个例子中,encoder-decoder框架的输入句子是:“russiandefense minister ivanov called sunday for the creation of a jointfront for combating globalterrorism”,即右侧;系统生成的摘要为上侧。模型把句子主体部分都抽了出来。矩阵中每一列代表生成的目标单词对应输入句子每个单词的attention概率,颜色越深代表分配的概率越大。
上述讲的是softattention model,soft即在求注意力分配概率时,对于输入句子x中任意一个单词都给出一个概率,是一个概率分布。
Hardattention model思想是:从输入句子中找到某个特定的单词,然后把目标句子单词和这个单词对齐,而输入句子中的其它单词的对齐概率默认为0.
但是hardattention在文本里面用处不大,要求太严。在图像倒是证明有用。
基于上面观点,可以尝试soft和hard的中间地带:不软不硬attention:先找到hardattention在输入句子中单词对齐的那个单词的大致位置,然后以这个单词为轴心,向左和向右扩展出一个大小为D的窗口,在这个2D+1的窗口内进行类似softattention的对齐概率计算即可。