tf.contrib.seq2seq.BeamSearchDecoder输出各元素形状咨询
嘿,刚好对这个旧版TensorFlow的beam search解码器有印象,我来给你拆解tf.contrib.seq2seq.BeamSearchDecoderOutput里三个字段的形状细节:
BeamSearchDecoderOutput各字段形状说明
首先要明确:这个类是每一步解码过程中输出的单步结果,三个字段的形状都是基于当前step的,具体如下:
scores:形状为
[batch_size, beam_width]
每个元素对应当前batch里,每个beam候选到这一步为止的累积得分——beam search就是靠这个得分来筛选每一步的top-k候选的。predicted_ids:形状为
[batch_size, beam_width]
存储当前step每个beam预测出的token ID,每个批量样本对应beam_width个并行的候选预测结果。parent_ids:形状为
[batch_size, beam_width]
这个是用来回溯路径的关键字段,记录当前step每个beam对应的上一步beam的索引。比如你要还原某个beam的完整生成序列,就可以通过这个字段一步步倒推,找到每一步的来源候选,直到解码起始点。
补充:最终解码结果的形状
如果你是通过tf.contrib.seq2seq.dynamic_decode拿到整个解码过程的最终结果(final_outputs),那里面的predicted_ids会包含整个序列的信息,形状是 [max_decoder_steps, batch_size, beam_width]。通常我们会用转置操作把它调整成[batch_size, beam_width, max_decoder_steps],这样更方便处理每个样本的所有beam生成序列。
内容的提问来源于stack exchange,提问作者lifang

