概述
Seq2Seq是一个Encoder-Deocder结构的模型,输入是一个序列,输出也是一个序列。
Encoder将一个可变长度的输入序列变为固定长度的向量,Decoder将这个固定长度的向量解码成可变长度的输出序列。
使用 x={ x1,x2,...,xn} x = { x 1 , x 2 , . . . , x n } 表示输入语句, y={ y1,y2,...,yn} y = { y 1 , y 2 , . . . , y n } 代表输出语句, yt y t 代表当前输出词。
所有的Seq2Seq模型都是以下目标函数,都是为了优化这个函数:
p(y|x)=∏t=1nyp(yt|y1,y2,...,yt−1,x) p ( y | x ) = ∏ t = 1 n y p ( y t | y 1 , y 2 , . . . , y t − 1 , x )
即输出的 yt y t 不仅依赖之前的输出 { y1,y2,...,yn} { y 1 , y 2 , . . . , y n } ,还依赖输入语句 { x1,x2,...,xn} { x 1 , x 2 , . . . , x n } ,模型无论怎么变化都是在该公式的约束下。
【注】
该条件概率模型存在问题:数值下溢问题。
原因:该式中每一项 p(yt|y1,y2,...,yt−1,x) p ( y t | y 1 , y 2 , . . . , y t − 1 , x ) 都小于1甚至于远远小于1,很多1乘起来,会得到很小很小的数字,造成数值下溢(numerical underflow)。
因此,在实际中一般是将其取log值,求其概率的对数和而不是概率的乘积,因此实际中一般用如下目标函数,目标是最大化该目标函数:
P(y|x)=∑t=1nylogP(yt<