前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >文本生成seq2seq框架

文本生成seq2seq框架

作者头像
felixzhao
发布2022-05-12 15:58:15
5700
发布2022-05-12 15:58:15
举报
文章被收录于专栏:null的专栏null的专栏

1. 概述

Seq2Seq是Sequence to Sequence的缩写,作用是将一个序列(sequence)映射成另一个序列(sequence)。文献[1]和文献[2]分别提出利用深度神经网络DNN实现端到端的Seq2Seq学习,将Seq2Seq应用于神经机器翻译(Neural Machine Translation,NMT),唯一不同的是在[1]中使用LSTM作为基础网络,而在[2]中则是使用的是RNN。在Seq2Seq框架中包含了两个模块,一个是encoder模块,另一个是decoder模块。这种同时包含encoder和decoder的结构与AutoEncoder网络相似,不同的是AutoEncoder模型是将输入通过encoder的网络生成中间的结果,并通过decoder对中间的结果还原,AutoEncoder的模型结构如下图所示:

在这里插入图片描述
在这里插入图片描述

而在Seq2Seq中,相同的是两者都包含了Encoder和Decoder,不同的是,在Seq2Seq中,输入与输出并不是相同的,而在AutoEncoder中,输入与输出是相同的。

2. Seq2Seq框架

2.1. Seq2Seq框架的概述

Seq2Seq框架最初是在神经机器翻译(Neural Machine Translation,NMT)领域中提出,用于将一种语言(sequence)翻译成另一种语言(sequence)。由于在Seq2Seq结构中同时包含了encoder和decoder的结构,通常Seq2Seq又被称为Encoder-Decoder结构,Seq2Seq的结构如下图所示:

在这里插入图片描述
在这里插入图片描述

在Seq2Seq结构中,Encoder和Decoder分别是两个独立的神经网络模型,用于对不同的文本建模,通常对序列化文本建模的方法如LSTM[1],RNN[2]等。Encoder通过神经网络将原始的输入\left \{ x_1,x_2,\cdots ,x_{T_x} \right \} 转换成固定长度的中间向量\left \{ c_1,c_2,\cdots ,c_l \right \} ,Decoder将此中间向量作为输入,得到最终的输出\left \{ y_1,y_2,\cdots ,y_{T_y} \right \}

对于机器翻译NMT问题,从概率的角度分析,即对于给定输入\mathbf{x}=\left \{ x_1,x_2,\cdots ,x_{T_x} \right \} ,求目标输出\mathbf{y}=\left \{ y_1,y_2,\cdots ,y_{T_y} \right \} ,使得条件概率p\left ( \mathbf{y}\mid \mathbf{x} \right ) 最大,即argmax_{\mathbf{y}}\;p\left ( \mathbf{y}\mid \mathbf{x} \right )

2.1. Encoder

为了便于阐述,这里选取RNN[2](Recurrent Neural Network)作为Encoder和Decoder,一个典型的RNN结构如下图所示:

在这里插入图片描述
在这里插入图片描述

在RNN中,当前时刻t 的隐含层状态h_t 是由上一时刻t-1 的隐含层状态h_{t-1} 和当前时刻的输入x_t 共同决定的,可由下式表示:

h_t=f\left ( h_{t-1},x_t \right )

假设在Seq2Seq框架中,输入序列为\mathbf{x}=\left \{ x_1,x_2,\cdots ,x_{T_x} \right \} ,其中,x_i\in \mathbb{R}^{K_x} ,输出序列为\mathbf{y}=\left \{ y_1,y_2,\cdots ,y_{T_y} \right \} ,其中,y_i\in \mathbb{R}^{K_y} 。在编码阶段,RNN通过学习到每个时刻的隐含层状态后,最终得到所有隐含层状态序列:

\left \{h_1,h_2,\cdots ,h_{T_x}\right \}

具体过程可由下图表示:

在这里插入图片描述
在这里插入图片描述

通过对这些隐藏层的状态进行汇总,得到上图中固定长度的语义编码向量C ,如下式所示:

C=f\left ( h_1,h_2,\cdots ,h_{T_x} \right )

其中f 表示某种映射函数。通常取最后的隐含层状态h_{T_x} 作为语义编码向量C ,即C=f\left ( h_1,h_2,\cdots ,h_{T_x} \right )=h_{T_x}

2.2. Decoder

在解码阶段,在当前时刻t ,根据在编码阶段得到的语义向量c 和已经生成的输出序列y_1,y_2,\cdots ,y_{t-1}

来预测当前的输出的y_t ,其具体过程可由下图表示:

在这里插入图片描述
在这里插入图片描述

上述过程可以由下式表示:

y_t=argmax\; P\left ( y_t \right )=\prod_{t=1}^{T}p\left ( y_t\mid y_1,y_2,\cdots ,y_{t-1},c \right )

