解码之Beam Search算法
解码是seq2seq模型的常见问题,常用方法有贪心搜索(Greedy Search)集束搜索(Beam Search)。简单贪心搜索From [1]如图,Decoder根据Encoder的中间语义编码向量ccc和<s>标签得到第一个输出的概率分布[0.1,0.1,0.3,0.4,0.1][0.1,0.1,0.3,0.4,0.1][0.1, 0.1, 0.3, 0.4,
解码是seq2seq模型的常见问题,常用方法有贪心搜索(Greedy Search)集束搜索(Beam Search)。
简单贪心搜索
From [1]
如图,Decoder根据Encoder的中间语义编码向量 c c <script type="math/tex" id="MathJax-Element-398">c</script>和<s>标签得到第一个输出的概率分布
<script type="math/tex" id="MathJax-Element-399">[0.1, 0.1, 0.3, 0.4, 0.1]</script>,选择概率最大的0.4,即moi。
根据隐向量 h1 h 1 <script type="math/tex" id="MathJax-Element-400">h_1</script>和moi得到第二个输出的概率分布 [0.1,0.1,0.1,0.1,0.6] [ 0.1 , 0.1 , 0.1 , 0.1 , 0.6 ] <script type="math/tex" id="MathJax-Element-401">[0.1, 0.1, 0.1, 0.1, 0.6]</script>,选择概率最大的0.6,即suis。
以此类推,直到遇到<\s>标签,得到最终的序列moi suis étudiant。
集束搜索
上面的贪心搜索只选择了概率最大的一个,而集束搜索则选择了概率最大的前k个。这个k值也叫做集束宽度(Beam Width)。
还是以上面的例子作为说明,k值等于2,则集束搜索的过程如下图:

得到第一个输出的概率分布 [0.1,0.1,0.3,0.4,0.1] [ 0.1 , 0.1 , 0.3 , 0.4 , 0.1 ] <script type="math/tex" id="MathJax-Element-410">[0.1,0.1,0.3,0.4,0.1]</script>,选择概率最大的前两个,0.3和0.4,即Je和moi。
然后Je和moi分别作为Decoder的输入,得到两个概率分布,然后再选择概率和最大的前两个序列,0.3+0.8和0.4+0.6,即Je suis和moi suis。
以此类推,最终可以得到两个序列,即Je suis étudiant和moi suis étudiant,很明显前者的概率和最大,为2.2,所以这个序列是最终得到的结果。
集束搜索本质上也是贪心的思想,只不过它考虑了更多的候选搜索空间,因此可以得到更多的翻译结果。
References
更多推荐


所有评论(0)