近年来,OpenAI 推出的 ChatGPT 等大语言模型作为深度神经网络模型的代表,为自然语言处理(natural language processing,NLP)领域带来了革命性的变化。
在大语言模型出现之前,传统方法(如手工规则或简单模型)在垃圾邮件检测、简单模式识别等分类任务中表现优异。然而,这些传统方法在需要具备复杂的理解和生成能力的语言任务(比如解析详细的指令、进行语境分析或创作连贯且符合语境的原创文本)中通常表现不佳。举例来说,早期的语言模型无法根据关键词列表来编写电子邮件,而现今的大语言模型能轻松完成这一任务。
大语言模型在理解、生成和解释人类语言方面拥有出色的能力。但需要澄清的是,当我们谈论语言模型的“理解”能力时,实际上是指它们能够处理和生成看似连贯且符合语境的文本,而这并不意味着它们真的拥有像人类一样的意识或理解能力。
深度学习(deep learning)是机器学习(machine learning)和人工智能(artificial intelligence,AI)领域的一个重要分支,主要聚焦于神经网络的研究。深度学习的发展使得大语言模型能够利用海量的文本数据进行训练,从而相比于以往的方法能够捕获更深层次的上下文信息和人类语言的细微之处。因此,大语言模型在文本翻译、情感分析、问答等各类自然语言处理任务中都有显著的性能提升。
现代大语言模型与早期自然语言处理模型之间的另一个重要区别在于,早期自然语言处理模型通常是为特定任务(如文本分类,语言翻译等)而设计的。尽管这些早期自然语言处理模型在其特定应用中表现卓越,但大语言模型在各种自然语言处理任务中展现了更广泛的能力。
大语言模型的成功,一方面得益于为其提供支撑的 Transformer 架构,另一方面得益于用于训练这些模型的海量数据。这使得它们能够捕捉到语言中的各类细微差别、上下文信息和模式规律,而这些都是手动编码难以实现的。
这一转变,即以 Transformer 架构为核心,使用大型数据集来训练大语言模型,已经从根本上变革了自然语言处理领域,为机器理解并与人类语言互动提供了更强大的工具。
1.1 什么是大语言模型
大语言模型是一种用于理解、生成和响应类似人类语言文本的神经网络。这类模型属于深度神经网络(deep neural network),通过大规模文本数据训练而成,其训练资料甚至可能涵盖了互联网上大部分公开的文本。
“大语言模型”这一名称中的“大”字,既体现了模型训练时所依赖的庞大数据集,也反映了模型本身庞大的参数规模。这类模型通常拥有数百亿甚至数千亿个参数(parameter)。这些参数是神经网络中的可调整权重,在训练过程中不断被优化,以预测文本序列中的下一个词。
下一单词预测(next-word prediction)任务合理地利用了语言本身具有顺序这一特性来训练模型,使得模型能够理解文本中的上下文、结构和各种关系。然而,由于这项任务本身非常简单,因此许多研究人员对其能够孕育出如此强大的模型深感惊讶。
大语言模型采用了一种名为 Transformer 的架构,这种架构允许模型在进行预测时有选择地关注输入文本的不同部分,从而使得它们特别擅长应对人类语言的细微差别和复杂性。
由于大语言模型能够生成文本,因此它们通常也被归类为生成式人工智能(generative artificial intelligence,简称 generative AI 或 GenAI)。如图 1-1 所示,人工智能是一个囊括机器学习、深度学习等众多分支的领域,旨在开发能够执行需要人类智能水平的任务(包括语言理解、模式识别、决策制定等)的机器。
实现人工智能的算法是机器学习领域的重点研究内容。具体而言,机器学习涉及开发能够从数据中学习的算法。无须明确编程,这些算法就能基于数据做出预测或决策。
举个例子,垃圾邮件过滤器是机器学习技术的一个典型应用。与手动编写规则来识别垃圾邮件不同,机器学习算法会接收标记为垃圾邮件和正常邮件的示例。通过在训练数据集上最小化预测误差,模型能够学习到如何识别垃圾邮件的模式和特征,进而将新的邮件分类为垃圾邮件或非垃圾邮件。
图 1-1 这一层级关系图展示了不同领域之间的关系。大语言模型是深度学习技术的具体应用,能够处理和生成类似人类语言的文本;深度学习是机器学习的一个分支,主要使用多层神经网络;机器学习和深度学习致力于开发算法,使计算机能够从数据中学习,并执行需要人类智能水平的任务
如图 1-1 所示,深度学习是机器学习的一个分支,它主要利用 3 层及以上的神经网络(深度神经网络)来建模数据中的复杂模式和抽象特征。与深度学习不同,传统的机器学习往往需要人工进行特征提取。这意味着人类专家需要为模型识别和挑选出最相关的特征。
尽管人工智能领域现在由机器学习和深度学习所主导,但该领域也涉及其他方法,比如基于规则的系统、遗传算法、专家系统、模糊逻辑或符号推理。
仍以垃圾邮件分类为例,在传统的机器学习方法中,人类专家需要手动从电子邮件文本中提取诸如特定触发词(“prize”“win”“free”)的出现频率、感叹号的数量、全大写单词的使用情况或可疑链接的存在等特征。这些基于专家定义的特征所构造的数据集将被用来训练模型。
相比之下,深度学习并不依赖人工提取的特征,这意味着不再需要由人类专家为模型识别和选择最相关的特征。然而,无论是传统的机器学习还是用于垃圾邮件分类任务的深度学习,仍然需要收集标签(比如垃圾邮件或非垃圾邮件,这些标签通常由专家或用户提供)。
1.2 大语言模型的应用
大语言模型在解析和理解非结构化文本数据方面的能力非常强,因此它们在许多领域得到了广泛应用。如今,大语言模型已被应用于机器翻译、文本生成(参见图 1-2)、情感分析、文本摘要等多种任务。最近,它们还被用于进行内容创作,包括撰写小说和文章,甚至编写计算机代码。
图 1-2 大语言模型界面实现了用户和人工智能系统之间的自然语言交互。该截图展示了 ChatGPT 按照用户要求创作的一首诗
此外,大语言模型还可以为复杂的聊天机器人和虚拟助手提供支持,包括 OpenAI 的 ChatGPT、谷歌的 Gemini(前称为 Bard)等。这些系统可以回答用户的问题,并增强谷歌搜索、微软必应等传统搜索引擎的能力。
在医学、法律等专业领域中,大语言模型还被用于从大量文本中有效地提取知识,包括筛选文献、总结长篇段落和回答技术性问题。
简而言之,大语言模型在几乎所有需要解析和生成文本的任务的自动化处理中都具有重要价值。它们的应用领域极为广阔,并且显而易见的是,随着我们不断创新和探索这些模型的使用方法,它们有潜力重塑我们与科技的关系,使其变得更具互动性、更为直观且更易使用。
1.3 构建和使用大语言模型的各个阶段
为什么要自己构建大语言模型?从零开始构建大语言模型不仅是一次深入了解模型机制和局限性的绝佳机会,还为我们提供了预训练和微调开源大语言模型,使其适应特定领域的数据集或任务的必要知识。
注意 如今大多数大语言模型是使用 PyTorch 深度学习库实现的,我们也将使用该库。
研究表明,针对特定领域或任务量身打造的大语言模型在性能上往往优于 ChatGPT 等为多种应用场景而设计的通用大语言模型。这样的例子包括专用于金融领域的模型 BloombergGPT 和专用于医学问答的大语言模型。
使用定制的大语言模型具有多个优势,尤其是在数据隐私方面。例如,出于机密性考虑,公司可能不愿将敏感数据共享给像 OpenAI 这样的第三方大语言模型提供商。此外,如果开发较小的定制的大语言模型,那么就可以将其直接部署到客户设备(笔记本电脑和智能手机)上。这也是苹果公司等企业正在探索的方向。本地部署可以显著减少延迟并降低与服务器相关的成本。此外,定制的大语言模型使开发者拥有完全的自主权,能够根据需要控制模型的更新和修改。
大语言模型的构建通常包括预训练(pre-training)和微调(fine-tuning)两个阶段。“预训练”中的“预”表明它是模型训练的初始阶段,此时模型会在大规模、多样化的数据集上进行训练,以形成全面的语言理解能力。以预训练模型为基础,微调阶段会在规模较小的特定任务或领域数据集上对模型进行针对性训练,以进一步提升其特定能力。图 1-3 展示了由预训练和微调组成的两阶段训练方法。
图 1-3 大语言模型的预训练目标是在大量无标注的文本语料库(原始文本)上进行下一单词预测。预训练完成后,可以使用较小的带标注的数据集对大语言模型进行微调
创建大语言模型的第一步是在大量文本数据上进行训练,这些数据也被称作原始文本(raw text)。“原始”指的是这些数据只是普通的文本,没有附加任何标注信息。(在这一步中,我们通常会进行数据过滤,比如删除格式字符或未知语言的文档。)
注意 如果你具有机器学习背景,那么可能会注意到,传统的机器学习模型和通过常规监督学习范式训练的深度神经网络通常需要标签信息。然而,这并不适用于大语言模型的预训练阶段。在此阶段,大语言模型使用自监督学习,模型从输入数据中生成自己的标签。
预训练是大语言模型的第一个训练阶段,预训练后的大语言模型通常称为基础模型(foundation model)。一个典型例子是 ChatGPT 的前身——GPT-3,这个模型能够完成文本补全任务,即根据用户的前半句话将句子补全。此外,它还展现了有限的少样本学习能力,这意味着它可以在没有大量训练数据的情况下,基于少量示例来学习并执行新任务。
通过在无标注数据集上训练获得预训练的大语言模型后,我们可以在带标注的数据集上进一步训练这个模型,这一步称为微调。
微调大语言模型最流行的两种方法是指令微调和分类任务微调。在指令微调(instruction fine-tuning)中,标注数据集由“指令−答案”对(比如翻译任务中的“原文−正确翻译文本”)组成。在分类任务微调(classification fine-tuning)中,标注数据集由文本及其类别标签(比如已被标记为“垃圾邮件”或“非垃圾邮件”的电子邮件文本)组成。
1.4 Transformer 架构介绍
大部分的现代大语言模型基于 Transformer 架构,这是一种深度神经网络架构,该架构是在谷歌于 2017 年发表的论文“Attention Is All You Need”中首次提出的。
为了理解大语言模型,我们需要简单回顾一下最初的 Transformer。Transformer 最初是为机器翻译任务(比如将英文翻译成德语和法语)开发的。Transformer 架构的一个简化版本如图 1-4 所示。
图 1-4 原始 Transformer 架构的简化描述,这是一种用于机器翻译的深度学习模型。Transformer 由两部分组成:一个是编码器,用于处理输入文本并生成文本嵌入(一种能够在不同维度中捕获许多不同因素的数值表示);另一个是解码器,用于使用这些文本嵌入逐词生成翻译后的文本。请注意,图中展示的是翻译过程的最后阶段,此时解码器根据原始输入文本(“This is an example”)和部分翻译的句子(“Das ist ein”),生成最后一个单词(“Beispiel”)以完成翻译
Transformer 架构由两个子模块构成:编码器和解码器。编码器(encoder)模块负责处理输入文本,将其编码为一系列数值表示或向量,以捕捉输入的上下文信息。然后,解码器(decoder)模块接收这些编码向量,并据此生成输出文本。以翻译任务为例,编码器将源语言的文本编码成向量,解码器则解码这些向量以生成目标语言的文本。编码器和解码器都是由多层组成,这些层通过自注意力机制连接。
Transformer 和大语言模型的一大关键组件是自注意力机制(self-attention mechanism),它允许模型衡量序列中不同单词或词元之间的相对重要性。这一机制使得模型能够捕捉到输入数据中长距离的依赖和上下文关系,从而提升其生成连贯且上下文相关的输出的能力。
为了适应不同类型的下游任务,Transformer 的后续变体,如 BERT(Bidirectional Encoder Representations from Transformer,双向编码预训练 Transformer)和各种 GPT(Generative Pretrained Transformer,生成式预训练 Transformer)模型,都基于这一理念构建。
BERT 基于原始 Transformer 的编码器模块构建,其训练方法与 GPT 不同。GPT 主要用于生成任务,而 BERT 及其变体专注于掩码预测(masked word prediction),即预测给定句子中被掩码的词,如图 1-5 所示。这种独特的训练策略使 BERT 在情感预测、文档分类等文本分类任务中具有优势。例如,截至本书撰写时,X(以前的 Twitter)在检测有害内容时使用的是 BERT。
图 1-5 Transformer 编码器和解码器的可视化展示。左侧的编码器部分展示了专注于掩码预测的类 BERT 大语言模型,主要用于文本分类等任务。右侧的解码器部分展示了类 GPT 大语言模型,主要用于生成任务和生成文本序列
GPT 则侧重于原始 Transformer 架构的解码器部分,主要用于处理生成文本的任务,包括机器翻译、文本摘要、小说写作、代码编写等。
GPT 模型主要被设计和训练用于文本补全(text completion)任务,但它们表现出了出色的可扩展性。这些模型擅长执行零样本学习任务和少样本学习任务。零样本学习(zero-shot learning)是指在没有任何特定示例的情况下,泛化到从未见过的任务,而少样本学习(few-shot learning)是指从用户提供的少量示例中进行学习,如图 1-6 所示。
图 1-6 除了文本补全,类 GPT 大语言模型还可以根据输入执行各种任务,而无须重新训练、微调或针对特定任务更改模型架构。有时,在输入中提供目标示例会很有帮助,这被称为“少样本设置”。然而,类 GPT 大语言模型也能够在没有特定示例的情况下执行任务,这被称为“零样本设置”
Transformer 与大语言模型
当今的大语言模型大多基于前文介绍的 Transformer 架构,因此Transformer 和大语言模型在文献中常常被作为同义词使用。然而并非所有的 Transformer 都是大语言模型,因为 Transformer 也可用于计算机视觉领域。同样并非所有的大语言模型都基于 Transformer 架构,因为还存在基于循环和卷积架构的大语言模型。推动这些新架构发展的主要动机在于提高大语言模型的计算效率。然而这些非 Transformer 架构的大语言模型是否能够与基于 Transformer 的大语言模型相媲美,它们是否会在实践中被广泛应用,还需要观察。
1.5 利用大型数据集
主流的 GPT、BERT 等模型所使用的训练数据集涵盖了多样而全面的文本语料库。这些语料库包含数十亿词汇,涉及广泛的主题,囊括自然语言与计算机语言。表 1-1 通过一个具体的例子总结了用于预训练 GPT-3 的数据集。GPT-3 被视作第一代 ChatGPT 的基础模型。
数据集名称 | 数据集描述 | 词元数量 | 训练数据中的比例 |
---|---|---|---|
CommonCrawl(过滤后) | 网络抓取数据 | 4100 亿 | 60% |
WebText2 | 网络抓取数据 | 190 亿 | 22% |
Books1 | 基于互联网的图书语料库 | 120 亿 | 8% |
Books2 | 基于互联网的图书语料库 | 550 亿 | 8% |
Wikipedia | 高质量文本 | 30 亿 | 3% |
表 1-1 GPT-3 大语言模型的预训练数据集
表 1-1 展示了各种数据集的词元数量。词元(token)是模型读取文本的基本单位。数据集中的词元数量大致等同于文本中的单词和标点符号的数量。
我们能得到的主要启示是,训练数据集的庞大规模和丰富多样性使得这些模型在包括语言语法、语义、上下文,甚至一些需要通用知识的任务上都拥有了良好表现。
GPT-3 数据集的细节
表 1-1 显示了用于训练 GPT-3 的数据集。表中的“训练数据中的比例”一列总计为 100%,根据舍入误差进行调整。尽管“词元数量”一列总计为 4990 亿,但该模型仅在 3000 亿个词元上进行了训练。GPT-3 论文的作者并没有具体说明为什么该模型没有对所有 4990 亿个词元进行训练。
为了更好地理解,以 CommonCrawl 数据集为例,它包含 4100 亿个词元,需要约 570 GB 的存储空间。相比之下,GPT-3 等模型的后续版本(如 Meta 的 Llama),已经扩展了它们的训练范围,涵盖了包括 Arxiv 研究论文(92 GB)和 StackExchange 上的代码问答(78 GB)在内的更多数据源。
GPT-3 论文的作者并未公开其训练数据集,但我们可以参考一个公开可用的类似数据集——Dolma:这是一个用于大语言模型预训练的 3 万亿兆词元大小的开放语料库。然而,该数据集可能包含受版权保护的内容,具体使用条款可能取决于预期的使用情境和国家。
这些模型的预训练特性使它们在针对下游任务进行微调时表现出了极高的灵活性,因此它们也被称为“基础模型”。预训练大语言模型需要大量资源,成本极其高昂。例如,预训练 GPT-3 的云计算费用成本估计高达 460 万美元。
好消息是,许多预训练的大语言模型是开源模型,可以作为通用工具,用于写作、摘要和编辑那些未包含在训练数据中的文本。同时,这些大语言模型可以使用相对较小的数据集对特定任务进行微调,这不仅减少了模型所需的计算资源,还提升了它们在特定任务上的性能。
1.6 深入剖析 GPT 架构
GPT 最初是由 OpenAI 的 Radford 等人在论文“Improving Language Understanding by Generative Pre-Training”中提出的。GPT-3 是该模型的扩展版本,它拥有更多的参数,并在更大的数据集上进行了训练。此外,ChatGPT 中提供的原始模型是通过使用 OpenAI 的 InstructGPT 论文中的方法,在一个大型指令数据集上微调 GPT-3 而创建的。
正如我们在图 1-6 中所见,这些模型不仅是强大的文本补全模型,还可以胜任拼写校正、分类或语言翻译等任务。考虑到 GPT 模型仅在相对简单的下一单词预测任务(参见图 1-7)上进行了预训练,它们能有如此强大而全面的能力实在令人惊叹。
图 1-7 在 GPT 模型的下一单词预测预训练任务中,系统通过观察之前的词来学习预测句子中的下一个词。这种方法能够帮助模型理解词语和短语在语言中的常见组合,从而为应用于各种其他任务奠定基础
下一单词预测任务采用的是自监督学习(self-supervised learning)模式,这是一种自我标记的方法。这意味着我们不需要专门为训练数据收集标签,而是可以利用数据本身的结构。也就是说,我们可以使用句子或文档中的下一个词作为模型的预测标签。由于该任务允许“动态”创建标签,因此我们可以利用大量的无标注文本数据集来训练大语言模型。
与 1.4 节中讨论的原始 Transformer 架构相比,GPT 的通用架构更为简洁。如图 1-8 所示,本质上,它只包含解码器部分,并不包含编码器。由于像 GPT 这样的解码器模型是通过逐词预测生成文本,因此它们被认为是一种自回归模型(autoregressive model)。自回归模型将之前的输出作为未来预测的输入。因此,在 GPT 中,每个新单词都是根据它之前的序列来选择的,这提高了最终文本的一致性。
图 1-8 GPT 架构仅使用原始的 Transformer 解码器部分。它被设计为单向的从左到右处理,这使得它非常适合文本生成和下一单词预测任务,可以逐个词地迭代生成文本
GPT-3 等架构的规模远超原始 Transformer 模型。例如,原始的 Transformer 模型将编码器模块和解码器模块重复了 6 次,而 GPT-3 总共有 96 层 Transformer 和 1750 亿个参数。
GPT-3 发布于 2020 年,按照深度学习和大语言模型的迅猛发展速度来衡量,这已是非常久远的事情了。然而,像 Meta 的 Llama 模型这样更近期的架构仍然基于相同的基本理念,仅进行了些许调整。因此,理解 GPT 仍然非常重要。
虽然原始的 Transformer 模型(包含编码器模块和解码器模块)专门为语言翻译而设计,但 GPT 模型采用了更大且更简单的纯解码器架构,旨在预测下一个词,并且它们也能执行翻译任务。这种能力起初让研究人员颇为意外,因为其来自一个主要在下一单词预测任务上训练的模型,而这项任务并没有特别针对翻译。
模型能够完成未经明确训练的任务的能力称为涌现(emergence)。这种能力并非模型在训练期间被明确教授所得,而是其广泛接触大量多语言数据和各种上下文的自然结果。即使没有经过专门的翻译任务训练,GPT 模型也能够“学会”不同语言间的翻译模式并执行翻译任务。这充分体现了这类大规模生成式语言模型的优势和能力。因此,无须针对不同的任务使用不同的模型,我们便可执行多种任务。
1.7 构建大语言模型
本文我们为理解大语言模型打下了基础。我们将以 GPT 的核心原理为指导,从零开始,一步步构建自己的模型。按照图 1-9 所示的路线图,分 3 个阶段来逐步实现这一目标。
图 1-9 构建大语言模型的 3 个主要阶段:实现模型架构和准备数据(第一阶段)、预训练大语言模型以获得基础模型(第二阶段),以及微调基础模型以得到个人助手或文本分类器(第三阶段)
在第一阶段,我们将学习数据预处理的基本流程,并着手实现大语言模型的核心组件——注意力机制。
在第二阶段,我们将学习如何编写代码并预训练一个能够生成新文本的类 GPT 大语言模型。同时,我们还将探讨评估大语言模型的基础知识,这对于开发高效的自然语言处理系统至关重要。
需要指出的是,从头开始预训练大语言模型是一项艰巨的任务。训练类 GPT 模型所需的计算成本可能高达数千到数百万美元。鉴于本书的目的是教学,因此我们将使用较小的数据集进行训练。
最后,在第三阶段,我们将对一个预训练后的大语言模型进行微调,使其能够执行回答查询、文本分类等任务——这是许多真实应用程序和研究中常见的需求。
更多构建大模型的实用方法,可以到《从零构建大模型》一书中深度探寻!
重磅预告:图灵大模型技术共学营第三期直播来袭!
大模型的学习之路,是否让你感到迷茫?入门的门槛,是否让你望而却步?别担心,明晚 20:00,图灵八点八直播间为你带来重磅福利!
我们荣幸邀请到《大模型技术 30 讲》译者叶文滔老师,与图灵创始人刘江老师展开深度对话。他们将为那些在大模型入门之路上遇到困难的小伙伴们答疑解惑,拨开迷雾。
别错过这次难得的学习机会,快来预约直播吧!
如果你不想在大模型的学习之旅中独自前行,渴望与志同道合的伙伴们并肩作战,那么赶快扫码加入图灵大模型技术共学营!
在这里,你不仅能跟业内专家面对面交流,还能结识一群热爱大模型技术的朋友。我们将在共学营中为你提供全方位的支持和陪伴,一起攻克难题,共同成长。👇