Beam search 算法在文本生成中用得比较多,用于选择较优的结果(可能并不是最优的)。接下来将以seq2seq机器翻译为例来说明这个Beam search的算法思想。
在机器翻译中,beam search算法在测试的时候用的,因为在训练过程中,每一个decoder的输出是有与之对应的正确答案做参照,也就不需要beam search去加大输出的准确率。
有如下从中文到英语的翻译:
中文:
我 爱 学习,学习 使 我 快乐
英语:
I love learning, learning makes me happy
在这个测试中,中文的词汇表是{我,爱,学习,使,快乐},长度为5。英语的词汇表是{I, love, learning, make, me, happy}(全部转化为小写),长度为6。那么首先使用seq2seq中的编码器对中文序列(记这个中文序列为 X X X)进行编码,得到语义向量 C C C。
得到语义向量 C C C后,进入解码阶段,依次翻译成目标语言。在正式解码之前,有一个参数需要设置,那就是beam search中的beam size,这个参数就相当于top-k中的k,选择前k个最有可能的结果。在本例中,我们选择beam size=3。
来看解码器的第一个输出 y 1 y_1 y1,在给定语义向量 C C C的情况下,首先选择英语词汇表中最有可能k个单词,也就是依次选择条件概率 P ( y 1 ∣ C ) P(y_1|C) P(y1∣C)前3大对应的单词,比如这里概率最大的前三个单词依次是 I I I, l e a r n i n g learning learning, h a p p y happy happy。
接着生成第二个输出 y 2 y_2 y