生成式AI入门与AWS实战
上QQ阅读APP看书,第一时间看更新

2.7 推理配置参数

在本节中,我们将探讨一些推理配置参数,它们能够对生成式模型在推理阶段生成文本的行为产生影响。如果你曾经在类似Amazon SageMaker或Bedrock这样的playground中使用过生成式模型,那么你可能已经熟悉图2-1所示的滑动条和其他的数值控制工具。

这些推理配置参数会影响模型对提示的响应。它们使得你能够对模型响应的长度和创造性进行细粒度的控制。

图2-1 控制模型输出的推理配置参数

各个模型都提供一组不同但经常互相重叠的推理配置参数。这些参数在不同模型中的命名通常很相似,以方便你尝试不同模型进行推理。以下是一些常见的推理配置参数。

新token的最大数量

这是最为直观且易于操作的参数之一。你可以使用这个参数来控制模型生成的新token的数量。这是一种基本的方法,用以确保模型生成的响应简洁,避免不必要的冗长。需要注意的是,生成更多的token通常意味着需要消耗更多的计算资源,这也可能意味着推理时间延长。此外,还应留意,减少新生成的最大token数并不是一个防止模型产生幻觉的有效机制,它可能仅仅是通过缩短生成内容的长度来掩盖幻觉现象。

贪婪采样与随机采样

在模型推理过程中,首先模型会为其已有词表中的所有token计算一个概率分布。然后,模型会从这个概率分布中选择或采样一个单一的token,并将其作为序列中的下一个输出token包含在响应中。

对于每次推理请求,你可以配置模型选用贪婪采样或随机采样来确定下一个token。采用贪婪采样策略时,模型会选取概率最高的token;当使用随机采样策略时,模型会根据所有预测的token的概率,结合随机加权的方法来决定下一个token。图2-2展示了对于短语“the student learns from the professor and her lectures”的不同采样方法。

在大多数生成式AI模型的推理过程中,贪婪采样也称为贪婪解码,通常是默认的方法。作为预测下一个token的最简单的手段,模型总是偏好选择概率最高的词。尽管这种方法在进行非常简短的文本生成时效果不错,但它也可能导致生成的文本中出现重复的token或者token序列。

图2-2 用贪婪采样与随机采样来预测概率分布中的下一个token

为了生成更自然流畅的文本,并减少重复出现的token,你可以在推理过程中配置模型使用随机采样策略。这样,模型将根据概率分布,运用加权方法来随机决定下一个token。以前面提到的token“student”为例,它的概率为0.02。在随机采样策略下,这表示该词被选中的概率为2%。

通过随机采样,可以降低模型在生成文本时出现重复token的可能性。然而,权衡之处在于,模型输出可能过于创意化,生成偏离主题或难以理解的响应。寻找最优组合设置,让生成式AI模型生成高质量响应也正是“提示工程”这一术语的由来。

在使用某些库时,例如Hugging Face的transformers,你可能需要显式地关闭贪婪采样,并利用类似于do_sample=True这样的函数参数来手动启动随机采样功能。

top-p和top-k随机采样

这两个参数是在进行随机采样时常见的推理参数,它们为随机采样提供了更细粒度的控制选项。恰当地运用这两个参数,不仅能够确保模型具有足够的创造性来完成任务,而且能够显著提升模型的响应水平。

你可能已经猜到,top-k是将模型的选择范围限定在概率最高的前k个token之内,并从中随机抽取一个token。例如,假设k设为3,模型将使用加权随机采样在概率最高的前3个token中进行选择。在这个示例中,尽管存在其他两个选项,但是模型还是随机选择“from”作为下一个token,如图2-3所示。

图2-3 top-k随机采样将模型限制为从概率最高的前3个token中做出选择

请注意,将top-k设定为一个较大的数值有助于降低文本生成过程中的token重复现象。相反,如果将top-k设置为1,则基本上等同于贪婪采样。

top-p限定了模型只能在累积概率不超过某个特定值p的token集合中进行随机采样,这会从概率最高的token开始,依次考虑概率较低的token。为了更直观地理解这一点,我们首先根据概率的高低将所有可能的token进行降序排列。然后从这些token中选取一个子集,这个子集中的token累积起来的概率总和不会超过设定的阈值p

例如,如果p=0.32,选项是“learns”“from”和“student”,它们的概率分别是0.20、0.10和0.02,则累积概率为0.32。模型随后使用加权随机采样从这个子集中选择下一个token——在这个示例中是“student”,如图2-4所示。

图2-4 top-p随机概率加权

top-p能够带来更高的多样性,特别适用于难以选定一个合适top-k的情况。同时,top-p和top-k这两个参数还可以结合使用,以获得更好的效果。

temperature通过调整下一个token的概率分布的形状,有助于控制模型输出的随机性。通常,temperature设置越大,输出的随机性就越大;temperature设置越小,输出的随机性则越小。

与top-k和top-p不同,改变temperature实际上会改变下一个token的概率分布,这最终会影响对下一个token的预测。

低temperature(如小于1)会导致概率集中在较小的token子集上,从而产生更强的概率峰值。高temperature(如大于1)会导致下一个token的概率分布更加平坦,概率在各个token之间分布更均匀。将temperature设置为1,将保持下一个token的概率分布不变,这代表模型在训练和微调期间所学习的概率分布。

图2-5比较了低temperature和高temperature的情况。

无论是在哪一种情况下,模型都是通过贪婪采样或随机采样从调整后的概率分布中挑选出下一个token,这一过程与temperature是相互独立的。

需要注意的是,如果temperature设置得过小,可能会导致模型在文本生成中出现更多的重复内容;如果temperature设置得过大,则可能会导致模型产生毫无意义的输出结果。因此,通常建议从temperature为1开始尝试,这是一个比较好的策略。

图2-5 改变temperature后将改变下一个token的概率分布