简化可得:

y_t=f\left ( y_t\mid y_1,y_2,\cdots ,y_{t-1},c \right )

其中f 表示某种映射函数。在RNN中,上式可简化为:

y_t=f\left ( y_{t-1},s_{t-1},c \right )

其中y_{t-1} 表示t-1 时刻的输出,s_{t-1} 表示Decoder中RNN在t-1 时刻的神经元的隐含层的状态, c 代表的是Encoder网络生成的语义向量。

3. Attention

上述的基于Encoder-Decoder的Seq2Seq框架成功应用在NMT任务中,但是在Encoder和Decoder之间的固定长度的语义向量C 限制了Seq2Seq框架的性能。主要表现为固定长度的语义向量C 可能无法完整表示整个序列的信息,尤其是对于较长的句子。为了解决长句子表示的问题,Bahdanau等人[3]在2016年在Seq2Seq框架中引入了Attention机制,同时将上述的Encoder阶段中的RNN替换成双向的RNN(BiRNN),即bidirectional recurrent neural network。

3.1. 带有Attention机制的Encoder

在[3]中的Encoder中,采用的是BiRNN,具体过程如下图所示:

在这里插入图片描述
在这里插入图片描述

对于BiRNN,其包含了两个阶段的RNN过程,分别为正向RNN和反向RNN,其中,正向RNN生成的隐含层状态序列为:

\left \{\overrightarrow{h_1},\overrightarrow{h_2},\cdots ,\overrightarrow{h_{T_x}}\right \}

反向RNN生成的隐含层状态序列为:

\left \{\overleftarrow{h_1},\overleftarrow{h_2},\cdots ,\overleftarrow{h_{T_x}}\right \}

对于t 时刻的隐含层状态h_t 通常是将正向和反向的隐含层状态concat在一起,即:

h_t=\left [ \overrightarrow{h_t^T};\overleftarrow{h_t^T} \right ]^T

3.2. 带有Attention机制的Decoder

与上述的Decoder一致,这里的Decoder也是一个标准的RNN,其过程可由下式表示:

y_t=f\left ( y_{t-1},s_{t-1},c_t \right )

注意到此处与上面不一样的是这里的Encoder网络生成的语义向量不再是固定的,而是变化的。对于第i 个词的Decoder过程中,c_t 为:

c_i=\sum_{j=1}^{T_x}\alpha _{ij}h_j

其中,\alpha _{ij}为归一化权重,其具体为:

\alpha _{ij}=\frac{exp\left ( e_{ij} \right )}{\sum_{k=1}^{T_x}exp\left ( e_{ik} \right )}

其中,e_{ij} 表示的是第i 个输出前一个隐藏层状态s_{i-1} 与第j 个输入隐层向量h_j 之间的相关性,可以通过一个MLP神经网络进行计算,即:

e_{ij}=a\left ( s_{i-1},h_j \right )=v_a^Ttanh\left ( W_as_{i-1}+U_ah_j \right )

其具体过程可由下图表示:

在这里插入图片描述
在这里插入图片描述

这里的Attention机制对所有的编码器隐含层状态h_j 都分配了权重,表示的是输出与编码器中每个隐含层状态的相关关系。

4. 总结

与原始的Encoder-Decoder模型相比,加入Attention机制后最大的区别就是原始的Encoder将所有输入信息都编码进一个固定长度的向量之中。而加入Attention后,Encoder将输入编码成一个向量的序列,在Decoder的时候,每一步都会选择性的从向量序列中挑选一个集合进行进一步处理。这样,在产生每一个输出的时候,都能够做到充分利用输入序列携带的信息。

参考文献

[1] Cho K, Merrienboer B V, Gulcehre C, et al. Learning Phrase Representations using RNN Encoder-Decoder for Statistical Machine Translation[J]. Computer Science, 2014.

[2] Sutskever I, Vinyals O, Le Q V. Sequence to sequence learning with neural networks[C]//Advances in neural information processing systems. 2014: 3104-3112.

[3] Bahdanau D, Cho K, Bengio Y. Neural machine translation by jointly learning to align and translate[J]. arXiv preprint arXiv:1409.0473, 2014.

[4] 深度学习中的注意力机制

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-04-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 概述
  • 2. Seq2Seq框架
    • 2.1. Seq2Seq框架的概述
      • 2.1. Encoder
        • 2.2. Decoder
        • 3. Attention
          • 3.1. 带有Attention机制的Encoder
            • 3.2. 带有Attention机制的Decoder
            • 4. 总结
            • 参考文献
            相关产品与服务
            机器翻译
            机器翻译(Tencent Machine Translation,TMT)结合了神经机器翻译和统计机器翻译的优点,从大规模双语语料库自动学习翻译知识,实现从源语言文本到目标语言文本的自动翻译,目前可支持十余种语言的互译。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档