top_k,不管是greedysearch,还是beamsearch,对于固定输入,模型的输出是固定不变的,这就显得比较单调,为了增加模型输出的多样性,人们提出了top-k采样策略,其不像greedysearch那样每次取分数最高的,而是先选出分数最高的k个,然后将其分数作为权重进行随机采样,得到下一个Token。这也就引入了随机性,每次预测的结果都可能不一样。
temperature事实上,在top_k和top_p的采样中并不是完全按照分数权重来采样的,一般采样前我们会将候选Token的得分向量经过softmax(公式如下图)转换为概率,然后按照概率分布采样。
repetition_penalty(重复惩罚),这个选项最早是由A Conditional Transformer Language Model for Controllable Generation中提出的,其是为了解决语言模型中重复生成的问题,即使比较大的LLM也会存在。其思想比较简单,就是记录之前已经生成过的Token,当预测下一个Token时,人为降低已经生成过的Token的分数,使其被采样到的概率降低。
通过以上的介绍,大概知道了各个参数的含义,整体来说:
GreedySearch是最简单、最直接的方式,其可以保证稳定的输出,相应的,BeamSearch可以进一步提升生成效果,但是代价更高,也是可以保证稳定的输出。
top_p和top_k都可以用于增加模型生成结果的多样性,输出结果往往会变。
温度系数temperature一般用于控制随机性,temperature越大,随机性越强,temperature越小,随机性越弱。
重复惩罚repetition_penalty用于避免模型一直输出重复的结果,repetition_penalty越大,出现重复性可能越小,repetition_penalty越小,出现重复性可能越大。