ChatGPT的结果是如何生成的
大家在被ChatGPT的能力所震惊的同时,肯定也好奇它到底是如何生成结果的,其大致过程如下。
(1)输入处理:首先,将输入文本(如问题、提示等)转换为词汇表中对应的标记(token)。对于不同的语言,可能需要不同的词汇表和编码方式。这些标记会被进一步转换成词嵌入向量,用于模型的输入。
(2)编码器处理:输入向量序列号经过编码器的多层Transformer结构。在这个过程中,编码器通过自注意力机制来捕捉输入文本中的上下文信息,并生成一个连线的隐藏状态向量序列。
(3)解码器处理:接下来,解码器根据编码器生成的隐藏状态向量序列,逐个生成输出标记。解码器同样使用多层Transformer结构,并采用自注意力机制和编码器-解码器注意力机制来捕捉输入和输出之间的关系。在每个时间步,解码器都会输出一个概率分布,表示下一个标记的预测概率。
(4)采样与生成:在每个时间步,从解码器输出的概率分布中采样一个标记作为生成的下一个词。采样方法有多种,如贪婪采样、随机采样、Top-k采样等。采样过程会持续进行,直到生成特定的结束标记或达到预设的最大长度。
(5)输出处理:将生成的标记序列转回文本形式,作为最终输出结果。
ChatGPT的结果生成过程涉及的底层原理就是前面介绍过的。通过这个过程,我们能够看到各个核心概念在哪个环节发挥作用。以上展示的只是大致的技术流程。在实际应用中,还需要根据具体的任务和需求进行调整,如使用不同的采样方法、修改模型结构等。
对于非GPT开发人员,重点关注第(3)、第(4)步即可。GPT的结果是一个字(词)一个字(词)生成的,而不是一下子生成的。那具体每一个字(词)是怎么生成的?根据字(词)的概率分布。这个概率分布是模型通过对大量数据集进行学习后得到的。我们来看一个具体的例子。
假设已知第一个字是“你”,第二个字该输出什么呢?通过分析大量的文本数据,可以得到”你“和各个字的组合, 比如下图所示的搜索引擎智能推荐结果中:”你“+”也“(4次)、”你“+”好“(2次)、”你“+”却“(1次)、”你“+”我“(1次)、”你“+”微“(1次)、“你”+“给”(1次)。通过对各种组合进行统计,能够得到”你“后面各个字的概率分布情况。之后我们就可以从这个分布中抽取结果了。
那应该如何从这个分布中抽取最终结果呢?答案是,按照概率随机抽取,概率越大的字被抽中的可能性越大;但因为是随机抽取,所以结果不一定是概率最大的字。为什么要这样做,而不是直接用概率最大的字作为最终结果,这主要是为了保证结果的多样性。但这么做有一个弊端,就是同样的问题得到的结果可能不一样,因为无法保证每次随机抽取的结果都一样。
另外需要注意一点,ChatGPT的结果是根据字(词)的概率分布生成的,而不是直接通过搜索引擎得到的, 所以生成结果的准确性无法保证,需要人工进行判断。