seq2seq模型及Beam search
Seq2Seq是一个Encoder-Deocder结构的模型,输入是一个序列,输出也是一个序列。
Encoder将一个可变长度的输入序列变为固定长度的向量,Decoder将这个固定长度的向量解码成可变长度的输出序列。
目标是最大化该目标函数:
seq2seq模型种类
-
one to one 结构,仅仅只是简单的给一个输入得到一个输出,此处并未体现序列的特征,例如图像分类场景。
-
one to many 结构,给一个输入得到一系列输出,这种结构可用于生产图片描述的场景。
-
many to one 结构,给一系列输入得到一个输出,这种结构可用于文本情感分析,对一些列的文本输入进行分类,看是消极还是积极情感。
-
many to many 结构,给一些列输入得到一系列输出,这种结构可用于翻译或聊天对话场景,对输入的文本转换成另外一些列文本。
-
同步 many to many 结构,它是经典的rnn结构,前一输入的状态会带到下一个状态中,而且每个输入都会对应一个输出,我们最熟悉的就是用于字符预测了,同样也可以用于视频分类,对视频的帧打标签。
第一种模型:(many to many)
第二种模型:
计算过程:
-
Encoder使用RNN编码后形成语义向量C.再将C作为输出序列模型Decoder的输入。解码过程中每一个时间点t的输入是上一个时刻隐层状态ht-1和中间语义向量C和上一个时刻的预测输出yt-1.之后将每个时刻的yt相乘得到整个序列出现的概率。其中f是非线性的**函数。
最后Seq2Seq两个部分(Encoder和Decoder)联合训练的目标函数是最大化条件似然函数。其中θ为模型的参数,N为训练集的样本个数。
参考链接:https://blog.csdn.net/wshixinshouaaa/article/details/80085668
Beam Search
Beam search 算法在文本生成中用得比较多,用于选择较优的结果(可能并不是最优的)。
例如我们设置beam size为2将中文翻译为英文的条件下,在给定语义向量c的情况下选择最有可能的k个词也就是依次选择条件概率P(y1∣C)最大的2个词。
预测输出值为y2,此时我们有语义向量c和第一个预测结果y1,将y1的两个结果都进行尝试选择概率最大的两个结果,依次重复的到最终遇到标识符结束得到概率最大的一个生成序列。
其概率为:
以上位beam search的思想,当beam size=1时此时为贪心算法。
根据最后的概率公式可知,该算法倾向于选择最短的句子,因为在这个连乘操作中,每个因子都是小于1的数,因子越多,最后的概率就越小。解决这个问题的方式,最后的概率值除以这个生成序列的单词数(记生成序列的单词数为N),这样比较的就是每个单词的平均概率大小。此外,连乘因子较多时,可能会超过浮点数的最小值,可以考虑取对数来缓解这个问题。
参考链接:https://blog.csdn.net/xyz1584172808/article/details/89220906