type
Post
status
Published
date
Dec 3, 2023
slug
summary
ChatGPT能够自动生成看起来很像人类写作的文本,这非常了不起且出乎意料。但是它是如何做到的?我的目的在于概述ChatGPT内部进行的过程,然后探讨它为什么能够成功地生成我们认为有意义的文本。我首先声明,我将集中讨论整体情况,并提到一些工程细节,但不会深入探讨它们。同时,我说的要点同样适用于其他当前的"大型语言模型”(LLMs),不仅仅限于ChatGPT。
tags
ChatGPT相关
AI教程
推荐
AI知识库
category
ChatGPT
icon
password
Files & media
只需一次添加一个单词
ChatGPT可以自动生成一些读起来就像人类书写的文本一样的东西,这是了不起的,也是出乎意料的。但它是如何做到的呢?为什么它有效?我在这里的目的是粗略地概述 ChatGPT 内部正在发生的事情,然后探索为什么它可以很好地生成我们认为有意义的文本。我应该在一开始就说,我将重点关注正在发生的事情的大局,虽然我会提到一些工程细节,但我不会深入探讨它们。(我所说的本质同样适用于其他当前的“大型语言模型”[LLM] 和 ChatGPT。)
首先要解释的是,ChatGPT 从根本上一直在尝试做的是对迄今为止所获得的任何文本进行“合理的延续”,其中“合理”的意思是“人们在看到人们写的内容后可能期望某人写什么”已经写在数十亿个网页上,等等。”
假设我们已经得到了文本“人工智能最好的事情是它的能力”。想象一下,扫描数十亿页的人类书写文本(例如在网络上和数字化书籍中)并找到该文本的所有实例,然后查看接下来出现的单词是什么时间。ChatGPT 有效地做了类似的事情,除了(正如我将解释的)它不查看文字文本;它寻找某种意义上“意义匹配”的事物。但最终的结果是,它生成了一个可能跟随的单词的排名列表,以及“概率”:

值得注意的是,当 ChatGPT 做类似写文章之类的事情时,它本质上只是一遍又一遍地询问“给定到目前为止的文本,下一个单词应该是什么?”,并且每次都添加一个单词。(更准确地说,正如我将解释的那样,它添加了一个“标记”,它可能只是单词的一部分,这就是为什么它有时可以“组成新单词”。)
但是,好吧,在每一步它都会得到一个带有概率的单词列表。但它实际上应该选择哪一篇来添加到它正在写的文章(或其他内容)中呢?人们可能认为它应该是“排名最高”的单词(即被分配最高“概率”的单词)。但这就是一点巫毒开始蔓延的地方。因为出于某种原因——也许有一天我们会对它有一个科学式的理解——如果我们总是选择排名最高的单词,我们通常会得到一个非常好的单词。 “平淡”的文章,似乎从来没有“表现出任何创造力”(甚至有时逐字重复)。但如果有时(随机)我们选择排名较低的单词,我们会得到一篇“更有趣”的文章。
事实上,这里存在随机性,这意味着如果我们多次使用相同的提示,我们每次都可能得到不同的文章。而且,为了与 voodoo 的思想保持一致,有一个特殊的所谓“温度”参数,它决定了排名较低的单词的使用频率,对于论文生成,事实证明 0.8 的“温度”似乎是最好的。(值得强调的是,这里没有使用“理论”;这只是在实践中发现有效的问题。例如,“温度”的概念之所以存在,是因为碰巧使用了统计物理学中熟悉的指数分布,但不存在“物理”联系——至少据我们所知。)
在我们继续之前,我应该解释一下,为了说明的目的,我基本上不会使用ChatGPT 中的完整系统;相反,我通常会使用更简单的GPT-2 系统,该系统具有一个很好的功能,即它足够小,可以在标准台式计算机上运行。因此,对于我展示的基本上所有内容,我都将能够包含显式的Wolfram 语言代码,您可以立即在计算机上运行它们。(点击此处任意图片即可复制其背后的代码。)
例如,以下是如何获取上面的概率表。首先,我们必须检索底层的“语言模型”神经网络:

稍后,我们将深入研究这个神经网络,并讨论它是如何工作的。但目前我们可以将这个“网络模型”作为黑盒应用到我们的文本中,并根据模型所说的概率来询问前 5 个单词:

这将获取该结果并将其放入显式格式化的“
”中:

如果重复“应用模型”,会发生以下情况 - 在每一步添加具有最高概率的单词(在此代码中指定为模型的“决策”):

如果一个人持续更长时间会发生什么?在这种(“零温度”)情况下,结果很快就会变得相当混乱和重复:

但是,如果不是总是选择“顶部”单词,而是有时随机选择“非顶部”单词(“随机性”对应于“温度”0.8)呢?再次可以构建文本:

