python - Python 中的束搜索

标签 python tensorflow deep-learning keras beam-search

我正在 Keras 中实现一个 Seq2Seq 模型。但是,他们没有在解码器中提供波束搜索选项。因此,我考虑了 pynlpl 的 BeamSearch,但他们的搜索文档找到了 here没有关于如何实现它的任何信息。您能否举例说明束搜索是如何实现的?

这里有一个类似的答案:How to implement a custom beam search in TensorFlow? 但是,还不清楚。

最佳答案

一般来说你可以这样做:

  1. 在第一个维度中将原始批处理平铺 beam_size 次,包括输出(用于注意的编码输出和编码器的最终状态作为初始解码器状态)。每个波束大小的重复样本记为 beam_i。

  2. 进行一步解码,并从每个 beam_i 的词汇量大小的输出中获得相应的顶部 beam_size * 2 索引和概率。

  3. 保留每个生成字符的先前概率,并计算这些概率的平均概率和您从步骤 2 中获得的最后一个概率,并获得顶部的 beam_size 个字符。

  4. 将遇到 stop_decode 符号的样本放入列表中,如果列表的长度达到每个 beam_i 的波束大小,则波束结束。

不过有点抽象,可以引用this (official) example求助。它由 Denny Britz 实现来自谷歌和this very simple one .

关于python - Python 中的束搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45108926/

相关文章:

python - 具有任意数量输入 channel (多于 RGB)的卷积神经网络架构

python - Tensorflow - 范围明智回归损失

machine-learning - 当输入大小不同时如何进行机器学习?

deep-learning - 有状态双向 RNN 如何在 Keras 中工作

machine-learning - 替换卡住 Tensorflow 模型中的节点

python - PDF 出血检测

python - 如何用 Python 伪造类型

python - 测试精度为 98% 的模型的混淆矩阵不准确

python - 使用 Jquery $.ajax 在 Flask 上调用服务器端函数

python - 我怎样才能在 rethinkDB 中做一些矩阵加法?