363 字
2 分钟
beam search
2025-03-11

llm 是一种语言模型,建模下一个 token 的条件概率。既然是一种局部的概率生成模型,那么就可以对整个输出空间做探索,最简单的方式就是每次都选概率最大的那个,也就是贪心解码或者 temperatrue=0,通常应用于

  • 【R1】Benchmark 中
  • 【R2】希望输出无随机性的场景中,(虽然现在不少 API 不保证也无法实现这点)
  • 【R3】希望通过通过倾向于更高概率 token 来提升结果的准确性。

Beam search#

Beam search 是贪心解码的一个自然扩展,通过在探索过程中保存更多的状态来试图寻找更高概率的输出序列,并可以给出已经探索到的 Top K 的序列。通过 beam search 寻找更高概率的序列似乎不错,是一种降低大模型幻觉的方式。但实际用过 beam search 做序列生成的人会知道,在一些条件下它并不能实现期望的目标:

  • 【C1】序列的粒度太过细碎,且对于同样的内容的表达方式很多时
  • 【C2】整个生成的空间太大,且中间包含一些小概率的局部“山峰” 其中 c1 会导致对一个意思的多种表述探索上。c2 类似于只有水填满了环形山后,它才能从环形上上的某个缺口溢出。
beam search
https://fuwari.vercel.app/posts/machinelearning/nlp/llm/beam-search/
作者
FlyingWhite
发布于
2025-03-11
许可协议
CC BY-NC-SA 4.0