11 生成过程之采样与生成
在上篇中,我们探讨了生成过程的输入处理。了解了模型如何将用户输入转化为可理解的格式,而这一过程为后续的生成环节打下了良好的基础。在本篇中,我们将关注于生成过程中的“采样”机制,以及模型是如何利用这些机制产生最终文本的。
生成过程中的采样
在理解生成过程之前,我们需要首先明确生成模型的基本工作原理。ChatGPT等生成模型是通过对大量文本进行训练,从而学习文本的分布特征。在生成过程中,模型会基于一定的输入(上文),不断预测下一个可能出现的词(token),直到生成完整的响应。
一、采样方法
在生成文本时,主要有几种不同的采样方法来选择下一个词:
最大似然估计(Greedy Search):
- 在每一步选择概率最高的词作为下一个输出。虽然简单且快速,但可能导致产生缺乏多样性和创新性的文本。
示例代码:
1
2def greedy_search(logits):
return torch.argmax(logits).item()随机采样(Random Sampling):
- 从模型输出的概率分布中随机选择下一个词。这种方法可以增加生成文本的多样性。
示例代码:
1
2
3def random_sampling(logits):
probabilities = softmax(logits)
return np.random.choice(range(len(probabilities)), p=probabilities)温度采样(Temperature Sampling):
- 通过调整预测分布的“温度”来控制生成文本的随机性。当温度为1时,模型保持原有的分布;当温度小于1时,模型更倾向于选择高概率词,导致文本更加保守;而当温度大于1时,模型则更可能选择低概率词,导致文本多样性增加。
示例代码:
1
2
3
4def temperature_sampling(logits, temperature=1.0):
logits /= temperature
probabilities = softmax(logits)
return np.random.choice(range(len(probabilities)), p=probabilities)
二、生成过程
当输入经过处理后,我们进入生成阶段。此时,模型会根据上文逐词生成内容。以下是生成过程的简要总结:
- 输入上文: 初始输入被转化为模型的内部表示。
- 循环预测:
- 模型根据当前词的上下文,计算下一个词的概率分布。
- 采用上述采样方法之一选定下一个词。
- 更新上下文,重复这一过程,直到满足终止条件(如生成特定长度的文本或遇到结束符)。
示例:生成一个短句
假设我们输入的上文是“今天天气真不错”,模型将逐步生成以下句子:
输入“今天天气真不错”,模型可能预测出:
- 高概率词:
好
- 次高概率词:
呀
- 高概率词:
假设我们采用随机采样,结果为
好
,然后上下文更新为“今天天气真不错好”。下一步再进行预测,假设采样得到
哦
,最终生成的句子为“今天天气真不错好哦”。
三、控制多样性生成的因素
接下来,我们将要触及的主题是如何通过调整算法的设置来控制生成文本的多样性。这些设置的调整允许开发者在需要有创意的内容生成与精准的、符合上下文的内容之间找到平衡,而这些将会在下篇中详细讲解,特别是关于“温度与多样性控制”的部分。
通过本篇的学习,我们掌握了生成过程中的“采样”概念,了解了不同的采样方法如何影响生成结果,以及这些结果是如何被串联生成完整句子的。希望您能带着这些知识,继续深入本系列的下一个主题,并进一步探索生成模型的魅力与奥秘。
11 生成过程之采样与生成