为什么要用 top_p 做文本生成采样

上一篇文章介绍了在大模型生成文本时,一个可以控制的参数 Temperature 的作用:查看温度参数与 softmax,今天继续来看另一个同样可以控制文本输出效果的参数。

或许你在使用 OpenAI 的接口时,会碰到这个参数,那就是 top_p。

在很多关于算法的面试时,我们经常会被问排序算法,排序算法中有一个经典的问题,就是如何取出一堆数据中最大的 K 个值,这被称为 top_k 问题。

那在大模型生成文本的时候,top_p 又是什么呢?它和 top_k 有什么区别和联系呢?

1、什么是 Top-p

Top_p采样,也称为核采样(nucleus sampling),是一种在自然语言生成中使用的文本采样策略。

这里说的是一种采样策略,也就是从预测到的一堆可能的文本单词中,选择哪一个来作为最终输出的策略。

传统的 Top-k 采样

在 Top_k 采样中,语言模型在预测下一个单词时,只考虑概率最高的 k 个词。

然而这种方法是有缺点的,那就是它只会选择固定的概率最高的 k 个词作为备选,其余的词全部舍弃掉。

如此一来,就会使得生成的文本缺乏多样性,因为有些时候,即使是低概率的词也可能是与上下文相关的正确的选择。

Top-p 采样

为了克服这一限制,Top_p 采样选择一个概率阈值 p,然后从模型的预测分布中选择一个最小的词的集合,这个集合中的单词的概率总和至少为 p。

换句话说,你会从所有可能的单词中开始筛选并且放进一个备选集合,筛选的步骤的为:

从最高概率的词开始选择,依次为第二高概率的词,然后是第三高概率的词,并且选择的过程中不断累加这些词的概率,直到累加概率达到或超过阈值p,然后将这些词作为备选放进一个集合。

(漫画由 AIGC 生成)

2、举个例子

假设一个语言模型预测的下一个词的概率分布如下,接下来将对比分别使用 top_k 和 top_p 这两种采样方法,如何从这些备选词中选择词汇的。

词        概率
the       0.20
of        0.18
and       0.15
whale     0.10
ocean     0.08
aquarium  0.07
to        0.06
in        0.05
a         0.04
an        0.03
...

Top-k 采样(假设 k=5 )

在top_k采样中,模型将只从概率最高的 k 个词中选择:

  • the
  • of
  • and
  • whale
  • ocean

这样采样有一个很明显的缺点,它选择是固定数量的单词。

假设10个单词概率分布很均匀,便可能错过一些在特定上下文中非常合适的词,如在介绍水生生物的文章中, aquarium(水族馆) 很可能就是一个更加合适的词。

Top-p采样(假设 p=0.75 )

在top_p采样中,我们根据概率累积选择词汇,从概率最高的词开始累计,直到达到p值为止:

  • the (0.20)
  • of (0.18)
  • and (0.15)
  • whale (0.10)
  • ocean (0.08)
  • aquarium (0.07)

这些词的累积概率是0.78,超过了p的阈值0.75。

在top_p采样中,即使 aquarium 的概率不是最高的,它也会被包括在内,因为它有助于达到累积概率阈值。

3、两者的核心区别

  • top_k 是固定的:不管分布如何,top_k 总是选择固定数量的词,可能包括一些概率低但在当前上下文下并不合适的词,或者剔除了一些合适的词。
  • top_p 是灵活的:top_p 根据分布的累积概率选择词,它可以选择数量不固定的词,这使得在上下文中能够包含更合适的词汇。

总的来说,top_p 采样通过考虑累积概率而不是固定数量的词,能够更好地调整生成过程中的随机性和确定性,从而提高文本的连贯性和多样性。

这也是为什么在实际应用中,top_p 通常被认为是一种比  top_k 更优的选择。

本文首发于公众号:董董灿是个攻城狮。

猜你喜欢

转载自blog.csdn.net/dongtuoc/article/details/135042289