3.5 集束搜索的误差分析(Error analysis in beam search)

束搜索算法是一种近似搜索算法an approximate search algorithm),也被称作启发式搜索算法a heuristic search algorithm),它不总是输出可能性最大的句子,它仅记录着B为前3或者10或是100种可能

人工标记为yy^*。束搜索算法翻译结果标记为y^\hat y,是一个十分糟糕的翻译,改变了句子的原意:

模型有两个主要部分,一个是神经网络模型,或说是序列到序列模型(sequence to sequence model),称作是RNN模型,另一部分是束搜索算法,以某个集束宽度B运行

RNN(循环神经网络)实际上是个编码器和解码器(the encoder and the decoder),它会计算P(yx)P(y|x)。如对于句子:Jane visits Africa in September,将Jane visits Africa填入这里(上图编号1),忽略字母的大小写,后面也是一样,计算得到P(yx)P(y^*|x)P(y^x)P(\hat y|x) 同样如此,然后比较一下这两个值哪个更大

  • P(yx)P(y^*|x) 大于P(y^x)P(\hat y|x),可束搜索算法却选择了y^\hat y , 因此能够得出束搜索算法实际上不能给出使P(yx)P(y|x)最大化的yy值,因为束搜索算法的任务就是寻找一个yy的值来使这项更大,但是它却选择了y^\hat y,而yy^*实际上能得到更大的值。因此这种情况下束搜索算法出错

  • P(yx)P(y^*|x)小于或等于P(y^x)P(\hat y|x)yy^* 是比 y^\hat y更好的翻译结果,不过根据RNN模型的结果,P(y)P(y^*) 是小于P(y^)P(\hat y)的,即相比于y^\hat yyy^*成为输出的可能更小。因此在这种情况下是RNN模型出了问题

以上都忽略了长度归一化(length normalizations)的细节,如果用了某种长度归一化,那么要比较长度归一化后的最优化目标函数值

误差分析过程:

  1. 先遍历开发集,找出算法产生的错误

  2. 假如P(yx)P(y^*|x)的值为2 x 1010^{-10},而P(y^x)P(\hat y|x)的值为 1 x1010^{-10},得知束搜索算法实际上选择了比yy^*可能性更低的y^\hat y,则束搜索算法出错,缩写为B

  3. 接着继续遍历第二个错误,若对于第二个例子是RNN模型出现了问题,用缩写R来代表RNN

  4. 接着遍历更多的例子,有时是束搜索算法出现了问题,有时是模型出现了问题,等等

  5. 执行误差分析,得出束搜索算法和RNN模型出错的比例是多少。对开发集中每一个错误例子,即算法输出了比人工翻译更差的结果的情况,尝试确定是搜索算法出了问题,还是生成目标函数(束搜索算法使之最大化)的RNN模型出了问题。找到这两个部分中哪个是产生更多错误的原因

  6. 只有当发现是束搜索算法造成了大部分错误时,才值得花费努力增大集束宽度B;如果发现是RNN模型出了更多错,那么可以进行更深层次的分析,来决定是需要增加正则化还是获取更多的训练数据,抑或是尝试一个不同的网络结构

Last updated