Encoder-Decoder 模型(seq2seq、集束搜索、贪心搜索)简记

seq2seq顾名思义就是模型的输入和输出均是序列(sequence),机器翻译模型是seq2seq的一典型例子。

RNN-Encoder-Decoder模型

1、机器翻译模型

Encoder-Decoder 模型(seq2seq、集束搜索、贪心搜索)简记_第1张图片
机器翻译模型

上图的机器翻译模型由左边的多对一RNN(many to one)和右边的一对多RNN(one to many)组成,左边绿色部分是编码器(encodeer),右边紫色部分是解码器(decodeer) 某种语言的句子序列通过编码器生成一个向量作为其代表,传递给解码器作为解码器的输入向量,输出另一种语言的句子序列。

根据语言模型可以发现,机器翻译模型的解码器与语言模型几乎相同,只是语言模型中的预输入向量是,而机器翻译模型的解码器的输入是编码器输出的向量,所以机器翻译模型又叫条件语言模型(condition language model)。

语言模型告诉我们的是一个句子的概率,机器翻译解码器的作用在编码器传递的向量的基础上,随机抽样得到多种翻译,再通过某种算法找出句子概率最大的一个,即最合适的翻译结果。

每种翻译结果的可能性=,其中是翻译结果的第个词,是翻译结果总词数,是输入的需要翻译的句子序列,。


2.1、集束搜索和贪心搜索比较

在寻找最佳翻译结果(概率最大的结果)时常用的算法是集束搜索(beam search)。在讨论集束搜索之前,先对比另外一种算法,贪心搜索(greedy search),这种对比也体现了集束搜索的最大优点。

简单的来说,贪心算法是先挑出一个最可能的词,在此基础上再挑出第二个最有可能的词,以此类推,使每个词的概率最大化。集束搜索是站在整个词序列整体的角度上使其概率最大化。典型的结果是,通过贪心搜索得到的翻译结果可能会包含一些日常使用中词频较高的词。

比如较理想的翻译结果为“Jane is visiting Africa in September”时,通过贪心搜索得到的结果可能是“Jane is going to be visiting Africa in September” ,因为在英语中“is”后加“going to”的频率要比加“visiting”的频率高很多。致使翻译结果中穿插一些高频词组,让翻译结果冗长,不简洁,所以不是最佳。

关于集束搜索得内容参见:集束搜索


2.2、集束搜索

法语“Jane visite l’Afrique en septembre” 希望翻译成英文句子 “Jane is visiting Africa in September”

集束搜索有一个参数:集束宽(beam width),表示在生成每个翻译结果时会考虑集束宽个候选结果。本文此后讨论时设集束宽为3。

在生成每个结果时,通过softmax得到字典中所有词的概率向量,维度与字典维度相同,从中取概率最高的3个词存于内存作为候选。

第一步,生成翻译结果的第一个词,即完成编码器与解码器的连接。第一个结果词的概率为 ,为输入的法语句子序列。

Encoder-Decoder 模型(seq2seq、集束搜索、贪心搜索)简记_第2张图片
第一步示意图

第二步,生成后面的结果序列。第二个词在确定第一个词的基础上搜索,以此类推。假设经过学习后的候选为“Jane”、“in”、“september”(此处暂不考虑大小写)。在第二步中,第一个和第二个单词的联合概率是关心的重点,即.

又所以最终可以考虑每个时间步输出概率的乘积。

Encoder-Decoder 模型(seq2seq、集束搜索、贪心搜索)简记_第3张图片
第二步示意图

由于此处集束宽为3,所以的3个候选词“Jane”、“in”、“september”要重复上述操作。

Encoder-Decoder 模型(seq2seq、集束搜索、贪心搜索)简记_第4张图片
3个候选词重复操作

由于集束宽为3,假设字典中词数为1w,那么考虑第一、二个词会产生3w个可能的结果,并得到所有组合的联合概率。因为集束宽为3,从3w个结果中挑选出联合概率最高的3个结果作为候选存于内存,同时保存每个候选的,以便最终计算整个句子的概率


第三步,以此类推,得到整个句子的翻译结果。

Encoder-Decoder 模型(seq2seq、集束搜索、贪心搜索)简记_第5张图片



2.3、集束搜索的改进

集束搜索的目的是最大化下式,即翻译结果句子的概率

1、因为式右端的每个概率值都大于0小于1,其乘积结果会是一个很小的数,造成数值下溢(numerical underflow) 。了解决这个问题 ,将最大化的乘积式(即输出结果序列的联合概率)取对数 ,由 logM*N=logM+logN 公式得,上述需要最大化的乘积式可以转化为的和。

Encoder-Decoder 模型(seq2seq、集束搜索、贪心搜索)简记_第6张图片

2、还有一个问题是概率值大于0小于1,结果越长句子越小,而我们寻找的是句子概率最大的结果,这就会造成集束搜索偏向更短的翻译结果。解决方法是归一化。因此将原先的公式除以翻译后句子序列长度,这样很明显的减少了对输出长的结果的惩罚。(指数小于1,是为了缓和直接除以带来的影响) 

Encoder-Decoder 模型(seq2seq、集束搜索、贪心搜索)简记_第7张图片

3、有时得到的结果不理想,我们需要知道是机器翻译模型(RNN构造)出了问题,还是集束搜索算法出了问题。

需要翻译法语句子: Jane visite l’Afrique en septembre ,验证集中人工翻译的正确答案为 Jane visits Africa in September将人工翻译的结果标记为,使用训练完成的机器翻译模型翻译结果为 Jane visited Africa last September 并将其标记为。

Encoder-Decoder 模型(seq2seq、集束搜索、贪心搜索)简记_第8张图片

RNN编码器和解码器的功能是计算,所以可以通过比较 和的大小就能判断问题出现的地方。

,说明集束搜索算法选择的并不能使最大,不是最佳,所以是算法问题。

,首先假设验证集的是更好的结果,然而根据左式得到的是比 更好,这说明机器翻译模型的RNN构造出现问题,不能对结果的做出有效判断,它应该判断更好的翻译结果有更高的。

你可能感兴趣的:(Encoder-Decoder 模型(seq2seq、集束搜索、贪心搜索)简记)