ChatGPT 的工作原理:概率从何而来?
ChatGPT 始终根据概率选择下一个单词。但这些机会从何而来?让我们从一个更简单的问题开始。让我们考虑逐个字母(而不是单词)生成英文文本。我们如何计算每个字母的概率?
我们可以做的一个非常简单的事情就是以英文文本为例,计算不同字母在其中出现的次数。例如,这计算了维基百科文章中“猫”的字母:
这也适用于“狗”:
结果相似,但不一样。同样的事情(“o”无疑在“dogs”文章中更常见,因为毕竟它在“dog”这个词本身中)。然而,如果我们采用足够大的英语文本样本,我们可以期望得到至少相当一致的结果。
这是如果我们使用这些概率生成一串字母,我们会得到什么的示例:
我们可以通过添加空格将其分解为“单词”,就好像它是具有特定概率的字母一样:
我们可以通过强制“单词长度”的分布与英语的分布相匹配来使“单词”变得更好:
我们在这里看不到“真实的单词”,但结果看起来站得住脚好一点。为了更进一步,我们需要做的不仅仅是单独随机选择每个字母。例如,我们知道如果我们有一个“q”,那么下一个字母实际上应该是“u”:
这是字母本身的概率图:
这是一个显示典型英语文本中的字母对的图(“2克”)概率图。可能的第一个字母显示在页面上,第二个字母显示在下面:
例如,我们在这里看到,除了行“u”之外,列“q”为空(概率为零)。好的,我们将使用这些“2 克”概率通过一次查看两个字母来生成单词,而不是一次生成一个字母。这是结果的示例 - 其中包括一些“真实单词”:
有了足够的英文文本,我们不仅可以估计单个字母或字母对(2 克)的概率,还可以估计较长字母的概率。如果我们生成具有越来越长的 n-gram 概率的“随机单词”,我们会发现它们逐渐变得更加“现实”:
但是现在让我们假设 - 或多或少像 ChatGPT - 我们处理整个单词,而不是字母。英语中大约有 40,000 个相当常见的单词。通过查看大量的英语文本语料库(例如,数百万本书,总计数千亿个单词),我们可以估计每个单词的常见程度。这使我们能够开始生成“句子”,其中每个单词都是独立随机抽取的,其出现概率与语料库中的出现概率相同。这是我们所拥有的一个例子:
这显然是无稽之谈。那么,我们怎样才能做得更好呢?与字母一样,我们不仅可以开始考虑单个单词的概率,还可以考虑 n 元词对或更长单词的概率。在成对的情况下,我们得到了 5 个例子,全部以“猫”一词开头:
它变得更加“看似合理”。我们可以想象,如果我们能够使用 n-gram 足够长的时间,我们基本上会“得到一个 ChatGPT”——从某种意义上说,我们会得到一些能够生成纸张长度单词的东西,其顺序是“正确的总体纸张概率”。 但问题是:没有足够的英文文本来推导这些概率。
爬取的网络可以包含数千亿个单词;已经数字化的书籍可能还包含数千亿字。但对于 40,000 个常规单词,即使是 2 克的可能数量也有 16 亿个,3 克可能的数量有 60 万亿个。
所以我们没有办法根据现有的文本来估计这一切的可能性。当我们写到二十个字的“论文片段”时,可能性的数量比宇宙中粒子的数量还多,所以从某种意义上说,它们永远不可能全部写下来。
那我们能做什么呢?最重要的想法是建立一个模型,使我们能够估计序列发生的概率 - 即使我们从未在我们正在查看的文本语料库中明确看到这些序列。 ChatGPT 的核心是所谓的“大语言模型”(LLM),它是为了正确估计这些机会而构建的。
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。