每次这样做时,都会做出不同的随机选择,并且文本也会不同 - 正如以下 5 个示例所示:

值得指出的是,即使在第一步,也有很多可能的“下一个单词”可供选择(温度为 0.8),尽管它们的概率下降得很快(而且,是的,这个对数图上的直线对应于n –1 “幂律”衰减,这是语言一般统计的特征):

那么如果一个人持续更长时间会发生什么呢?这是一个随机的例子。它比顶部单词(零温度)的情况要好,但最多仍然有点奇怪:

这是使用
(2019 年起)完成的。使用更新、
结果会更好。这是使用相同“提示”生成的顶部单词(零温度)文本,但具有最大的 GPT-3 模型:

这是“温度 0.8”下的随机示例:

概率从何而来?
好的,ChatGPT 总是根据概率选择下一个单词。但这些概率从何而来?让我们从一个更简单的问题开始。让我们考虑一次生成一个字母(而不是单词)的英文文本。我们如何计算出每个字母的概率应该是多少?
我们能做的最简单的事情就是获取英文文本样本,并计算其中不同字母出现的频率。例如,这对维基百科关于“猫”的文章中的字母进行计数:

这对“狗”也有同样的作用:

结果相似,但不一样(“o”无疑在“dogs”文章中更常见,因为毕竟它出现在“dog”一词本身中)。尽管如此,如果我们采用足够大的英语文本样本,我们可以期望最终得到至少相当一致的结果:

如果我们只是生成具有这些概率的字母序列,我们会得到以下示例:

我们可以通过添加空格将其分解为“单词”,就好像它们是具有一定概率的字母一样:

我们可以通过强制“单词长度”的分布与英语中的一致来更好地制作“单词”:

我们在这里没有碰巧得到任何“实际的单词”,但结果看起来稍微好一些。然而,为了更进一步,我们需要做的不仅仅是随机挑选每个字母。例如,我们知道如果我们有一个“q”,那么下一个字母基本上必须是“u”。
这是字母本身的概率图:

下面的图显示了典型英语文本中字母对(“2-grams”)的概率。可能的第一个字母显示在整个页面上,第二个字母显示在页面下方:

例如,我们在这里看到,除了“u”行之外,“q”列是空白的(零概率)。好的,现在我们不再一次生成一个字母的“单词”,而是使用这些“2-gram”概率一次查看两个字母来生成它们。这是结果的示例,其中恰好包含一些“实际单词”:

有了足够多的英文文本,我们不仅可以对单个字母或字母对(2-grams)的概率进行很好的估计,而且还可以对较长的字母序列进行估计。如果我们生成n元语法概率逐渐变长的“随机词”,我们会看到它们逐渐变得“更现实”:

但现在让我们假设(或多或少像 ChatGPT 一样)我们正在处理整个单词,而不是字母。英语中大约有 40,000 个合理常用的单词。通过查看大量的英语文本语料库(比如几百万本书,总共有几千亿个单词),我们可以估计每个单词的常见程度。使用它,我们可以开始生成“句子”,其中每个单词都是独立随机挑选的,其出现在语料库中的概率相同。这是我们得到的示例:

毫不奇怪,这是无稽之谈。那么我们怎样才能做得更好呢?就像字母一样,我们不仅可以开始考虑单个单词的概率,还可以考虑单词对或更长n元语法的概率。成对进行此操作,以下是我们得到的 5 个示例,所有情况都从单词“cat”开始:

它变得稍微“看起来更明智”了。我们可能会想象,如果我们能够使用足够长的n元语法,我们基本上会“得到一个 ChatGPT”——从某种意义上说,我们会得到一些东西,可以生成具有“正确的整体文章”的文章长度的单词序列。概率”。但问题是:目前还没有足够的英文文本来推断这些概率。
网络爬行中可能有几千亿个单词;数字化的书籍中可能还有数千亿字。但对于 40,000 个常见单词,即使可能的 2-gram 数量也已经是 16 亿个,而可能的 3-gram 数量则达到 60 万亿个。因此,即使从现有的文本中我们也无法估计所有这些的概率。当我们写到20个字的“论文片段”时,可能性的数量比宇宙中的粒子数量还多,所以从某种意义上说,它们永远不可能全部写下来。
所以,我们能做些什么?最重要的想法是建立一个模型,让我们能够估计序列出现的概率——即使我们从未在我们所查看的文本语料库中明确看到过这些序列。ChatGPT 的核心正是所谓的“大语言模型”(LLM),它的构建是为了很好地估计这些概率。
- 作者:AIBLOG
- 链接:https://blog.1370.cn//article/f463ad53-eb42-4359-9c2b-d92863a3823a
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。










