欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

用良好的语言进行建模:分析温度、top-p 和其他核心参数-02 质量、多样性和温度

最编程 2024-07-18 09:38:33
...

但是,为什么我们会想要选择第二好的token、第三好的token,或者除了最好的token以外的其他token呢?难道我们不希望每次都选择最好的token(及具有最高可能性分数的token)吗?通常情况下,我们确实会这样进行。但是,如果我们每次都选择生成最好的回复,那么我们每次都将得到相同的回复。如果我们想要得到多种多样的回复,我们可能不得不放弃一些回复内容的质量来获得回复的多样性。这种为了多样性而牺牲质量的做法被称为质量与多样性的权衡(quality-diversity tradeoff)。

在这种情况下,temperature这个参数可以告诉机器如何在质量和多样性之间进行权衡。较低的 temperature 意味着更高的质量,而较高的 temperature 意味着更高的多样性。当 temperature 设置为零时,模型总是会选择具有最高可能性分数的token,从而导致模型生成的回复缺乏多样性,但却能确保总是选择模型评估出的最高质量的token来生成回复。

很多时候,我们都希望将 temperature 设置为零。原则上,对于只需要向模型传递一次的任何提示语,都应该将 temperature 设置为零,因为这样最有可能得到一个高质量的回复。在我进行的数据分析工作中,对于实体提取(entity extraction)、事实提取(fact extraction)、情感分析(sentiment analysis)和大多数其他标准任务都设置temperature 为零。

在较高的 temperature 下,通常会看到更多的垃圾内容和幻觉内容,连贯性较差,生成的回复质量可能会降低,但同时也会看到更多具有创造性和多样性的回复。我们建议仅在需要获得多个不同答案的情况下,才使用非零的 temperature。

较高的 temperature 带来了回答的多样性和创造性,但也会增加垃圾内容、不连贯和幻觉。

图片由Echo Lu[1]创建。

为什么我们会希望对同一个提示语(prompt)获得两个不同的回答呢?在某些情况下,对同一个提示语生成多个回复并仅保留最佳回复可能是比较好的。例如,有一种技术可以让我们对一个提示语生成多个回复,并只保留最好的回复,这通常会比在 temperature 为零时的单个查询产生更好的结果。另一个使用场景是生成人工合成的数据:我们会希望有许多不同的合成数据点(synthetic data points),而不仅是只有一个非常好的数据点(data point)。可能会在以后的文章中讨论这种情况(以及其他情况),但更常见的情况是,我们只希望每个提示语有一个回复。当你不确定应该如何选择 temperature 时,选择 temperature 为零通常是一个安全的选择。

需要注意的是,虽然理论上 temperature 为零应该每次产生相同的答案,但在实践中可能并非如此! 这是因为模型运行在 GPU 上,可能容易出现微小的计算错误,例如四舍五入产生的误差。即使在 temperature 为零的情况下,这些误差会在计算中引入低水平的随机性。由于更改文本中的一个token可能会大大改变文本的含义,一个微小的错误可能会导致文本后序的token选择发生级联变化,从而导致几乎完全不同的输出结果。但请放心,这通常对质量的影响微乎其微。我们提到这一点,只是以免让你在 temperature 为零时输出结果出现一些随机性而感到惊讶。

有很多方法可以让模型在质量和多样性之间进行权衡,而不是仅受 temperature 的影响。在下一节中,我们将讨论对 temperature 选择技术的一些修改。但是,如果您对将 temperature 设置为 0 很满意,可以暂时跳过这部分内容。在 temperature 为零时这些参数不会影响模型的回复,您可以放心地设置。

简而言之:增加 temperature 可以增加模型输出的随机性,从而提高了回复的多样性,但降低了质量。