Beam Search 如何对 The Transformer 的输出进行操作?
How does Beam Search operate on the output of The Transformer?
根据我的理解(如果我错了请纠正我),Beam Search 是 BFS,它只探索 "graph" 向下的可能性 b 最多可能的选项,其中 b 是光束大小。
对于calculate/score每个选项,特别是对于我正在做的NLP领域的工作,我们基本上通过计算token的概率来计算可能性的分数,给定一切在它之前。
这在循环架构中是有意义的,在该架构中,您只需 运行 通过最好的 b 第一个标记来使用您的解码器的模型,以获得概率第二个标记,每个第一个标记。最终,你得到了有概率的序列,你只需要选择概率最高的序列。
但是,在 Transformer 架构中,模型没有这种循环,输出是词汇表中每个单词、序列中每个位置(批量大小、最大序列长度、词汇尺寸)。我如何解释 Beam Search 的这个输出?我可以得到输入序列的编码,但由于没有重复使用前一个输出作为下一个标记解码的输入,我该如何计算所有可能序列的概率,这些序列源于最好的 b 代币?
集束搜索的工作原理与循环模型完全相同。解码器不是循环的(它是 self-attentive),但它仍然是 auto-regressive,即生成一个标记以先前生成的标记为条件。
在训练时,self-attention 被屏蔽了,因此只关注当前生成的单词左侧的单词。它模拟了你在推理时的设置,当你确实只有左上下文时(因为右上下文还没有生成)。
唯一的区别是,在 RNN 解码器中,您只在每个波束搜索步骤中使用最后一个 RNN 状态。使用 Transformer,您始终需要保留整个假设并对整个左侧上下文执行 self-attention。
为您以后的问题和有相同问题的人添加更多信息:
I guess what I really want to ask is that, with an RNN architecture, in the decoder, I can feed it the b tokens that are highest in probability, to get the conditional probabilities of subsequent tokens. However, as I understand, from this tutorial here: tensorflow.org/beta/tutorials/text/…, I can't really do that for the Transformer architecture. Is that right? The decoder takes in the encoder outputs, the 2 masks and the target -- what would I input in for the parameter target?
你提到的网站上的教程在训练阶段使用了teacher forcing。并且可以在测试阶段申请beam-search用于transformer的解码器
在训练阶段将beam-search用于像transformers这样的现代架构并不是很流行。 (查看此 link 了解更多信息)
而训练阶段提到的 tutorial 教师强制,可以为您提供并行计算并在处理大型 vocabulary-list 任务时加快训练速度。
关于测试这样的解码器,你可以试试下面的步骤beam-search(只是根据我的理解提供一种可能性,可能会有更好的解决方案):
首先,您不能将整个地面真值序列作为解码器的输入,而只能提供“[SOS]”并填充其余位置。
尽管解码器的输出仍然是 [batch_size、max_sequence_len、vocab_size],但只有 (batch_size、0、vocab_size) 为您提供有用的信息和那是您的模型生成的第一个标记。 Select top b 令牌并添加到您的“[SOS]”序列。现在你有“[SOS] token(1,1)”, ..., “[SOS], token(1,b)”序列。
其次,使用上述序列作为解码器的输入,并在 b * vocab_size 选项中搜索顶部的 b 个标记。将它们添加到相应的序列中。
重复直到序列满足某些限制(max_ouput_length 或 [EOS])
P.S: 1) [SOS]或[EOS]表示序列的开始或结束。
2) token(i,j) 表示 sequencei-th token 的 top b tokens 中的 j-th token
根据我的理解(如果我错了请纠正我),Beam Search 是 BFS,它只探索 "graph" 向下的可能性 b 最多可能的选项,其中 b 是光束大小。
对于calculate/score每个选项,特别是对于我正在做的NLP领域的工作,我们基本上通过计算token的概率来计算可能性的分数,给定一切在它之前。
这在循环架构中是有意义的,在该架构中,您只需 运行 通过最好的 b 第一个标记来使用您的解码器的模型,以获得概率第二个标记,每个第一个标记。最终,你得到了有概率的序列,你只需要选择概率最高的序列。
但是,在 Transformer 架构中,模型没有这种循环,输出是词汇表中每个单词、序列中每个位置(批量大小、最大序列长度、词汇尺寸)。我如何解释 Beam Search 的这个输出?我可以得到输入序列的编码,但由于没有重复使用前一个输出作为下一个标记解码的输入,我该如何计算所有可能序列的概率,这些序列源于最好的 b 代币?
集束搜索的工作原理与循环模型完全相同。解码器不是循环的(它是 self-attentive),但它仍然是 auto-regressive,即生成一个标记以先前生成的标记为条件。
在训练时,self-attention 被屏蔽了,因此只关注当前生成的单词左侧的单词。它模拟了你在推理时的设置,当你确实只有左上下文时(因为右上下文还没有生成)。
唯一的区别是,在 RNN 解码器中,您只在每个波束搜索步骤中使用最后一个 RNN 状态。使用 Transformer,您始终需要保留整个假设并对整个左侧上下文执行 self-attention。
为您以后的问题和有相同问题的人添加更多信息:
I guess what I really want to ask is that, with an RNN architecture, in the decoder, I can feed it the b tokens that are highest in probability, to get the conditional probabilities of subsequent tokens. However, as I understand, from this tutorial here: tensorflow.org/beta/tutorials/text/…, I can't really do that for the Transformer architecture. Is that right? The decoder takes in the encoder outputs, the 2 masks and the target -- what would I input in for the parameter target?
你提到的网站上的教程在训练阶段使用了teacher forcing。并且可以在测试阶段申请beam-search用于transformer的解码器
在训练阶段将beam-search用于像transformers这样的现代架构并不是很流行。 (查看此 link 了解更多信息) 而训练阶段提到的 tutorial 教师强制,可以为您提供并行计算并在处理大型 vocabulary-list 任务时加快训练速度。
关于测试这样的解码器,你可以试试下面的步骤beam-search(只是根据我的理解提供一种可能性,可能会有更好的解决方案):
首先,您不能将整个地面真值序列作为解码器的输入,而只能提供“[SOS]”并填充其余位置。 尽管解码器的输出仍然是 [batch_size、max_sequence_len、vocab_size],但只有 (batch_size、0、vocab_size) 为您提供有用的信息和那是您的模型生成的第一个标记。 Select top b 令牌并添加到您的“[SOS]”序列。现在你有“[SOS] token(1,1)”, ..., “[SOS], token(1,b)”序列。
其次,使用上述序列作为解码器的输入,并在 b * vocab_size 选项中搜索顶部的 b 个标记。将它们添加到相应的序列中。 重复直到序列满足某些限制(max_ouput_length 或 [EOS])
P.S: 1) [SOS]或[EOS]表示序列的开始或结束。 2) token(i,j) 表示 sequencei-th token 的 top b tokens 中的 j-th token