文本生成seq2seq框架

Posted zhiyong_will

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了文本生成seq2seq框架相关的知识,希望对你有一定的参考价值。

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通过神经网络将原始的输入 x 1 , x 2 , ⋯   , x T x \\left \\ x_1,x_2,\\cdots ,x_T_x \\right \\ x1,x2,,xTx转换成固定长度的中间向量 c 1 , c 2 , ⋯   , c l \\left \\ c_1,c_2,\\cdots ,c_l \\right \\ c1,c2,,cl,Decoder将此中间向量作为输入,得到最终的输出 y 1 , y 2 , ⋯   , y T y \\left \\ y_1,y_2,\\cdots ,y_T_y \\right \\ y1,y2,,yTy

对于机器翻译NMT问题,从概率的角度分析,即对于给定输入 x = x 1 , x 2 , ⋯   , x T x \\mathbfx=\\left \\ x_1,x_2,\\cdots ,x_T_x \\right \\ x=x1,x2,,xTx,求目标输出 y = y 1 , y 2 , ⋯   , y T y \\mathbfy=\\left \\ y_1,y_2,\\cdots ,y_T_y \\right \\ y=y1,y2,,yTy,使得条件概率 p ( y ∣ x ) p\\left ( \\mathbfy\\mid \\mathbfx \\right ) p(yx)最大,即 a r g m a x y    p ( y ∣ x ) argmax_\\mathbfy\\;p\\left ( \\mathbfy\\mid \\mathbfx \\right ) argmaxyp(yx)

2.1. Encoder

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

在RNN中,当前时刻 t t t的隐含层状态 h t h_t ht是由上一时刻 t − 1 t-1 t1的隐含层状态 h t − 1 h_t-1 ht1和当前时刻的输入 x t x_t xt共同决定的,可由下式表示:

h t = f ( h t − 1 , x t ) h_t=f\\left ( h_t-1,x_t \\right ) ht=f(ht1,xt)

假设在Seq2Seq框架中,输入序列为 x = x 1 , x 2 , ⋯   , x T x \\mathbfx=\\left \\ x_1,x_2,\\cdots ,x_T_x \\right \\ x=x1,x2,,xTx,其中, x i ∈ R K x x_i\\in \\mathbbR^K_x xiRKx,输出序列为 y = y 1 , y 2 , ⋯   , y T y \\mathbfy=\\left \\ y_1,y_2,\\cdots ,y_T_y \\right \\ y=y1,y2,,yTy,其中, y i ∈ R K y y_i\\in \\mathbbR^K_y yiRKy。在编码阶段,RNN通过学习到每个时刻的隐含层状态后,最终得到所有隐含层状态序列:

h 1 , h 2 , ⋯   , h T x \\left \\h_1,h_2,\\cdots ,h_T_x\\right \\ h1,h2,,hTx

具体过程可由下图表示:

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

C = f ( h 1 , h 2 , ⋯   , h T x ) C=f\\left ( h_1,h_2,\\cdots ,h_T_x \\right ) C=f(h1,h2,,hTx)

其中 f f f表示某种映射函数。通常取最后的隐含层状态 h T x h_T_x hTx作为语义编码向量 C C C,即

C = f ( h 1 , h 2 , ⋯   , h T x ) = h T x C=f\\left ( h_1,h_2,\\cdots ,h_T_x \\right )=h_T_x C=f(h1,h2,,hTx)=hTx

2.2. Decoder

在解码阶段,在当前时刻 t t t,根据在编码阶段得到的语义向量 c c c和已经生成的输出序列 y 1 , y 2 , ⋯   , y t − 1 y_1,y_2,\\cdots ,y_t-1 y以上是关于文本生成seq2seq框架的主要内容,如果未能解决你的问题,请参考以下文章

文本生成seq2seq框架

深度学习核心技术精讲100篇(四十二)-Seq2seq框架下的文本生成

(2020.6.13)文本生成初探

seq2seq attention

Seq2Seq sequence-to-sequence模型 简介

Seq2seq LSTM 无法生成合理的摘要