根据我的理解(如果我错了请纠正我),束搜索是广度优先搜索的一种,它只探索可能性“图”中最可能的b个选项的路径,其中b是束的大小。
为了计算/评分每个选项,特别是在我所从事的自然语言处理领域,我们通常通过计算一个标记的概率来计算一个可能性的得分,该概率基于在此之前的所有内容。
这在循环架构中是合理的,你只需运行你的模型和解码器,通过最佳的b个初始标记,获取第二个标记的概率,对应于每个初始标记。最终,你会得到带有概率的序列,你只需选择概率最高的那个。
然而,在变换器架构中,模型没有这种循环性,输出是整个词汇表中每个位置每个词的概率(批次大小,最大序列长度,词汇大小)。我如何解释这个输出以进行束搜索?我可以获取输入序列的编码,但由于没有使用前一个输出作为下一个标记解码的输入的这种循环性,我如何计算从最佳b个标记衍生出的所有可能序列的概率呢?
回答:
束搜索的操作与循环模型完全相同。解码器不是循环的(它是自注意力的),但它仍然是自回归的,即生成一个标记是基于之前生成的标记的条件。
在训练时,自注意力是被屏蔽的,使其只能关注当前生成的词左侧的词。这模拟了推理时的设置,因为你确实只有左侧的上下文(因为右侧的上下文尚未生成)。
唯一的区别是,在RNN解码器中,你在每个束搜索步骤中只使用最后的RNN状态。而在变换器中,你总是需要保留整个假设,并对整个左侧上下文进行自注意力处理。