Greedy search
- 思路:直接选择分布中概率最大的token当作解码出来的词,但是该问题在于,总是选择概率最大的词,将会生成很多重复的句子
- 优点:计算简单高效
- 缺点:文本重复,没有多样性
Beam Search
而beam search是对贪心策略一个改进。思路也很简单,就是稍微放宽一些考察的范围。在每一个时间步,不再只保留当前分数最高的1个输出,而是保留num_beams个。当num_beams=1时集束搜索就退化成了贪心搜索。
下图是一个实际的例子,每个时间步有ABCDE共5种可能的输出,即,图中的num_beams=2,也就是说每个时间步都会保留到当前步为止条件概率最优的2个序列。
可以发现,beam search在每一步需要考察的候选人数量是贪心搜索的num_beams倍,因此是一种牺牲时间换性能的方法。
Top-k抽样
思路:从 tokens 里选择 k 个作为候选,然后根据它们的 likelihood scores 来采样模型从最可能的"k"个选项中随机选择一个,如果k=3,模型将从最可能的3个单词中选择一个
优点:Top-k 采样是对前面“贪心策略”的优化,它从排名前 k 的 token 中进行抽样,允许其他分数或概率较高的token 也有机会被选中。在很多情况下,这种抽样带来的随机性有助于提高生成质量。
缺点:在分布陡峭的时候仍会采样到概率小的单词,或者在分布平缓的时候只能采样到部分可用单词。k不太好选:k设置越大,生成的内容可能性越大;k设置越小,生成的内容越固定;设置为1时,和 greedy decoding 效果一样。
Top-p抽样
思路:候选词列表是动态的,从 tokens 里按百分比选择候选词,模型从累计概率大于或等于“p”的最小集合中随机选择一个,如果p=0.9,选择的单词集将是概率累计到0.9的那部分。
top-P采样方法往往与top-K采样方法结合使用,每次选取两者中最小的采样范围进行采样,可以减少预测分布过于平缓时采样到极小概率单词的几率。如果k和p都启用,则p在k之后起作用。
top-P越高,候选词越多,多样性越丰富。top-P越低,候选词越少,越稳定
优点:top-k 有一个缺陷,那就是“k 值取多少是最优的?”非常难确定。于是出现了动态设置 token 候选列表大小策略——即核采样(Nucleus Sampling)。
缺点:采样概率p设置太低模型的输出太固定,设置太高,模型输出太过混乱。
Temperature
思路:通过温度,在采样前调整每个词的概率分布。温度越低,概率分布差距越大,越容易采样到概率大的字。温度越高,概率分布差距越小,增加了低概率字被采样到的机会。
参数:temperature(取值范围:0-1)设的越高,生成文本的自由创作空间越大,更具多样性。温度越低,生成的文本越偏保守,更稳定。
一般来说,prompt 越长,描述得越清楚,模型生成的输出质量就越好,置信度越高,这时可以适当调高 temperature 的值;反过来,如果 prompt 很短,很含糊,这时再设置一个比较高的 temperature 值,模型的输出就很不稳定了。