虽然我对光束搜索有很好的理解,但我对光束搜索有疑问。当我们选择n 条最佳路径时,我们应该对它们进行排序还是简单地保持它们存在的顺序并丢弃其他昂贵的节点?
我对此进行了很多搜索,但它说的每一个地方都保持最佳状态。我们应该对它们进行排序吗?
我认为我们应该对它们进行排序,因为通过应用排序,我们将很快到达目标节点。但是我想确认我的排序想法,直到现在我才找到它。
如果您能帮助我改进我的概念,我将不胜感激。
虽然我对光束搜索有很好的理解,但我对光束搜索有疑问。当我们选择n 条最佳路径时,我们应该对它们进行排序还是简单地保持它们存在的顺序并丢弃其他昂贵的节点?
我对此进行了很多搜索,但它说的每一个地方都保持最佳状态。我们应该对它们进行排序吗?
我认为我们应该对它们进行排序,因为通过应用排序,我们将很快到达目标节点。但是我想确认我的排序想法,直到现在我才找到它。
如果您能帮助我改进我的概念,我将不胜感激。
当我们选择 n 条最佳路径时,我们应该对它们进行排序还是简单地保持它们存在的顺序并丢弃其他昂贵的节点?
我们只是对它们进行排序并保留前 k 个。
在初始化后的每个步骤中,您对 beam_size * words_size 假设进行排序并选择前 k 个。对于每个 beam_size * words_size 假设,其权重/概率是沿其历史归一化长度(长度归一化)的所有概率的乘积。
一个问题源于完整的假设可能具有不同的长度这一事实。因为模型通常为较长的字符串分配较低的概率,所以一个简单的算法也会为 y 选择较短的字符串。在早期的解码步骤中,这不是问题;由于波束搜索的广度优先性质,所有被比较的假设都具有相同的长度。通常的解决方案是对每个假设应用某种形式的长度归一化,例如简单地将负对数概率除以单词数:
有关更多信息,请参阅此答案。
****束搜索使用广度优先搜索来构建其搜索树。在树的每一层,它生成当前层状态的所有后继,***
按启发式成本的递增顺序对它们进行排序
***。但是,它仅在每个级别存储预定数量的最佳状态(称为波束宽度)。接下来只扩展那些状态。光束宽度越大,修剪的状态就越少。使用无限的波束宽度,不会修剪任何状态,并且波束搜索与广度优先搜索相同。注意:(我在搜索过程中从 WikipediA 获得了此信息。)可能会有所帮助。****