最近在做数学公式识别因用到beamsearch所以记录一下beamsearch的计算过程。

概念:Beam Search(集束搜索)是一种启发式图搜索算法,通常用在图的解空间比较大的情况下,为了减少搜索所占用的空间和时间,在每一步深度扩展的时候,剪掉一些质量比较差的结点,保留下一些质量较高的结点。这样减少了空间消耗,并提高了时间效率。

计算过程:假设当前词表有5个词,[a b c d e ],开始符为S,终止符为T,beamsize设为3。因为我用到的模型是RNN所以在开始时要先给一个开始符,RNN的原理是要利用前面步骤生成的符号以及当前步骤的隐状态预测出当前步骤的符号一直到预测出终止符结束。

第一个符号为S(开始符),RNN利用开始符进行第一次的预测,假设预测出的结果自信度是{a:0.2,b:0.3,c:0.1d:0.1,e:0.3},因为beamsize是3所以要选出结果中自信度最大的前三个:b e a,然后现在就有了三个序列,{sb:0.3,se:0.3,sa:0.2}(后边的值是序列的自信度)。然后在进行第二次的预测的时候将上一步的三个序列分别输入RNN生成对应的结果,共有15个,然后将前面的三个序列和当前结果组合生成15个序列{sba:0.03,sbb:0.06,sbc:0.12...............sae:0.04}然后从当前15个序列中选择自信度最大的三个作为新的三个序列,sbc, sec,sac,然后继续重复上述过程直到遇到终止符或者达到最大预测长度,最终beamsearch生成3个结果序列。

 

Beamsearch集束搜索

如上图所示,beamsearch一直都只生成三个序列,一直重复图中的计算过程直到预测出截止符。上图中的自信度是我随机写的可能与上一段文字说明的不太一样,这无关紧要只是帮助理解而已。

代码样例:https://github.com/allenai/allennlp/blob/master/allennlp/nn/beam_search.py

相关文章:

  • 2021-06-08
  • 2021-10-28
  • 2021-07-28
  • 2021-06-05
  • 2021-08-30
  • 2021-05-22
  • 2021-09-09
  • 2021-03-31
猜你喜欢
  • 2021-10-02
  • 2021-12-23
  • 2021-04-27
  • 2022-12-23
  • 2021-10-14
  • 2021-05-11
  • 2021-05-26
相关资源
相似解决方案