贪婪柱搜索 beam_search

Beam Search 是一种受限的宽度优先搜索方法,每个时间步选择 K 个候选预测序列

其原理描述如下:

贪婪柱搜索beam_search-20241202183745

  • 假设束宽 K=2,时间步 t 0 预测输出 [我、爱、你] 三个 token,按照概率,选择 [我、你] 两个作为 t 0 的预测,并输入 LLM 预测下一时间步
  • 下一时间步输出后,可能链路有 [我我、我爱、我你、你我、你爱、你你],通用选择其联合概率最大的 K 个,本例是 [我爱、你爱]
  • 同理,分析下一时间步的预测

Beam Search 倾向输出短序列

因为随着链路的加长,不断乘上小于 1 的概率,整体得分会不断变小,所以:总体上短链路得分高于长链路,为此对 Beam Search 进行基于文本长度的惩罚项来解决这个问题

S=S(len(y1,y2...,yn)+1)length_penaltyS^*=\frac{S}{(len(y_1,y_2...,y_n)+1)^{length\_penalty}}

S 是初始得分,由于 S 是负数,乘上小于 1 的数后,S * 会变大。因此 length_penalty<1,则使得更加倾向短文本,length_penalty>1 则更倾向使用长文本

除此之外,还存在 重复问题无限生成序列问题