Beam Search集束搜索

在Seq2Seq解码部分中,常用到Beam Search。每个时刻它会保存b(beam size)个概率最大的选择作为当前的最佳选择,然后解码下一时刻时,继续选择和之前保存的b个选择组合起来后的概率最大的b个选择,依次循环迭代下去,直到编码结束。

下面直接上图:

Beam Search集束搜索_第1张图片

在机器翻译中:

法语输入:Jane visite l’Afrique en septembre.

人工翻译:Jane visits Africa in September.

这里 beam size 为3。

在时刻1时,模型选择了概率最大的三个选择为:in ,jane,september。

在时刻2时,模型分别对时刻1的三个单词组合每个组合做贪心搜索,然后输出条件概率最大的三个选择为:in september,jane is,jane visits. 

Beam Search集束搜索_第2张图片

在时刻3,模型继续对前面的三个组合每个组合做贪心搜索,然后输出条件概率最大的三个选择为:

in september Jane,jane is visit , jane visits africa.

依次循环直到最后输出符. 假设最后输出为这三个答案:

1)Jane is visit Africa in September.

2)Jane visits africa in september.

3)In September Jane will visit Africa.

每个时刻都遍历b\left | Y \right |次(这里\left |Y \right |为词汇量大小),然后算出概率最大的b个选择,共T个时刻,所以集束算法时间复杂度为:O(b|Y|T).

毫无疑问当b=1时,集束算法就退化为贪心算法,每个时刻遍历\left | Y \right |次,选出概率最大的那个词,共T个时刻,时间复杂度为:O(|Y|T).

随着b越大,遍历搜索的空间也越大,计算量也越大.在实际的应用中,一般去b=10左右为佳.

你可能感兴趣的:(nlp,深度学习,自然语言处理(nlp))