Beam Search 如何对 The Transformer 的输出进行操作?

Ton*_*ony 6 nlp machine-learning beam-search

根据我的理解(如果我错了,请纠正我),Beam Search 是 BFS,它只探索可能性的“图”向下b最可能的选项,其中b是光束大小。

为了计算/评分每个选项,特别是对于我正在做的 NLP 领域的工作,我们基本上通过计算一个标记的概率来计算可能性的分数,考虑到它之前的所有内容。

这在循环架构中是有意义的,在这种架构中,您只需通过最好的b 个第一个标记运行您使用解码器拥有的模型,以获得每个第一个标记的第二个标记的概率。最终,您会得到具有概率的序列,然后您只需选择概率最高的序列。

然而,在 Transformer 架构中,模型没有这种循环,输出是词汇表中每个单词的整个概率,序列中的每个位置(批量大小、最大序列长度、词汇大小)。我如何解释 Beam Search 的这个输出?我可以获得输入序列的编码,但由于没有重复使用前一个输出作为下一个标记解码的输入,我如何计算所有可能序列的概率,这些序列源自最佳b令牌?

Jin*_*ich 9

集束搜索的工作原理与循环模型完全相同。解码器不是循环的(它是自注意力的),但它仍然是自回归的,即生成令牌以先前生成的令牌为条件。

在训练时,自注意力被屏蔽,这样只关注当前生成的单词左侧的单词。它模拟您在推理时的设置,当您确实只有左侧上下文时(因为右侧上下文尚未生成)。

唯一的区别是,在 RNN 解码器中,您仅在每个波束搜索步骤中使用最后一个 RNN 状态。使用 Transformer,您始终需要保留整个假设并对整个左侧上下文进行自我关注。

  • 我想我真正想问的是,使用 RNN 架构,在解码器中,我可以向其提供概率最高的 b 个标记,以获得后续标记的条件概率。然而,据我了解,从本教程中:https://www.tensorflow.org/beta/tutorials/text/transformer#create_the_transformer,我无法真正为 Transformer 架构做到这一点。是对的吗?解码器接收编码器输出、2 个掩码和目标——我将为参数目标输入什么? (2认同)