上一篇文章介绍了在大模型生成文本时,一个可以控制的参数 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 更优的选择。
本文首发于公众号:董董灿是个攻城狮。