3.5 集束搜索的误差分析(Error analysis in beam search)
Last updated
Last updated
束搜索算法是一种近似搜索算法(an approximate search algorithm),也被称作启发式搜索算法(a heuristic search algorithm),它不总是输出可能性最大的句子,它仅记录着B为前3或者10或是100种可能
人工标记为。束搜索算法翻译结果标记为,是一个十分糟糕的翻译,改变了句子的原意:
模型有两个主要部分,一个是神经网络模型,或说是序列到序列模型(sequence to sequence model),称作是RNN模型,另一部分是束搜索算法,以某个集束宽度B运行
RNN(循环神经网络)实际上是个编码器和解码器(the encoder and the decoder),它会计算。如对于句子:Jane visits Africa in September,将Jane visits Africa填入这里(上图编号1),忽略字母的大小写,后面也是一样,计算得到, 同样如此,然后比较一下这两个值哪个更大
若 大于,可束搜索算法却选择了 , 因此能够得出束搜索算法实际上不能给出使最大化的值,因为束搜索算法的任务就是寻找一个的值来使这项更大,但是它却选择了,而实际上能得到更大的值。因此这种情况下束搜索算法出错
若小于或等于, 是比 更好的翻译结果,不过根据RNN模型的结果, 是小于的,即相比于,成为输出的可能更小。因此在这种情况下是RNN模型出了问题
以上都忽略了长度归一化(length normalizations)的细节,如果用了某种长度归一化,那么要比较长度归一化后的最优化目标函数值
误差分析过程:
先遍历开发集,找出算法产生的错误
假如的值为2 x 10,而的值为 1 x10,得知束搜索算法实际上选择了比可能性更低的,则束搜索算法出错,缩写为B
接着继续遍历第二个错误,若对于第二个例子是RNN模型出现了问题,用缩写R来代表RNN
接着遍历更多的例子,有时是束搜索算法出现了问题,有时是模型出现了问题,等等
执行误差分析,得出束搜索算法和RNN模型出错的比例是多少。对开发集中每一个错误例子,即算法输出了比人工翻译更差的结果的情况,尝试确定是搜索算法出了问题,还是生成目标函数(束搜索算法使之最大化)的RNN模型出了问题。找到这两个部分中哪个是产生更多错误的原因
只有当发现是束搜索算法造成了大部分错误时,才值得花费努力增大集束宽度B;如果发现是RNN模型出了更多错,那么可以进行更深层次的分析,来决定是需要增加正则化还是获取更多的训练数据,抑或是尝试一个不同的网络结构