“Hands-On Large Language Models”
由Jay Alammar和Maarten Grootendorst著
是一本关于大型语言模型(LLMs)的实用指南。它涵盖了LLMs的概念基础、实际应用以及相关的训练和微调技术,并通过大量的代码示例和可视化解释,帮助读者理解和应用这些强大的工具。
1. 内容概述
• LLMs基础
• 发展历史:从早期的词袋模型、word2vec到Transformer架构,介绍了语言AI的发展脉络以及LLMs的训练范式和应用场景。
• 技术基础:详细阐述了LLMs的关键技术,包括分词(tokenization)、嵌入(embedding)以及Transformer架构的各个组件,如注意力机制、多头注意力、位置嵌入等。
• 应用场景
• 分类任务:展示了如何使用预训练的LLMs进行监督分类和无监督分类,包括情感分析、主题分类等,并介绍了不同的分类模型和技术,如BERT、Flan - T5等。
• 文本生成:探讨了文本生成的技术和应用,包括提示工程(prompt engineering)、推理技术(如链推理、自一致性推理等)以及如何使用不同的生成模型(如GPT系列、Llama系列等)进行文本生成。
• 搜索和检索:介绍了如何使用LLMs进行语义搜索和检索增强生成(RAG),包括密集检索、重排序和RAG系统的构建和优化。
• 多模态应用:讨论了如何使LLMs具备多模态能力,如处理图像和文本的联合任务,介绍了相关的模型和技术,如Vision Transformer、CLIP、BLIP - 2等。
• 训练和微调
• 嵌入模型:深入探讨了如何创建和微调文本嵌入模型,包括对比学习技术、不同的损失函数以及如何在不同的数据场景下进行训练和微调。
• 分类模型微调:详细介绍了如何对分类模型(如BERT模型)进行微调,包括监督微调、少样本微调、持续预训练以及命名实体识别任务中的微调。
• 生成模型微调:阐述了如何对生成模型进行微调,包括监督微调、偏好微调以及使用不同的技术和算法(如适配器、低秩适应、量化等)进行高效微调。
2. 关键技术和方法
• 分词(tokenization):将文本分解为单词、子词或字符的过程,不同的模型和应用可能采用不同的分词方法,如字节对编码(BPE)、WordPiece等。
• 嵌入(embedding):将文本或单词表示为低维向量的技术,用于捕捉语义信息。包括词嵌入(word embedding)和文本嵌入(text embedding),可以通过预训练模型或自定义训练获得。
• Transformer架构:一种基于注意力机制的神经网络架构,具有并行计算能力和良好的长序列处理能力。其关键组件包括多头注意力层、前馈神经网络层、位置嵌入等。
• 提示工程(prompt engineering):设计有效的输入提示以引导LLMs生成期望的输出。包括基本提示成分、指令提示、上下文提示等,以及高级技巧如链提示、思维链提示等。
• 对比学习(contrastive learning):一种用于训练嵌入模型的技术,通过对比相似和不相似的样本对来学习语义表示。
3. 应用领域和案例
• 自然语言处理:如文本分类、情感分析、机器翻译、文本生成等。
• 信息检索:构建语义搜索系统和检索增强生成系统,提高搜索结果的准确性和相关性。
• 对话系统:开发智能聊天机器人,能够理解用户输入并生成合理的回答。
• 多模态应用:处理图像和文本的联合任务,如图像字幕、视觉问答等。
4. 代码示例和实践
• 代码示例:书中提供了大量的Python代码示例,涵盖了模型加载、数据处理、模型训练和微调、应用开发等各个环节。
• 实践建议:强调实践的重要性,并提供了一些实践建议,如使用预训练模型、选择合适的模型和技术、处理数据不平衡问题、评估模型性能等。
5. 模型评估和优化
• 评估指标:介绍了用于评估LLMs性能的各种指标,如准确率、召回率、F1分数、困惑度(perplexity)、ROUGE、BLEU、BERTScore等。
• 优化方法:探讨了如何优化LLMs的性能,包括模型选择、超参数调整、数据增强、模型融合等。
6. 未来发展和趋势
• 持续创新:随着技术的不断发展,LLMs将不断创新和进步,如更高效的架构、更好的预训练方法、更强大的多模态能力等。
• 应用拓展:LLMs的应用领域将不断拓展,如在医疗、金融、法律等领域的应用将越来越广泛。
• 伦理和社会影响:探讨了LLMs带来的伦理和社会影响,如隐私保护、数据安全、算法偏见等,并强调了负责任地开发和使用LLMs的重要性。
《Hands - On Large Language Models》的赞誉
这是一本关于语言模型世界及其在工业中的实际应用的杰出指南。它对语言模型的生成式、表征式和检索式应用进行了高度可视化的介绍,使读者能够快速理解、使用和优化大型语言模型。强烈推荐!
——Nils Reimers,Cohere机器学习总监,sentence - transformers的创造者
Jay和Maarten在他们的新书中延续了用精美插图和深刻见解描述复杂主题的传统。书中有可用的代码、时间线以及对关键论文的引用,对于任何想要了解大型语言模型构建背后主要技术的人来说,都是宝贵的资源。
——Andrew Ng,DeepLearning.AI的创始人
我想不出还有哪本书现在更值得一读。在每一页上,我都学到了在这个语言模型时代取得成功的关键知识。
——Josh Starmer,StatQuest
如果你想快速了解有关大型语言模型的一切,别再找了!在这本精彩的书中,Jay和Maarten将带你从零基础到成为大型语言模型历史和最新进展方面的专家。通过非常直观的解释、很棒的现实生活中的例子、清晰的插图以及全面的代码示例,这本书揭开了Transformer模型、分词器、语义搜索、RAG以及许多其他前沿技术的复杂性的面纱。对于任何对最新人工智能技术感兴趣的人来说,这都是一本必读之书!
——Luis Serrano,博士,Serrano学院的创始人兼首席执行官
这本书对于任何对快速发展的生成式人工智能领域感兴趣的人来说都是必读之书。它专注于文本和视觉嵌入,是算法演进、理论严谨性和实践指导的完美融合。无论你是学生、研究人员还是行业专业人士,这本书都将为你提供生成式人工智能的用例和解决方案,以提升你的知识水平。做得好!
——Chris Fregly,AWS生成式人工智能首席解决方案架构师
在生成式人工智能革命的核心,这本不可或缺的指南巧妙地平衡了理论和实践,驾驭了大型语言模型的广阔领域,为读者提供了在人工智能领域立即产生变革性影响所需的知识。
——Tarun Narayanan Venkatachalam,华盛顿大学人工智能研究员
及时阅读以获得语言模型的实践经验。
——Emir Muñoz,Genesys
《Hands - On Large Language Models》通过实际例子和清晰的解释,穿透了人工智能的炒作。它提供了大量精彩的图表和视觉辅助工具来补充清晰的解释。书中的实例和代码使其他书籍中抽象的内容变得具体。这本书从简单的入门知识开始,逐步扩大范围。到最后几章,你将能够自信地微调并构建自己的大型语言模型。
——Leland McInnes,图特数学与计算研究所研究员
终于有一本书,不仅避免了对大型语言模型的肤浅介绍,还以一种既容易理解又引人入胜的方式深入探讨了其背景。作者巧妙地创作了一本权威性的指南,尽管该领域发展迅速,但它仍将是必读之书。
——Prof. DDr. Roman Egger,Smartvisions.at的首席执行官和维也纳模都尔大学
序言
大型语言模型(LLMs)对世界产生了深远而广泛的影响。通过使机器能够更好地理解和生成类人语言,LLMs在人工智能领域开辟了新的可能性,并影响了整个行业。
本书对LLMs的世界进行了全面且高度可视化的介绍,涵盖了概念基础和实际应用。从深度学习之前的单词表示到(在撰写本文时)最前沿的Transformer架构,我们将探索LLMs的历史和演变。我们深入研究LLMs的内部工作原理,探索它们的架构、训练方法和微调技术。我们还将研究LLMs在文本分类、聚类、主题建模、聊天机器人、搜索引擎等方面的各种应用。
凭借其独特的直觉培养、应用和说明风格的融合,我们希望这本书能为那些希望探索LLMs令人兴奋的世界的人提供理想的基础。无论你是初学者还是专家,我们都邀请你加入我们的旅程,开始使用LLMs进行构建。
直觉优先的理念
本书的主要目标是培养对LLMs领域的直觉。语言AI领域的发展速度极快,试图跟上最新技术可能会令人感到沮丧。因此,我们专注于LLMs的基础知识,并打算提供一个有趣且轻松的学习过程。
为了实现这种直觉优先的理念,我们大量使用可视化语言。插图将有助于为LLMs学习过程中涉及的主要概念和流程赋予视觉特征。通过我们的插图式讲故事方法,我们想带你踏上通往这个令人兴奋且可能改变世界的领域的旅程。
在整本书中,我们对表征语言模型和生成语言模型进行了明确区分。表征模型是不生成文本但通常用于特定任务用例(如分类)的LLMs,而生成模型是生成文本的LLMs,如GPT模型。尽管生成模型通常是人们想到LLMs时首先想到的,但表征模型仍然有很大的用途。我们也在宽泛地使用“大型”这个词在大型语言模型中,并且经常选择简单地称它们为语言模型,因为规模描述往往相当随意,并不总是能表明能力。
先决条件
本书假设读者具有一些Python编程经验,并熟悉机器学习的基础知识。重点将放在培养强烈的直觉上,而不是推导数学方程。因此,插图与实际操作示例相结合将推动本书中的示例和学习。本书不要求读者事先了解流行的深度学习框架(如PyTorch或TensorFlow),也不要求事先了解生成建模。
如果你不熟悉Python,一个很好的入门地方是Learn Python,在那里你可以找到许多关于该语言基础知识的教程。为了进一步简化学习过程,我们将所有代码放在Google Colab上,这是一个你可以运行所有代码而无需在本地安装任何东西的平台。
书籍结构
本书大致分为三个部分。它们在图P - 1中进行了说明,以便让你对整本书有一个全面的了解。请注意,每一章都可以独立阅读,所以你可以自由跳过你已经熟悉的章节。
第一部分:理解语言模型
在本书的第一部分,我们探索了大小型语言模型的内部工作原理。我们从该领域的概述和常见技术(见第1章)开始,然后转向这些模型的两个核心组件,分词和嵌入(见第2章)。我们以Jay著名的《图解Transformer》的更新和扩展版本结束这部分内容,该版本深入探讨了这些模型的架构(见第3章)。许多术语和定义将在整本书中被引入和使用。
第二部分:使用预训练语言模型
在本书的第二部分,我们探索如何通过常见用例使用LLMs。我们使用预训练模型并展示它们的能力,而无需对其进行微调。
你将学习如何使用语言模型进行监督分类(见第4章)、文本聚类和主题建模(见第5章)、利用嵌入模型进行语义搜索(见第6章)、生成文本(见第7章和第8章)以及将文本生成能力扩展到视觉领域(见第9章)。
学习这些个体语言模型的能力将使你具备使用LLMs解决问题并构建越来越复杂的系统和管道的技能。
第三部分:训练和微调语言模型
在本书的第三部分,我们通过训练和微调各种语言模型来探索高级概念。我们将探索如何创建和微调一个嵌入模型(见第4章),回顾如何微调BERT进行分类(见第6章),并以几种微调生成模型的方法结束本书(见第7章)。
硬件和软件要求
运行生成模型通常是一项计算密集型任务,需要一台带有强大GPU的计算机。由于并非每位读者都能使用到这些设备,本书中的所有示例都设计为使用一个在线平台运行,即Google Colaboratory,通常缩写为“Google Colab”。在撰写本文时,这个平台允许你使用一个NVIDIA GPU(T4)免费运行你的代码。这个GPU有16GB的VRAM(这是你的GPU的内存),这是我们对整本书中的示例所期望的最低VRAM量。
注意:并非所有章节都需要至少16GB的VRAM,因为有些示例(如训练和微调)比其他示例(如提示工程)计算密集度更高。在代码库中,你将找到每个章节的最低GPU要求。
所有代码、要求和额外的教程都可以在本书的代码库中找到。如果你想在本地运行示例,我们建议你使用一台具有至少16GB VRAM的NVIDIA GPU。对于本地安装,例如使用conda,你可以按照以下设置创建你的环境:
conda create -n thellmbook python=3.10
conda activate thellmbook
你可以通过克隆或分叉代码库,然后在你新创建的Python 3.10环境中运行以下命令来安装所有必要的依赖项:
pip install -r requirements.txt
API密钥
我们在示例中使用了开源和专有模型,以展示两者的优缺点。对于专有模型,使用OpenAI和Cohere的产品,你需要创建一个免费账户:
OpenAI
点击网站上的“注册”创建一个免费账户。这个账户允许你创建一个API密钥,该密钥可用于访问GPT - 3.5。然后,转到“API密钥”创建一个秘密密钥。
Cohere
在网站上注册一个免费账户。然后,转到“API密钥”创建一个秘密密钥。
注意:使用这两个账户时,都有速率限制,并且这些免费的API密钥每分钟只允许有限数量的调用。在所有示例中,我们都考虑到了这一点,并在必要时提供了本地替代方案。
对于开源模型,除了第2章中的Llama 2模型外,你不需要创建账户。要使用该模型,你需要一个Hugging Face账户:
Hugging Face
点击Hugging Face网站上的“注册”创建一个免费账户。然后,在“设置”中转到“访问令牌”创建一个令牌,你可以使用该令牌下载某些LLMs。
本书使用的排版约定
以下是本书使用的排版约定:
• 斜体:表示新术语、URL、电子邮件地址、文件名和文件扩展名。
• 等宽字体:用于程序列表,以及在段落中引用程序元素,如变量或函数名称、数据库、数据类型、环境变量、语句和关键字。
• 等宽粗体:显示用户应逐字输入的命令或其他文本。
• 等宽斜体:显示应替换为用户提供的值或由上下文确定的值的文本。
使用代码示例
补充材料(代码示例、练习等)可在https://github.com/HandsOnLLM/Hands - On - Large - LanguageModels下载。
如果你有技术问题或使用代码示例时遇到问题,请发送电子邮件至support@oreilly.com。
本书旨在帮助你完成工作。一般来说,如果本书提供了示例代码,你可以在你的程序和文档中使用它。你不需要联系我们获取许可,除非你要复制大量的代码。例如,编写一个使用本书中几个代码块的程序不需要许可。销售或分发O’Reilly书籍中的示例需要许可。通过引用本书并引用示例代码来回答问题不需要许可。将大量示例代码纳入你的产品文档需要许可。
我们赞赏但一般不要求注明出处。注明出处通常包括书名、作者、出版商和ISBN。例如:“Hands - On Large Language Models by Jay Alammar and Maarten Grootendorst (O’Reilly). Copyright 2044 Jay Alammar and Maarten Pieter Grootendorst, 978 - 1 - 098 - 15096 - 9.”
如果你觉得你对代码示例的使用超出了合理使用范围或上述许可范围,请随时联系我们,邮箱是permissions@oreilly.com。
O’Reilly在线学习
注意:40多年来,O’Reilly Media一直提供技术和商业培训、知识和洞察力,以帮助公司取得成功。
我们独特的专家和创新者网络通过书籍、文章和我们的在线学习平台分享他们的知识和专业技能。O’Reilly的在线学习平台让你按需访问实时培训课程、深入学习路径、交互式编码环境以及来自O’Reilly和200多个其他出版商的大量文本和视频。如需更多信息,请访问https://oreilly.com。
如何联系我们
请将关于本书的评论和问题发送给出版商: O’Reilly Media, Inc. 1005 Gravenstein Highway North Sebastopol, CA 95472 800 - 889 - 8969(在美国或加拿大) 707 - 827 - 7019(国际或本地) 707 - 829 - 0104(传真) support@oreilly.com https://www.oreilly.com/about/contact.html
我们有一个关于本书的网页,在那里我们列出了勘误表、示例以及任何其他附加信息。你可以访问这个网页,网址是https://oreil.ly/hands_on_LLMs_1e。
如需关于我们的书籍和课程的新闻和信息,请访问https://oreilly.com。
在LinkedIn上找到我们:https://linkedin.com/company/oreilly-media。
在YouTube上观看我们:https://youtube.com/oreillymedia。
致谢
撰写这本书是一次令人难以置信的经历、合作和旅程。
(大型)语言模型领域是当今技术中最具活力的领域之一,在撰写本书的过程中,我们目睹了非凡的进步。然而,尽管变化迅速,但基本原则仍然惊人地一致,这使得写作过程特别有趣。我们很感激有机会在这样一个关键时刻深入探索这个领域。
与我们的O’Reilly团队合作非常棒!特别感谢Michele Cronin,从第一天起她就为这本书提供了惊人的反馈、支持和热情——你太棒了!感谢Nicole Butterfield启动了这本书,并帮助我们在写作过程中保持结构化的方法。感谢Karen Montgomery为我们创造了精彩的封面,我们喜欢那只袋鼠!非常感谢Kate Dullea,她对我们不得不反复审阅数百张插图非常有耐心。Clare Laylock的及时早期发布帮助我们看到我们的工作在成长,这是一个很大的激励,谢谢你。感谢Ashley Stussy和Charles Roumeliotis在本书最后阶段的开发工作,以及O’Reilly的其他所有为本书做出贡献的人。
感谢我们出色的技术评审团队。Harm Buisman、Emir Muñoz、Luba Elliott、Guarav Chawla、Rafael V. Pierre、Luba Elliott、Tarun Narayanan、Nikhil Buduma和Patrick Harrison提供了宝贵的反馈。Jay
我想向我的家人表达我最深切的感激之情,他们给予了我坚定不移的支持和灵感。我想特别感谢我的父母,Abdullah和Mishael,以及我的姑姑,Hussah和Aljoharah。
我很感激那些帮助我理解和解释本书中棘手概念的朋友、同事和合作者,以及Cohere的那些营造了一个支持学习和分享环境的人。感谢Adrien Morisot、Aidan Gomez、Andy Toulis、Anfal Alatawi、Arash Ahmadian、Bharat Venkitesh、Edward Grefenstette、Ivan Zhang、Joao Araújo、Luis Serrano、Matthias Gallé、Meor Amer、Nick Frosst、Patrick Lewis、Phil Blunsom、Sara Hooker和Suhas Pai。
我无法想象这个项目能在没有Maarten,我的合著者的非凡才能和不懈努力的情况下达到现在的水平。你能够反复准确把握技术细节(从第n个导入依赖项的固定版本到LLM量化的最新进展),同时编织出世界上最好的视觉叙事,这绝对令人惊叹。
最后,我要向沙特阿拉伯利雅得令人难以置信的咖啡店场景致敬,它为我提供了咖啡因,并提供了一个从黎明到午夜专注的好地方。这是我阅读大部分论文并理解相关内容的地方(看着你,Elixir Bunn)。Maarten
我想首先向我的合著者Jay表达我衷心的感激之情。你的见解不仅使这本书成为可能,而且令人难以置信地充实。这段旅程简直太棒了,与你合作是一种绝对的快乐。
我想真诚地感谢我在IKNL的出色同事们在这段旅程中给予的持续支持。特别要提到Harm——我们周一早上的咖啡休息时间讨论这本书是一种持续的鼓励。
感谢我的家人和朋友给予的坚定不移的支持,特别要感谢我的父母。爸爸,尽管你面临困难,但你总是在我最需要的时候找到方法来支持我,谢谢你。妈妈,我们作为有抱负的作家进行的对话非常美好,给了我比你能想象到的更多的激励。谢谢你俩给予的无尽支持和鼓励。
最后,我对我的妻子Ilse感到无言以对。亲爱的,你的无限热情和耐心堪称传奇,尤其是当我连续几个小时滔滔不绝地谈论LLM的最新发展时。你是我最大的支持。我要向我可爱的女儿Sarah道歉。才两岁的你已经听了比任何人一生中应该听的关于大型语言模型的内容都要多!我保证我们会用无尽的玩耍时间和冒险来弥补。