beam search

假设词表大小为3,内容为a,b,c。beam size是2

decoder解码的时候:

1: 生成第1个词的时候,选择概率最大的2个词,假设为a,c,概率分别为log(p(1_a))   log(p(1_c))

那么当前序列就是a,c,对应的概率是
log(p1_0)=log(p(1_a))
log(p1_1)= log(p(1_c))

2:生成第2个词的时候,假如当前对三个词的概率预测为  log(p(2_a))  log(p(2_b))  log(p(2_c))


我们将当前序列a和c,分别与词表中的所有词进行组合,得到新的6个序列aa ab ac ca cb cc,
计算他们的概率。
aa:log(p1_0)+log(p(2_a))
ab:log(p1_0)+log(p(2_b))
ac:log(p1_0)+log(p(2_c))
ca:log(p1_1)+log(p(2_a))
cb:log(p1_1)+log(p(2_a))
cc:log(p1_1)+log(p(2_a))


然后从其中选择2个概率最高的组合,作为当前序列,假如为aa cb  ,
那么
log(p2_0)=log(p1_0)+log(p(2_a))
log(p2_1)=log(p1_1)+log(p(2_a)) 

3:后面会不断重复这个过程,直到遇到结束符为止。最终输出2个概率最高的序列。

配图如下:

大箭头的方向,即为按照累加概率选择出最后的beam_size个caption的过程。

为什么在计算概率的时候,我们把概率p用log的形式来表示?

在beam search的时候,对于每个时刻我们都计算当前时刻beam size个候选序列的概率。每一个候选序列的概率是前面所有时刻的概率的累乘。

因为如果概率很小,几个概率做累乘,结果就会变得可以忽略不计。而采用log的形式来表示概率,就把乘法转化为了加法。

不会存在这个问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值