我在Keras中实现了Seq2Seq模型。但是,他们还没有在解码器中提供波束搜索选项。因此,我考虑了pynlpl的BeamSearch,但是他们的搜索文档here没有关于如何实现它的任何信息。您能否举一个例子来说明波束搜索是如何实现的?使用Python搜索光标
这里有一个类似的答案:How to implement a custom beam search in TensorFlow? 但是,它不清楚。
我在Keras中实现了Seq2Seq模型。但是,他们还没有在解码器中提供波束搜索选项。因此,我考虑了pynlpl的BeamSearch,但是他们的搜索文档here没有关于如何实现它的任何信息。您能否举一个例子来说明波束搜索是如何实现的?使用Python搜索光标
这里有一个类似的答案:How to implement a custom beam search in TensorFlow? 但是,它不清楚。
一般来说,你可以这样做:
瓷砖产地批第一维由beam_size倍,包括输出(编码输出的关注和编码器的最终状态作为初始解码器州)。每个波束大小的重复样本被标注为beam_i。
完成解码的一个步骤并从每个beam_i的词汇大小输出中相应地获得顶部beam_size * 2索引和概率。
保留每个生成角色的先前概率,并用这些概率和从步骤2获得的最后概率计算平均概率,并获得顶部beam_size字符。
将遇到stop_decode符号的样本放入列表中,如果列表的长度达到每个beam_i的波束大小,则波束结束。
但它是一个有点过于抽象,因此你可以参考this (official) example寻求帮助。它由谷歌的Denny Britz执行。