大型语言模型的起源可以追溯到自然语言处理领域,但近年来,它们无疑已成为人工智能领域最具革命性技术进步之一。大型语言模型带来的重要洞见在于,通过大规模的语言建模任务,可以获得对世界知识和语言的理解,从而构建一个能够处理多种问题的通用模型。这一发现深刻地影响了自然语言处理及众多相关学科的研究方法。研究范式已从利用大量标注数据从零开始训练专门系统,转向通过大规模预训练获取基础模型,然后对其进行微调、对齐和提示的新模式。 本书旨在概述大型语言模型的基本概念并介绍相关技术。如书名所示,本书更关注大型语言模型的基础方面,而非全面覆盖所有前沿方法。全书共分为四章:
如果读者具备一定的机器学习和自然语言处理背景,并对诸如Transformer等神经网络有一定了解,那么阅读本书将非常轻松。然而,即使没有相关基础知识也无妨,因为我们力求使每一章的内容尽可能自成体系,确保读者不会因阅读难度过大而感到负担。 在撰写本书的过程中,我们逐渐意识到,这更像是我们学习大型语言模型时整理的“笔记”。通过这种笔记式的写作风格,我们希望为读者提供灵活的学习路径。无论是希望深入探索某一具体领域,还是想全面了解大型语言模型,读者都可以在这些“笔记”中找到所需的知识与启发。 预训练
神经序列模型(如Transformer [Vaswani et al., 2017])的开发以及大规模自监督学习的改进,开启了通用语言理解与生成的新篇章。这一成就主要得益于预训练的推动:我们将许多基于神经网络的系统中的通用组件分离出来,并利用自监督方法在海量无标注数据上进行训练。这些预训练模型成为了基础模型,可以通过微调或提示轻松适应不同任务。因此,自然语言处理(NLP)的研究范式发生了巨大的变化。在许多情况下,针对特定任务的大规模监督学习不再是必需的,我们只需适配预训练的基础模型即可。 尽管预训练在近年来的NLP研究中备受关注,这一概念实际上可以追溯到深度学习的早期阶段。例如,早期对深度学习系统进行预训练的尝试包括用于循环神经网络(RNN)、深度前馈网络、自编码器等的无监督学习 [Schmidhuber, 2015]。在现代深度学习时代,预训练经历了复兴,这部分归因于各种词嵌入模型的大规模无监督学习 [Mikolov et al., 2013b; Pennington et al., 2014]。与此同时,预训练在计算机视觉领域也引起了广泛关注,骨干模型通常在相对较大的标注数据集(如ImageNet)上训练,然后应用于不同的下游任务 [He et al., 2019; Zoph et al., 2020]。 在NLP领域,基于自监督学习的语言模型的开发标志着大规模预训练研究的开始。这类模型包括多个广为人知的实例,如BERT [Devlin et al., 2019] 和 GPT [Brown et al., 2020]。它们的核心理念是,通过在海量文本中训练模型预测被掩盖的词语,可以实现对通用语言的理解与生成。尽管这种方法本质上较为简单,但由此得到的模型展现出了卓越的语言结构建模能力,尽管这种能力并非通过显式训练得来。预训练任务的通用性使得这些系统在各种NLP问题上表现出强大的性能,甚至超越了许多先前开发的监督系统。近年来,预训练的大型语言模型取得了更大的成功,展示了通用人工智能的广阔前景 [Bubeck et al., 2023]。 本章讨论了NLP领域中预训练的概念,首先概述了预训练方法及其应用。接着,以BERT为例说明如何通过称为“掩码语言建模”的自监督任务来训练序列模型。随后讨论了适配预训练序列模型以应对各种NLP任务的方法。需要注意的是,本章主要关注NLP中的预训练范式,因此不会详细探讨生成式大型语言模型。关于这些模型的深入讨论将留待后续章节展开。 生成式模型 Generative Models 近年来,自然语言处理(NLP)领域的一个最重要的进步可能就是大型语言模型(LLMs)的发展。这一进步催生了能够像人类一样理解和生成自然语言的系统。这些系统甚至展现出一定的推理能力,而推理被认为是人工智能领域的一个极具挑战性的问题。借助这些成就,NLP迈出了巨大步伐,进入了一个全新的研究时代,其中许多复杂问题得以解决,例如构建能够与人类流畅交流的对话系统。 语言建模或概率语言建模的概念可以追溯到香农 [Shannon, 1951] 的早期实验。在他的研究中,设计了一种语言模型来估计英语的可预测性——在已知前 N 个字母的情况下,下一个字母的预测能力如何。尽管香农的实验尚属初步探索,语言建模的基本目标和方法几十年来基本未变。在相当长的一段时间里,特别是在2010年之前,语言建模的主流方法是 n-gram 方法 [Jurafsky and Martin, 2008]。在 n-gram 语言建模中,通过估计一个词在其前 n − 1 个词的条件概率,可以用一系列 n-gram 概率的乘积来近似一个序列的概率。这些概率通常通过收集文本中的 n-gram 平滑相对计数来估计。虽然这种方法简单直接,但在 NLP 中得到了广泛应用。例如,现代统计语音识别和机器翻译系统的成功在很大程度上依赖于 n-gram 语言模型 [Jelinek, 1998; Koehn, 2010]。 将神经网络应用于语言建模长期以来一直吸引研究者关注,但真正的突破出现在深度学习技术取得进展之后。Bengio 等人 [2003] 的研究被广泛引用,他们通过一个前馈神经网络对 n-gram 概率进行建模,并通过端到端训练的方式学习该网络。这种神经语言模型的副产品是单词的分布式表示,也称为词嵌入(word embeddings)。与将单词表示为离散变量不同,词嵌入将单词映射到低维实值向量,使得可以在连续表示空间中计算单词及其 n-gram 的语义。结果,语言模型不再受限于维度灾难,而是能够通过紧凑和密集的神经模型表示指数级数量的 n-gram。 通过神经语言模型学习词表示的想法激发了 NLP 表示学习的后续研究。然而,这种方法在提出后的最初几年并未在开发 NLP 系统中引起显著关注。然而,从2012年左右开始,通过简单的单词预测任务从大规模文本中学习词嵌入的技术取得了进展。诸如 Word2Vec 等方法被提出,用于有效学习这些嵌入,并成功应用于各种 NLP 系统 [Mikolov et al., 2013a; b]。随着这些技术的进步,研究者开始思考如何利用更强大的语言模型(如基于 LSTM 的模型 [Sutskever et al., 2014; Peters et al., 2018])学习序列的表示。随着 Transformer 的提出,序列表示的研究和兴趣迅速爆发。随着 Transformer 的兴起,语言建模的概念被泛化,以涵盖通过多种方式学习预测单词的模型。许多强大的基于 Transformer 的模型通过这些单词预测任务进行预训练,并成功应用于多种下游任务 [Devlin et al., 2019]。 事实上,在大规模数据上训练语言模型使得 NLP 研究进入了激动人心的时代。虽然语言建模长期以来被视为一种基础技术,与研究者所期望的人工智能目标并无直接联系,但它让我们看到了通过在文本中反复预测单词,智能系统可以学习到一定程度的通用知识的可能性。最近的研究表明,一个单一的、训练良好的大型语言模型可以处理大量任务,并通过少量的适配实现对新任务的泛化 [Bubeck et al., 2023]。这表明了向更高级形式人工智能迈进的一步,并激发了对开发更强大语言模型作为基础模型的进一步探索。 本章探讨生成式大型语言模型(LLMs)的基本概念。为简洁起见,我们使用“大型语言模型”或“LLMs”来指代生成模型(如 GPT),尽管这个术语也可以广泛涵盖其他类型的模型(如 BERT)。我们首先概述大型语言模型,包括构建这些模型的关键步骤。随后讨论大型语言模型的两个扩展问题:如何进行大规模训练,以及如何改进模型以处理超长文本。最后,我们对这些讨论进行总结。 提示
在大型语言模型(LLMs)的应用中,提示(Prompting)是指通过提供特定的输入或线索,让模型生成所需输出或完成某项任务的方法。例如,如果我们希望模型将一句话从英文翻译成中文,可以设计如下提示:```
复制编辑 将以下文本从英文翻译成中文。 文本:The early bird catches the worm. 翻译:
提示对于LLMs来说至关重要,因为提示的设计直接影响到模型理解用户查询并作出响应的效果。精心设计的提示可以引导模型生成更准确、相关和上下文适宜的回应。此外,这一过程是可以迭代优化的。通过分析LLM的响应,用户可以调整提示内容,使其更贴合具体需求。鉴于提示在LLMs应用中的重要性,提示设计(Prompt Design)已成为用户和开发者操作LLMs时的一项关键技能。这也催生了一个活跃的研究领域——提示工程(Prompt Engineering),研究如何设计高效的提示,以更好地利用LLMs,并提升其在现实应用中的实用性。
与提示密切相关的一个重要概念是**上下文学习**(In-context Learning)。当向LLM提供提示时,我们可以在上下文中添加新的信息,例如问题解决的演示示例。这使得模型可以从这些上下文中学习如何解决问题。以下是一个通过几个情感分类示例向模型提示的案例:```
mathematica
复制编辑
以下是一些文本分类的示例。
示例1:We had a delightful dinner together. → 标签:Positive
示例2:I’m frustrated with the delays. → 标签:Negative
请问句子“That comment was quite hurtful.”的标签是什么?
标签:
上下文学习通常被视为LLMs在预训练后表现出来的一种涌现能力。尽管LLMs可以通过训练或微调来完成新任务,上下文学习提供了一种无需额外训练或微调就能高效适配模型的新方法。这或许是LLMs最显著的特性之一:它们在预训练期间确实学会了关于世界和语言的通用知识,我们可以将这些知识轻松应用于新挑战。此外,上下文学习也反映了人工智能系统朝着更具泛化性和用户友好性发展的趋势。用户无需依赖专业工程师为每个特定任务微调模型,而是可以通过更加直观的方式与LLM交互,直接提供示例或调整上下文即可。 本章重点讨论LLMs的提示技术。我们首先介绍提示工程中常见的一些有趣的提示设计,然后讨论一系列提示方法的改进。最后,我们探讨自动化提示设计的方法。 对齐
在自然语言处理(NLP)领域,对齐(Alignment)并不是一个新概念,但其含义在不同的领域和时间段内有所不同。在传统的NLP中,"对齐"通常指的是将两个集合中的相应元素进行匹配的任务,例如对齐中文句子和英文句子中的单词。随着大型语言模型(LLMs)在NLP研究中的日益重要,"对齐"这一术语的使用范围已经扩大,指的是将模型输出与人类期望对齐。对齐所解决的问题是,模型的输出可能与用户意图的特定目标或上下文不一致。例如,预训练的LLMs可能无法按照用户的指令进行操作,因为它们并未经过这样的训练。另一个例子是,LLMs可能生成有害内容或延续其训练数据中固有的偏见。这为确保LLM的输出不仅准确和相关,而且伦理上合理、无歧视性,带来了新的挑战。 单纯地进行LLM预训练可能会导致各种对齐问题。我们的终极目标是解决或减轻这些问题,以确保LLMs既准确又安全。这里有一个有趣的问题:由于大型语言模型是在海量数据上训练的,我们有理由相信,如果我们能够收集足够多涵盖各种任务并与人类偏好一致的数据,预训练可能使LLMs足够准确和安全,甚至可能消除对齐的需求。然而,现实情况是,几乎不可能收集到涵盖所有任务或充分代表人类偏好的数据。这使得仅通过预训练来实现模型对齐变得困难,至少在当前阶段,对齐仍然是LLM开发中一个非常必要且关键的步骤。 本章将重点讨论LLM的对齐方法。我们将首先讨论一般的对齐任务。接着,我们将考虑两种广泛使用的方法,分别是指令对齐(Instruction Alignment)和人类偏好对齐(Human Preference Alignment)。前者依赖于监督微调技术,指导LLMs生成紧密符合用户指令的输出。另一方面,后者通常依赖于强化学习技术,在这种方法中,LLMs根据来自人类的反馈进行训练。尽管这两种方法的动机不同,但它们通常是结合使用的,以开发出对齐良好的LLMs。 **
**