一般编码器中得到的向量包含所有的上下文信息, 是高度压缩的信息, 怎么样来避免这种压缩呢?

- 这是原来的seq2seq, 当然有些小的改进在此不做介绍了。
主要使用attention
attention 向量a, 长度是源向量的长度, ai在0~1之间, 总和为1, 可以得到加权后的向量w

在解码的每个时间步计算一个加权向量, 把它作为解码器和线性层的输入来进行预测
Encoder
使用双向GRU构建编码器

-
此时output的大小为
src_len, batch_size, hid_dim*num_directions, 其中第三轴的hidden的元素是两个分开的, 一个是前向的一个是后向的, 如下图

可以把所有的hidden前向和后向串联表示, 如下图:

-
此时hidden的大小是
n_layers*num directions, batch_size, hid_dim
其中[-2, :, :]给出顶层RNN在最后一个时间步长后的隐藏状态(即在它看到句子中的最后一个单词后),[-1, :, :]给出顶层RNN在最后一个时间步长后的隐藏状态(即在它看到句子中的第一个单词后)。 -
由于解码器不是双向的,它只需要一个上下文向量z来作为它的初始隐藏状态s0,而我们目前有两个,一个向前的,一个向后的( z → = h → T \overrightarrow z=\overrightarrow h_T z=hT 和

本文详细介绍了Seq2Seq模型中的Attention机制,强调了如何通过AttentionEncoder避免信息过度压缩。文章首先概述了基本的seq2seq模型,然后重点讲解了Attention层的工作原理,包括如何计算注意力权重和能量,以及如何通过softmax使其归一化。同时,展示了Encoder和Decoder的实现细节,特别是如何结合前向和后向RNN的隐藏状态生成解码器的初始隐藏状态。
最低0.47元/天 解锁文章
1255





