希望大家结合上一篇博文讲的seq2seq详细总结来看,这样的模型其实是存在缺点的:
遗忘:输入文本很长时,语义向量c 偏向于记住靠近它的几个单词,它的运行机制相当于读完整个文本再去做翻译,而我们人类会一句一句的翻译,这样就引入了Attention 机制它与 seq2seq 最大的不同是: seq2seq 的语义向量 c 是固定的,而Attention 每个时刻的 语义向量 c 不同seq2seq模型的语义向量 c 无法表达输入序列各单词的重要性,而attenton 每个时刻的c向量都能反映输入单词的权重关系seq2seq没有对齐机制,而attention具有这种性质,它能计算出目标单词与哪个输入单词关系最大看个图,大家就能明白啦 h1,h2,h3,h4是 RNNCeil 每个时刻的隐层状态
这个结构图比上面画的更官方一点
编码部分是双向的GRUh 是编码的隐层状态(有正向和反向)s 是解码的隐层状态① 观测上图:每一时刻t 的输出y_t 由三个要素决定:t 时刻i的隐状态 s_t,t 时刻的语义向量c_t,上一时刻 t−1的输出y_t−1 每一时刻t 的隐层状态s_t 由三个要素决定:t-1 时刻i的隐状态 s_t-1,t 时刻的语义向量c_t,上一时刻 t−1的输出y_t−1 这里 ht’ 就是 s_t, ht-1’ 是 s_t-1 同样:f 是 softmax层(在论文中接了Maxout层),g 是RNNCeil 如RNN, GRU ②语义向量 C 怎么得到? ? hi 是双向隐层拼接的结果 αt,i 是第 t 时刻,hi 的权重系数 S 是解码部分的隐层状态,h 是编码部分的隐层状态
以上面那个图为例:求第 三 时刻的 语义向量 c3: c3 = α3,1 * h1 + α3,2 * h2 + α3,3 * h3 + α3,4 * h4 好了,我们现在的问题就只剩计算 score(s, h)
这里的权重反映的是相似度,αt,i有两种方法求 score 计算完之后必须用 softmax 归一化