ChatGPT模型中的惩罚机制
上一篇文章《ChatGPT模型采样算法详解》为大家详细介绍了对文本生成效果至关重要的2种采样方法,以及他们的控制参数temperature
和top_p
的作用。ChatGPT中,除了采样,还有惩罚机制也能控制文本生成的多样性和创意性。本文将详细为大家讲解ChatGPT种的两种惩罚机制,以及对应的frequency_penalty
和presence_penalty
参数。
@[TOC]
概要
frequency_penalty - 频率惩罚
频率惩罚介于-2.0和2.0之间,它影响模型如何根据文本中词汇(token)的现有频率惩罚新词汇(token)。
正值将通过惩罚已经频繁使用的词来降低模型一行中重复用词的可能性。
频率惩罚则与特定token的采样频率成比例地发挥作用;而存在惩罚是种一次性的附加效用,作用于至少采样一次的所有token。
为了稍微减少输出中的重复词语,惩罚系数的合理值通常约为0.1至1。
如果目标是显著抑制重复,系数可以增加到2,但这可能会对输出的质量产生负面影响。
相反,使用负值可以增加重复的可能性。
presence_penalty - 存在惩罚
存在惩罚介于-2.0和2.0之间,它影响模型如何根据到目前为止是否出现在文本中来惩罚新token。
正值将通过惩罚已经使用的词,增加模型谈论新主题的可能性。
存在惩罚是种一次性的附加效用,作用于至少采样一次的所有token;而频率惩罚则与特定token的采样频率成比例地发挥作用。
通常,存在惩罚的默认值为0,当希望使用输入中的单词生成与输入提示一致的文本时,使用该值。
另一方面,如果希望模型不受输入限制,那么可以使用更大的存在惩罚,这将鼓励模型生成输入中不存在的新词,从而允许更多样化和创造性的输出。
频率惩罚对生成文本多样性和创意性的影响
频率惩罚参数控制GPT-3模型生成文本的“多样性”。通过该参数可以调节生成文本的似然度与新颖度。
GPT-3和其他语言模型一样,使用概率分布来预测给定提示的下一个词。频率惩罚参数修改该分布,使模型在其训练期间更频繁地看到的不同的词,从而鼓励模型生成新颖或不太常见的词。
实际工作中,频率惩罚作为缩放因子作用于模型预测的对数概率上,形式如下:
$$
(1 – frequency_penalty) * log_probability
$$
- 当频率惩罚为0时,模型的行为不受影响;
- 当频率惩罚为1时,训练过程中看到的任何词汇都不会用到,从而生成完全新颖的或随机的文本;
- 当频率惩罚介于0和1之间时,模型会在熟悉词和新颖词之前取得平衡。
通常,频率惩罚的默认值为0,当你希望生成与模型训练时使用的文本类似的文本时使用该值。
另一方面,如果你希望模型生成更多样化和更少重复的文本,你可以使用更大频率惩罚,这将鼓励模型减少常用词的使用,并降低生成常见短语的可能性。
频率惩罚与存在惩罚的区别
这两个参数之间的主要区别在于它们修改模型预测概率分布的方式不同。
频率惩罚参数修改概率分布,以生成模型在训练过程中不常见的词。这鼓励模型生成新颖或不太常见的词。它的工作原理是缩放模型在训练过程中常见词的对数概率,从而降低模型生成这些常见词的可能性。
而存在惩罚参数修改概率分布,以使输入提示中出现的词不太可能出现在输出中。这鼓励模型生成输入中没有的词。它的工作原理是缩放输入中存在词的对数概率,使模型不太可能生成输入中已经存在的单词。
简单地说,频率惩罚控制模型输出用词的新颖性,而存在惩罚控制模型谈论新主题的可能性。
总之,这两个参数都可以用于增加生成文本的多样性,并鼓励模型生成更多新颖或意外的词。但它们以不同的方式实现,并且取决于用例和具体要求,一个可能比另一个更有益,或者它们可以一起用于控制生成的文本多样性。
总结
采样+惩罚相辅相成,可以很好地控制ChatGPT生成文本的风格和质量。实际使用中大家可以根据自己的需求和期望输出文本的风格及质量,灵活地设定 temperature
或 top_p
,以及 frequency_penalty
和 presence_penalty
。如果不知道这些参数设多少合适,可以参考Open AI官方给出的例子,里面对每种任务或场景都给出了建议的参数值。