前言

生成式人工智能——最近,全世界都在热议这个深刻的概念。无论你转向哪里,无论是观看晚间新闻,还是听一些最聪明的商业领袖采用技术,或者跟踪全球市场,生成式人工智能都是这些对话的前沿。这种革命性技术以前所未有的速度与所有行业、经济、企业和组织交织在一起。

尽管人工智能和更近期的生成式人工智能的概念已经存在了很长时间,但两者都是在引入一个极其强大的对话式聊天机器人 ChatGPT 后进入主流知识的。

2022 年底推出的 ChatGPT 以一种前所未有的水平和精确度与用户或应用进行对话式交互。虽然我们已经有很长时间的聊天机器人,但 ChatGPT 打破了传统模式,并将人类基本上推进到了“人工智能时代”。

我们将在本书中介绍的 ChatGPT 背后的技术,以及生成式人工智能,使得完成以前从未见过的深刻事物成为可能——例如回答后续问题、承认错误、挑战错误的思想和建议,甚至拒绝不适当的要求,以帮助我们保护自己。由于其强大的知识能力和快速、精确的响应速度,ChatGPT 吸引了所有人的注意——甚至那些不在科技行业的人。

生成式人工智能已经触及了我们许多人的生活,许多人甚至不知道这一点。而且这种增长趋势不会很快放缓。事实上,我们预计几乎所有未来的职业和职位都将有一个基本要求,即对某些人工智能的核心经验/专业知识,加上对人工智能/生成式人工智能的实施有实际了解。本书将作为您为今天和明天做准备的基本指南。

在本书中,我们从您将获得生成式人工智能基本知识的地方开始,随后介绍围绕这一人工智能技术构建成功云解决方案所需的内容。我们将使用微软 Azure 人工智能云和 OpenAI 的视角作为我们的示例,这不仅是因为它们的市场领导地位,也因为我们目前都在微软工作。我们采取了一种全面、行业范围内的方法,其中知识和概念可以应用于任何云解决方案提供商/供应商。

我们希望您阅读这本书的乐趣与我们写作这本书的乐趣一样!请注意,尽管生成式人工智能可以创建书籍等内容的文本,但本书是由我们这些作者创建和撰写的,而不是我们所涵盖的生成式人工智能技术(除了每章中的有趣生成的漫画条幅之外)。

本书面向的对象

本书主要面向希望更好地理解生成式人工智能及其在云环境中应用的技术人员或普通读者。

本书假设您对生成式 AI 知之甚少,因为我们从基本理解开始,逐步深入到云环境可能呈现的一些更复杂的概念和模式。

本内容的目标受众如下:

  • 想要理解生成式 AI 更广泛图景以及有效、稳健和可扩展的生成式 AI 解决方案/服务的策略的技术人员,包括解决方案架构师、云开发者、数据科学家、技术经理和技术业务领导者。

  • 希望充分利用 AI/生成式 AI 的企业和组织。

本书涵盖的内容

本书提供了一个结构化的叙述,从生成式 AI 及其与云计算的集成介绍开始。随后深入探讨模型层,更深入地了解大型语言模型LLMs)的复杂性,包括自然语言处理NLP)的演变和 Transformer 模型的诞生。讨论了微调、检索增强生成RAG)等技术以增强模型知识。接着讨论了提示工程方法。在应用层面,涵盖了开发框架和策略,强调扩展性、安全性、安全性和符合负责任的 AI 原则。结论部分对生成式 AI 的未来轨迹进行了展望。以下是本书各章节的概述:

第一章云计算遇见生成式 AI:连接无限可能,介绍了 LLMs 的概念,ChatGPT 所基于的内容,以及它们在对话式和生成式 AI 中的重要性。本章探讨了 LLMs 的生成能力,如文本生成和创意写作。章节最后探讨了 LLMs 在虚拟助手、内容创作等方面的实际应用及其未来发展方向。

第二章自然语言处理与 Transformer:探索 NLPs 和 LLMs,带您穿越 Transformer——LLMs 核心的演变历程,从之前被称为自然语言处理NLP)的技术到如今利用 NLP 和 LLMs 创建的强大新范式。

第三章微调:构建领域特定 LLM 应用,讨论了微调的好处、不同的微调技术、如何使用 RLHF 将模型与人类价值观对齐、评估微调模型以及微调成功的真实案例。

第四章, RAGs to Riches:利用外部数据提升人工智能,讨论了向量数据库的基本原理以及它们在构建基于检索增强生成(RAG)的应用中的关键作用。我们还将探讨分块策略评估技术以及一个真实案例研究。

第五章, 有效的提示工程策略:通过人工智能开启智慧,探讨了 ChatGPT 的提示工程以及一些技术,不仅使提示更加有效,还能理解一些提示的伦理维度。

第六章, 开发和运营基于 LLM 的云应用:探索开发框架和 LLMOps,从软件应用开发者的视角关注支持开发者活动如程序化应用开发框架等区域,以实现人工智能赋能的应用。我们还将探讨生成人工智能模型的整个生命周期管理,以及除了运营生成人工智能模型管理之外,还有诸如代理、自主代理和助手 API 等令人兴奋的话题。

第七章, 在云端部署 ChatGPT:架构设计和扩展策略,探讨了如何扩展大型生成人工智能云解决方案的部署。在审视确保大规模生成人工智能应用或服务足够健壮以处理大量提示的区域和类别时,您将了解限制、设计模式和错误处理。

第八章, 通用人工智能的安全和隐私考虑:构建安全可靠的大型语言模型,揭示了与通用人工智能模型相关的现有和新兴安全威胁,以及如何通过应用安全控制或其他技术来减轻这些威胁,以确保一个安全、可靠的环境。我们还将介绍一个称为“红队”的概念,以及审计和报告。

第九章, 人工智能解决方案的负责任开发:以诚信和关怀构建,深入探讨了构建安全生成人工智能解决方案所需的必要组件,强调了负责任人工智能的关键原则,并通过这些原则解决大型语言模型(LLMs)的挑战。它还探讨了社会对深度伪造日益增长的担忧,以及以负责任人工智能为首要开发应用的战略。此外,它还考察了当前全球监管趋势以及该领域蓬勃发展的初创企业生态系统。

第十章生成式 AI 的未来:趋势和新兴用例,是本书中最激动人心的章节之一,讨论了生成式 AI 解决方案的未来,突出了诸如小型语言模型的兴起等热门新兴趋势,提供预测,探讨在边缘设备上集成 LLM,以及检查量子计算和通往 AGI 的道路。

要充分利用本书

虽然不需要了解人工智能AI)或生成式人工智能GenAI),但对此有了解将有助于理解本书中的一些概念。

您应该对云计算及其相关技术有一个基本的了解。虽然我们专注于微软 Azure 云平台,但由于其在该领域的市场领导地位,许多概念也将包括开源概念和想法,或者可以转换为其他云服务提供商。

本书涵盖的软件/硬件操作系统要求
访问 GitHub 仓库任何具有互联网访问功能的现代设备。
微软 Azure 云订阅

为了深入探讨本书中的一些更复杂的概念,我们在 GitHub 网站上创建了额外的动手实验室(详情见下文)。虽然本书不需要访问 GitHub 和随后的 Azure 云,但对于一些人来说可能会有所帮助,尤其是那些希望应用他们知识的人。

如果您使用的是本书的数字版,我们建议您亲自输入代码。这样做将帮助您避免与代码的复制和粘贴相关的任何潜在错误。

下载动手实验室和示例代码文件

github.com/PacktPublishing/Generative-AI-for-Cloud-Solutions
github.com/PacktPublishing/

使用的约定

本书使用了多种文本约定。

文本中的代码arxiv.org/pdf/2108.07258.pdf

代码块设置如下:

from langchain.text_splitter import ( 
    RecursiveCharacterTextSplitter, 
    Language, 
)

任何命令行输入或输出都应如下编写:

['Ladies and Gentlemen, esteemed colleagues, and honored guests. Esteemed leaders and distinguished members', 'emed leaders and distinguished members of the community. Esteemed judges and advisors. My fellow citizens.', '. My fellow citizens. Last year, unprecedented challenges divided us. This year, we stand united,', ', we stand united, ready to move forward together']

粗体:表示新术语、重要单词或屏幕上出现的单词。例如,菜单或对话框中的单词以粗体显示。以下是一个示例:“已经有无数个变压器模型,例如GPTLlama 2DollyBERTBARTT5等等。”

小贴士或重要注意事项

它看起来像这样。

联系我们

我们始终欢迎读者的反馈。

一般反馈:如果您对本书的任何方面有疑问,请通过电子邮件发送至 customercare@packtpub.com,并在邮件主题中提及书名。

勘误:尽管我们已经尽最大努力确保内容的准确性,但错误仍然可能发生。如果您在这本书中发现了错误,如果您能向我们报告,我们将不胜感激。请访问www.packtpub.com/support/errata并填写表格。

盗版:如果您在互联网上以任何形式遇到我们作品的非法副本,如果您能提供位置地址或网站名称,我们将不胜感激。请通过 copyright@packt.com 与我们联系,并提供材料的链接。

如果您有兴趣成为作者:如果您在某个领域有专业知识,并且您有兴趣撰写或为本书做出贡献,请访问authors.packtpub.com。

分享您的想法

一旦您阅读了《云解决方案的生成式 AI》,我们很乐意听到您的想法!请点击此处直接进入此书的亚马逊评论页面并分享您的反馈。

您的评论对我们和科技社区非常重要,并将帮助我们确保我们提供高质量的内容。

下载本书的免费 PDF 副本

感谢您购买本书!

您喜欢在路上阅读,但又无法携带您的印刷书籍到处走?

您选择的电子书购买是否与设备不兼容?

别担心,现在,每本 Packt 书籍都免费提供该书的 DRM 免费 PDF 版本,无需额外费用。

在任何地方、任何设备上阅读。直接从您最喜欢的技术书籍中搜索、复制和粘贴代码到您的应用程序中。

优惠不会就此结束,您还可以获得独家折扣、时事通讯和每天收件箱中的精彩免费内容

按照以下简单步骤获取福利:

  1. 扫描二维码或访问以下链接
  1. 提交您的购买证明

  2. 就这样!我们将直接将免费 PDF 和其他福利发送到您的电子邮件

第一部分:整合云力量与语言突破

本部分通过大型语言模型LLMs)的视角介绍生成式 AI,强调云计算领域的进步对该领域产生的巨大推动力。自然语言处理(NLP)的渐进式演变最终导致了 Transformer 架构的发展,这是 LLMs 的关键基础。我们将详细阐述其创新机制和核心原则。此外,我们还将探索将愿景 AI 想法转化为现实的过程。

本部分包含以下章节:

  • 第一章, 云计算遇见生成式 AI:连接无限可能

  • 第二章, 自然语言处理与 Transformer:探索 NLPs 和 LLMs

第一章:云计算与生成式 AI 的相遇:连接无限可能

在过去几十年里,由于计算(尤其是云计算)的兴起以及数字革命带来的大量数据涌入,人工智能(AI)和机器学习(ML)领域取得了前所未有的进步。2022 年,被称为生成式 AI 的 AI 子集成为了一个重要的转折点。我们已经超过了 AI 的一个拐点,我们相信这将在未来几年中极大地提高社会生产力和增长。这是由大型语言模型(LLMs)驱动的对话式 AI 领域,这是一个令人着迷的范例,其中计算机学习并生成类似人类的文本、图像、音频和视频,以越来越互动和智能的方式与我们互动。以 OpenAI 的基于 GPT 的 ChatGPT 等模型为代表的 LLMs 的变革潜力,标志着我们与技术互动方式的重大转变。生成式 AI 模型现在具有更高的准确性和有效性。几年前对非技术用户来说难以触及的业务用例现在可以轻松实现。此外,开源模型的易于获取,可以根据特定业务需求进行定制,以及通过云计算访问高性能 GPU,在推动生成式 AI 的进步中发挥了关键作用。

本章旨在全面介绍对话式和生成式 AI,并深入探讨其基础和强大功能。ChatGPT 是一个非常强大的对话式 AI 代理,它基于大型语言模型(LLM);因此,为了完全理解 ChatGPT 的工作原理,以及学习如何在您的应用程序或服务中实现它以利用其力量,了解对话式 AI 系统的演变以及 LLM 的更广泛背景是必要的。

本章将涵盖以下主要内容:

  • 对话式 AI 的演变

  • 生成式 AI 简介

  • 热门模型和商业应用

  • 深入探讨:开源模型与闭源模型

  • 云计算用于可扩展性、成本优化和自动化

  • 从愿景到价值:导航生产之旅

对话式 AI 的演变

理解对话式 AI 的演变对于学习生成式 AI 至关重要,因为它提供了基础知识和背景。这一历史视角揭示了人工智能技术是如何从简单的基于规则的系统发展到复杂的机器学习和深度学习模型,这些模型是对话式和生成式 AI 的核心。

本节探讨了对话式 AI 的演变,最终深入探讨了 LLM,这是当代聊天机器人的技术支柱。

什么是对话式 AI?

对话式人工智能指的是使机器能够进行类似人类的对话、理解复杂命令并智能回应的技术。这是通过机器学习和自然语言处理能力实现的,使系统能够随着时间的推移进行学习、理解和改进。以下图展示了这样一个对话示例:

图 1.1 – 与 Alexa 的对话

例如,客户与对话式人工智能互动以预订航班。他们可能会说:“我想要下周五去纽约的航班。”系统理解请求,询问任何进一步的详细信息(例如出发城市或首选时间),并交付结果,整个过程无需人工干预。

一些流行的对话式人工智能系统包括微软的 Cortana、亚马逊的 Alexa、苹果的 Siri 和谷歌助手,它们可以响应复杂的命令并智能地做出回应。

对话式人工智能的演变

探索对话式人工智能的演变,从基于规则的聊天机器人到人工智能驱动的系统,至关重要,因为它提供了历史背景,突出了从 1960 年代以来的技术进步和历史挑战,并为理解大型语言模型如何革命性地改变自然语言交互奠定了基础。以下图展示了对话式人工智能的时间线:

图 1.2 – 展示聊天机器人演变的时序图

基于规则的聊天机器人

最初在 1960 年代开发的聊天机器人基于规则系统。第一个聊天机器人软件 Eliza 是由麻省理工学院人工智能实验室的约瑟夫·魏岑鲍姆在 1966 年创建的。它使用了模式匹配和替换技术。用户通过基于文本的平台与 Eliza 互动,聊天机器人的回应基于脚本模板。与 Eliza 一样,第一代聊天机器人是基于规则的。它们使用模式匹配技术将用户输入与预定的响应对齐。聊天机器人的对话流程由开发者绘制,他们决定如何对预期的客户查询做出回应。响应是根据预定义的规则制定的,并使用如人工智能标记语言AIML)、Rivescript、Chatscript 等语言编写。这些聊天机器人通常用作常见问题解答代理,可以回答简单的问题或关于特定情况的一般查询。

然而,基于规则的系统存在重大局限性:

基于规则的系统需要手动设计,迫使开发者编写每个响应的代码

它们只在特定训练的场景中有效

开发者很难预测并编写所有可能的响应

这些聊天机器人无法识别用户输入中的语法或句法错误,通常导致误解

它们无法从交互中学习或生成新的响应,这限制了它们的适应性和智能。

尽管它们速度快,但无法理解上下文或用户意图,使得交互感觉像机械式的而不是对话式的。

这种机械式的交互往往导致用户对无法准确理解和满足其需求的系统感到沮丧。

随着时间的推移,对智能、实时和个性化客户支持服务的需求显著增加。因此,基于规则的聊天机器人已经演变成由 AI 驱动的聊天机器人,它们提供高级功能,如类似人类的语音、意图提取、情感分析、上下文语义搜索、语法分析、随时间学习以及可扩展性,以便与更复杂的应用和服务无缝集成。

由 LLM 驱动的聊天机器人——多模态、上下文感知和基于代理的。

与基于规则的系统相比,基于 AI 的系统利用自然语言处理来促进自然对话并从用户输入中提取上下文。它们还可以从过去的交互中学习,即上下文。最近,深度学习在对话式人工智能方面取得了显著进步,甚至在某些任务上超过了人类的表现,这归功于其令人难以置信的推理引擎。这减少了在构建语言服务时对广泛的语言知识和基于规则的技术的依赖。因此,基于 AI 的系统在各个行业得到了广泛应用,包括媒体、娱乐、电信、金融、医疗保健和零售等行业,仅举几例。

当前利用 LLM 如 GPT-4-Turbo 的对话式人工智能系统,在方法和能力上与传统基于规则的系统有显著差异:

而基于规则的系统依赖于预定义的规则和响应,将它们限制在特定的、预期的交互中,而大型语言模型(LLM)利用庞大的数据集和高级推理能力来生成既自然又多样化的响应,同时高度感知上下文。

它们也是多模态的,这意味着它们可以理解和响应多种形式的通信,如文本、语音、图像或视频。

这些卓越的推理能力使它们能够以更高的效率和复杂性处理任务,从而产生与人类互动和理解非常相似的对话。

让我们以客户服务交互的场景为例,来突出传统基于规则的系统和现代使用 LLM(如 GPT-4)的现代对话式人工智能系统之间的差异。

以下是一个基于规则的系统示例:

Customer: "I want to return a gift I received without a receipt. Can you help me?"
Rule-Based Chatbot: "Please enter your order number to proceed with a return."

在这种情况下,基于规则的聊天机器人被编程为在其退货流程脚本中请求订单号。它无法处理客户没有收据的情况的细微差别。它陷入了预定义的规则中,无法适应意外的情况。

以下是一个由 LLM 驱动的对话式人工智能示例:

Customer: "I want to return a gift I received without a receipt. Can you help me?"
LLM-Powered Chatbot: "Certainly! Gifts can often be returned without a receipt by verifying the purchaser's details or using a gift return code. Do you have the purchaser's name or email, or a gift return code?"

另一方面,由大型语言模型(LLM)驱动的聊天机器人理解没有收据的情境,并提供了退货的替代方法。它不需要客户坚持严格的脚本,而是适应对话的上下文,并提供有用的回应。这展示了 LLM 的高级推理能力,使得对话更加自然、灵活,更接近人类。

LLM 驱动的聊天机器人也存在固有的局限性,包括难以生成准确的信息、容易产生幻觉以及在其训练数据中存在的偏差的再现。我们将在本书中探讨这些局限性,以及减轻和消除这些局限性的策略。

聊天机器人和代理

ChatGPT,由 OpenAI 于 2022 年 11 月推出,由于其先进的语言能力和在各种任务中的广泛应用,仅两个月内就吸引了 1 亿用户。

在接下来的章节中,我们将深入探讨 LLM 作为现代聊天机器人驱动力及其重要性的基础。

生成式 AI 简介

生成式 AI 指的是人工智能(如前图所述)的一个领域,该领域专注于创建或生成新的内容,如图像、文本、音乐、视频、代码、3D 对象或合成数据,这些内容不是直接从现有数据中复制或复制的。它涉及训练深度学习模型来理解给定数据集中的模式和关系,然后使用这些知识来生成新颖和独特的内容。以下是对生成式 AI 的可视化:

图 1.3 – 什么是生成式 AI?

这是一个广泛的领域,其主要功能是生成新颖的内容。生成式 AI 模型的例子包括图像生成模型如DALL-EMidJourney,文本生成模型如GPT-4PaLMClaude,代码生成模型如Codex,音频生成工具如MusicLM,以及视频生成模型如SORA

2022-23 年生成式 AI 的兴起

生成式 AI 在最近达到了一个拐点,这可以归因于三个关键因素:

arxiv.org/abs/1706.03762

存在着各种类型的生成式 AI 模型,它们具有不同的底层架构。其中,变分自编码器(VAEs)、扩散模型GANs自回归模型特别受欢迎。虽然我们不会深入探讨每个模型架构,因为这超出了本书的范围。在第二章中,我们将更详细地讨论 ChatGPT 的 LLM 架构,该架构利用了基于自回归的****transformer 架构

从生成式 AI 的话题转向,我们现在将注意力转向基础模型。这些模型通常与 LLMs 互换使用,是生成式 AI 成功和可能性的驱动力。在基础模型方面取得的显著进步对于推动我们今天在生成式 AI 应用中看到的进步至关重要。它们的发展不仅使 AI 能力更加复杂,还为 AI 创新和可能性的新时代奠定了基础。

基础模型

arxiv.org/pdf/2108.07258.pdf

图 1.4 – 基础模型

LLMs

另一方面,LLMs 是基础模型的一个子集,专门处理自然语言处理任务。它们在大规模文本语料库中进行训练,旨在以接近人类语言理解的方式理解和生成语言。LLMs 在大量数据上进行训练,例如书籍、文章和互联网。例如,ChatGPT 的基础模型是在 45 TB 的数据上训练的。

例如,GPTs 等 LLMs 使用 transformer 架构来处理文本序列,通过训练自己预测给定序列中的下一个单词。通过接触大量的文本,这些模型根据预测单词和实际单词之间的差异调整其内部权重,这个过程被称为反向传播。随着时间的推移,通过在多个注意力机制层中反复微调这些权重,它们捕捉到语言中的复杂统计模式和依赖关系,使它们能够生成上下文相关的文本。在第二章中,我们将更深入地探讨 LLMs 的 transformer 架构,该架构使得 ChatGPT 应用成为可能。

LLMs(大型语言模型)通常指的是处理大规模语言任务的模型;其背后的原理和架构可以,并且正在被扩展到其他领域,如图像生成。这种能力范围的扩展反映了基于 transformer 的模型的多功能和适应性,这些模型既推动了 LLMs,也推动了它们的多模态对应物。

例如,DALL-E 等模型有时被称为 LLMs,因为它们基于最初为语言任务开发的 transformer 架构。然而,DALL-E 更准确地被描述为一个多模态 AI 模型,因为它理解文本和图像,并且可以从文本描述中生成图像。

LLMs 的核心属性

在创建基于 LLM 的 AI 应用程序的过程中,了解 LLM 的核心属性至关重要,例如模型参数、许可模型、隐私、成本、质量和延迟。需要注意的是,没有完美的模型,为了满足特定应用程序的商业需求,可能需要进行权衡。以下内容仅关注设计 LLM 应用程序时的关键考虑因素。

模型参数

  • LLM 中的模型参数是模型用来理解和生成文本的内部设置。这些参数可以是系数、权重和偏差,它们是 LLM 模型背后的复杂数学方程式的一部分。这些参数通过训练进行调整,模型通过学习大量数据来预测句子中的下一个单词,理解上下文,并生成连贯且相关的文本。

    例如,在 LLM 的背景下,模型参数类似于基于学习到的数据模式的预测指导内部笔记。例如,如果一个 LLM 在训练过程中经常遇到“晴朗天气”这个短语,它会调整其参数以加强“晴朗”和“天气”之间的联系。这些调整就像转动旋钮,增加在新句子中预测“天气”在“晴朗”之后的可能性。因此,模型的参数编码了单词之间的关系,使其能够根据其训练生成上下文相关的文本。

  • 参数数量表示模型的大小和复杂性,一般来说,较大的模型能够捕捉到语言中更复杂模式和细微差别,但需要更多的计算资源。

  • 理解 LLM(大型语言模型)中的参数对于解释模型行为、定制和调整模型、评估和比较不同模型至关重要。

  • 相较于大型模型,较小的模型由于参数数量较少,因此更容易微调。

  • 在设计应用程序时,了解是否可以通过微调/上下文学习或是否需要较大的模型来满足特定用例的需求至关重要。例如,较小的模型如 GPT-3.5 和 FLAN-T5 通常成本较低,与 GPT-4 相比,它们在微调或上下文学习的情况下往往非常高效,尤其是在像对话摘要这样的特定任务中。

许可证

  • 开源模型可以直接使用或根据商业和非商业用途进行定制。它们通常比专有 LLM 模型小,成本更低,且更针对特定任务。例如,Whisper 是 Open AI 开发的开源语音转文本模型,而 Facebook 的 Llama 是一个开源模型。

  • 专有模型通常是较大的模型,需要获得许可。它们可能仅限于商业用途和修改。例如,GPT-4 是 Open AI 开发的专有模型。

  • 在设计应用时,了解它是一个开源模型还是许可模型,以及是否允许商业使用非常重要。这对于确保法律合规性、财务规划、伦理考量、定制可能性以及应用的长期成功至关重要。

隐私

  • 确保用于微调和提示 LLMs 的数据安全至关重要,尤其是在涉及敏感客户信息时。

  • 必须建立护栏以确保在微调模型之前以及在使用它们进行提示时,客户数据被删除。

  • 理解数据将被模型如何存储和利用也非常关键。在 ChatGPT 中可以配置数据控制,以防止系统保存聊天记录,从而不允许它们用于训练模型。

成本

  • 在设计 LLM 应用时,了解获取模型(例如许可费用)、与数据存储、计算、数据传输、微调和维护成本(如监控)相关的基础设施成本非常重要。

延迟

  • 这对于确保用户交互顺畅至关重要。在决定模型时,您必须判断输出是否需要实时或近实时响应。

  • 相比于小型模型,较大的模型 API 可能响应时间略慢且成本更高,但在某些场景下输出质量可能更好。例如,GPT-4 比 GPT 3.5 Turbo 略慢,但在涉及复杂推理的场景中可能表现更佳。

  • 要实现低延迟,需要考虑多个因素,例如为自托管开源 LLMs 选择合适的 LLM API 或硬件基础设施,或修改输入和输出的长度。应用缓存和 API 负载均衡等方法可以显著减少响应时间,从而带来流畅的用户体验。

提到的核心属性为根据业务需求筛选模型提供了良好的起点。然而,重要的是要了解某些 LLMs 可能表现出更多的偏见和更高的幻觉倾向。在第三章中,我们讨论了行业领先的基准,这将帮助您在考虑这些限制的情况下做出明智的决定。

生成式 AI、基础模型和 LLMs 之间的关系

生成式 AI 广泛指的是能够创建新内容的人工智能系统,如文本、图像、音频或视频。基础模型是生成式 AI 的一个子集,其特点在于规模庞大且在多个任务中具有多面性,通常在大量且多样化的数据集上训练。LLMs 作为一种基础模型,特别关注理解和生成人类语言,例如 GPT-3.5-Turbo 和 Llama 2 系统。

基础模型可以应用于多种 AI 任务,而不仅仅是语言,例如图像识别,而 LLM 则专注于与语言相关的任务。

在实践中,当上下文明确涉及语言任务时,这些术语有时可以互换使用,但重要的是要知道,基础模型的概念最初是希望更广泛,并涵盖更广泛的 AI 能力。

然而,现在,随着像 GPT-4 Turbo 这样的 LLM 扩展到多模态能力,基础模型和 LLM 之间的这种差异正在缩小。

生成式 AI 包含了一系列 AI 模型,旨在创建新的、以前未见过的内容,涵盖了从文本和图像到音乐的各个领域。以下图像展示了生成式 AI、LLM 和基础模型之间的关系:

图 1.5 – 什么是 LLM?

聊天机器人背后的 LLM

截至 2024 年初,ChatGPT 是 GPT-3.5 和 GPT-4 的一个专门应用,经过微调以适应对话交互。虽然 GPT-3.5/4 是一个通用的语言模型,能够执行各种语言任务,但 ChatGPT 已被专门训练以模仿人类对话的方式响应提示。这个过程从预先在互联网上的大量文本语料库上预训练的基础基础模型 GPT-3.5/4 模型开始。然后,为了创建 ChatGPT,OpenAI 在包含许多人类对话示例的数据集上进行了进一步的训练(微调)。这有助于 ChatGPT 更好地理解和生成对话式响应。本质上,GPT-3.5/4 可以被视为底层技术,而 ChatGPT 则是该技术的具体实现,针对对话进行了优化。

Google 的 Bard(现更名为 Gemini)与 ChatGPT 类似,它基于一个名为 PaLM-2 的 LLM 构建。

来自 Facebook 的 Llama 2 等开源模型最近变得更加流行。但它们与闭源或专有模型有何不同?它们有哪些优势?在下一节中,我们将探讨 LLM 作为开源模型的详细信息和定义。

深入探讨 – 开源与闭源/专有模型

近年来,像Llama 2MistralFalcon这样的开源模型变得越来越受欢迎。作为通用人工智能云架构师,作者们见证了在开源和闭源模型之间选择以及确定它们适用场景的激烈辩论。本节深入探讨了这些模型在“揭示什么”和“未揭示什么”方面的基本区别,以及关键的部署差异,借鉴了我们在该领域的见解。

闭源 LLM(例如,GPT-4、PaLM-2、Claude-2)

揭示的内容如下:

  • 功能和能力:用户知道模型能做什么,例如生成文本、回答问题等。

  • 使用指南:关于如何与模型交互(例如,API)及其预期用例的信息被公开。OpenAI 提供了 GPT 模型的 API 访问,但底层模型并未公开分发。

  • 性能指标:OpenAI 分享了 GPT 在各项任务和基准测试中的性能细节。

  • 伦理标准:OpenAI 讨论了在开发过程中遵循的伦理考虑和指南。

  • 一般架构概述:虽然不是非常详细,但通常会有一些关于模型架构的高级信息。

没有公开的是以下内容:

  • 源代码:闭源模型的实际代码库不公开提供

  • 模型权重:访问实际模型权重以实现完全复制的权限受到限制

  • 训练数据细节:关于训练数据集的具体信息,包括它们的来源和组成,通常不会公开披露

  • 详细模型架构:模型架构和算法的复杂细节属于专有信息

  • 训练过程:关于模型如何训练的具体细节,包括超参数和训练时长,并未公开

arxiv.org/pdf/2303.08774.pdf

开源大型语言模型(例如,Llama 2、Mistral、Falcon)

公开的是以下内容:

  • 源代码:完整的代码库通常可供公众访问。因此,个人和企业可以在个人电脑和本地或内部服务器上部署开源模型。

  • 模型权重:模型的权重可以被研究人员和开发者下载和使用。

  • 训练过程细节:关于模型如何训练的详细信息,包括数据集和超参数。

  • 完整架构细节:提供了关于模型架构的全面信息。

  • 数据集信息:尽管存在一些限制,关于训练数据集的更多信息可能可用。

没有公开的是以下内容:

  • 资源需求:关于训练所需的计算资源的具体细节可能不会完全公开

  • 伦理考虑:开源项目可能并不总是像某些闭源项目那样拥有相同的伦理监管水平

  • 性能优化秘诀:在训练过程中可能省略了一些性能优化的细微之处

  • 完整训练数据:即使在开源模型中,由于数据大小和许可问题,分享整个训练数据可能不切实际

  • 持续更新:与一些封闭源模型不同,开源模型可能不会收到持续的更新或支持

以下表格详细说明了开源和封闭源模型之间的关键部署差异:

封闭源模型开源 LLMs (OSS)
访问、成本和部署端点访问通常限于付费许可证、API 或订阅模式。成本可能成为小型组织或个人开发者的障碍。与这种部署相关的成本通常与提示和完成中的令牌数量相关。例如,截至 2024 年初,OpenAI 对 gpt-4-0125-preview 的提示收费为每 1K 令牌 0.01 美元,对完成收费为每 1K 令牌 0.03 美元。通常,源代码是免费提供的。部署开源模型需要设置计算实例的初始设置,这作为推理端点的基础。该端点可以实时运行或批量处理数据。与此部署策略相关的费用主要涉及计算资源的运营成本。然而,新的定价模式已经出现,例如 MaaS(模型即服务),其收费方式类似于基于 API 的模型,根据使用的令牌数量收费。
定制化和灵活性由于源代码不可用,定制选项通常仅限于提供商允许的范围。用户可能无法修改模型的内核架构或训练数据集。提供了更大的定制灵活性。开发者可以调整模型,使用特定数据集重新训练,甚至调整底层算法。
支持和文档通常,它们附带专业的支持和全面的文档,确保更顺畅的部署和故障排除过程。虽然通常有一个支持社区,但正式支持和文档的质量和可用性可能会有所不同。
集成和兼容性它们可能与同一提供商提供的其他专有工具或平台有更好的集成,但在与广泛技术的兼容性方面可能不太灵活。它们通常设计得更加灵活,并与各种平台和工具兼容,尽管集成可能需要用户付出更多努力。
安全性和更新安全更新和补丁通常由提供商管理,确保一致的维护水平。安全性依赖于社区和维护者,这可能导致更新在及时性和有效性方面存在不同程度的差异。
道德、合规性和责任提供商通常负责遵守法规,为商业活动提供一定程度的保障。用户通常需要自行确保合规性,这对于受监管行业的商业活动来说可能是一个重要的考虑因素。
风险
  • 由于许可费用可能导致的潜在更高成本

  • 与开源相比,定制能力有限,以满足业务需求

  • 供应商锁定

  • 由于对大型语言模型内部运作的了解有限,透明度降低

|

  • 由于是社区驱动的,可能允许恶意使用,存在潜在的安全漏洞

  • 由于缺乏集中质量控制,可能导致更新和改进的不一致性

  • 依赖社区支持可能导致故障排除和问题解决不一致,影响需要稳定、持续维护的项目

|

图 1.6 – 关键部署差异

huggingface.co/spaces/HuggingFaceH4/open_llm_leaderboard

流行模型、任务和商业应用趋势

生成式人工智能在各个行业都有广泛的应用,提出了可以为企业带来显著效益的多种用例,并且应用正在以快速的速度增长。在本节中,我们将讨论流行的任务和模型,并检查最近获得显著关注的最新新兴商业应用。

让我们从文本生成模型开始。

文本

文本生成模型可以用于各种任务,如本文所述。以下,我们提到了我们与客户合作构建解决方案时看到的最受欢迎的任务:

  • 摘要:它们可以将长文档,如教科书章节或详细的产品描述,压缩成简洁的摘要,同时保留关键信息。

  • 问答:这些模型可以提供准确的答案,这在从广泛的知识库内容自动创建常见问题解答文档时特别有用。

  • 分类:文本生成模型可以对文本进行分类,根据语法正确性或其他预定义类别等标准分配标签。

  • 情感分析:作为一种专门的分类形式,这些模型可以分析和标记文本的情感,识别诸如快乐和愤怒或一般积极和消极的情绪。

  • 实体提取:它们可以从更大的文本体中提取特定的信息,如电影名称,从而有助于信息检索和组织。

  • 翻译:语言模型在翻译方面表现出色,能够快速准确地转换一种语言到另一种语言,利用庞大的数据集来理解和维护上下文和细微差别。代码生成可以被视为一种翻译,其中语言模型将人类语言指令翻译成编程代码。

这些能力使文本生成模型成为无价之宝,并导致了创新应用的创造。以下是我们观察到的一些有趣的商业应用,这些应用是由于文本生成模型的普及而在各个行业中出现的:

  • 企业聊天机器人:文本生成模型为能够与用户进行自然语言对话的对话代理提供动力,提供客户支持、人力资源支持、学习和开发以及任务协助。我们观察到的最流行的用例是建立在组织数据基础上的企业聊天机器人的实施。

  • 内容创作(文章、博客文章、报告、书籍):文本生成模型可以自动生成各种主题的高质量书面内容,为内容创作者节省时间和精力,并使在同一平台上实现无缝问答体验。这在媒体、营销、娱乐和出版行业中已成为提高生产力的主要因素。

  • 房地产列表:文本生成模型使房地产公司能够通过输入诸如卧室数量、房产年龄、社区信息和其他独特卖点等详细信息,轻松地制作吸引人的房屋列表,显著增强了房产对潜在买家的吸引力。

  • 自动电子邮件草稿:文本生成模型帮助撰写个性化的、与上下文相关的电子邮件,简化沟通,并提高电子邮件通信中的生产力,例如微软的 Copilot 应用程序。

  • 个性化广告:这些模型有助于根据个人用户定制营销信息和内容,通过提供更相关和吸引人的内容来提高广告活动的有效性。

  • 提案创建:它们通过自动化创建请求提案(RFP)响应的提案,极大地简化了房地产公司的运营。此工具还促进了 RFP 提交的快速搜索,并在制作和撰写高质量内容方面极大地帮助了营销团队。

  • 广告活动:在营销和广告活动中,文本生成模型通过提供对长篇内容的精确和高效摘要,提供了强大的优势。此外,这些模型能够在各种语言之间无缝翻译文本,有效地消除语言障碍。这种能力增强了跨文化交流,使营销人员能够更有效地触及和引起不同、全球受众的共鸣。

  • 代码协同:GitHub Copilot 等产品的出现极大地提高了组织中的开发者生产力。

以下列出了截至 2024 年初在快速发展的领域中领先的文本生成模型:

  • GPT-4-Turbo:由 OpenAI 开发,是目前生产中最受欢迎的模型。GPT-4 是一个具有深度学习能力的大型多模态模型,能够生成类似人类的对话文本。它可以接受文本和图像输入以生成类似人类的文本输出。其上下文窗口可以接受 128,000 个 token,接近 300 页文本。

  • Llama 2:Llama 2 开源模型在 2000 亿个 token 上进行了训练,并提供了其前代 Llama 1 的两倍上下文长度(约 4K 个 token)。这些模型在各种基准测试中表现出色,包括推理、编码、熟练度和知识测试,并包括在超过一百万个新的人类标注上训练的专用聊天模型。

  • Mistral:由前 Meta 和 Google AI 研究人员创立的 Mistral AI 开发,Mistral 是一个具有 73 亿参数的领先开源模型 LLM,能够生成连贯的文本并执行各种自然语言处理任务。它代表了相对于先前模型的重大进步,在各种基准测试中优于许多现有的 AI 模型。

  • PaLM-2:由 Google 开发,PaLM-2 代表路径语言模型,是下一代语言模型家族的一部分,该家族在大量数据上训练以进行下一词预测。它展示了改进的多语言、推理和编码能力,并在多语言文本上进行了广泛训练,覆盖超过 100 种语言。

  • Claude2:由 Anthropic 开发,Claude2 是其前代产品 Claude 的升级版。这个 LLM 旨在更安全、更强大,具有改进的性能和更长的响应能力。它能够处理高达 100K 个 token 的上下文窗口,使其能够处理大量文档。Claude-2 因其对 AI 安全的关注以及在对话 AI 领域的竞争潜力而备受瞩目。

  • Gemini 1.5:Google 最新的模型于 2024 年 2 月发布,具有更高效的架构和增强的性能。它有三种尺寸:Ultra、Pro 和 Nano,上下文窗口可以接受多达一百万个 token。

接下来,让我们探索图像生成模型。

图像

在计算机视觉不断发展的领域中,图像生成模型正在进步,关键领域如图像合成和分类已经相对成熟。新兴领域包括视觉问答,它通过解释图像来回答查询,以及图像分割,它将图像分解以进行详细分析。以下详细介绍了关键领域:

  • 图像合成:根据特定的输入或要求生成新图像或修改现有图像

  • 图像分类:将图像中的对象识别和分类到预定义的类别中,这对于人脸识别和自动照片标记等应用至关重要

  • 视觉问答(VQA):结合图像处理和自然语言理解来回答关于给定图像的问题

  • 图像分割:将图像分割成片段或部分,以便进行更简单、更有意义的分析

这些能力使图像生成模型成为无价之宝,并导致了创新应用的诞生。以下,我们提到了由于近期图像生成模型的发展,在各个行业中涌现的几个有趣的商业应用:

  • 从文本描述生成图像:图像生成模型可以接受文本描述作为输入并创建相应的图像。这在生成书籍、文章或产品列表的插图等应用中非常有价值。例如,一个热带海滩场景的文本描述可以转化为该场景的逼真图像,有助于视觉叙事和营销。

  • 故事板制作:娱乐公司正在利用图像生成模型来制作故事板。这些视觉辅助工具描绘叙事、概念或剧本,为故事动画或表演时的外观提供一瞥。

  • 时尚设计:图像生成模型正帮助时尚设计师通过生成各种服装设计、图案和色彩组合来创造新的服装设计。设计师可以输入参数或灵感,模型可以生成视觉概念来启发新的系列。

  • 室内设计:类似地,对于室内设计师来说,这些模型可以根据输入标准生成房间布局、家具排列和装饰理念,从而实现快速和富有创意的设计探索。

  • 自动照片编辑:图像生成模型可用于自动化和增强照片编辑过程。它们可以智能地调整色彩平衡、对比度和照明,移除不需要的对象或瑕疵,并应用于照片的艺术滤镜或风格。这可以显著减少手动照片编辑任务所需的时间和精力。

  • 创建数字艺术品:数字艺术家和插图画家可以使用图像生成模型激发他们的创造力。这些模型可以生成抽象或逼真的艺术作品,提供新的设计理念,或协助为各种项目创建概念艺术。艺术家可以使用生成的图像作为他们工作的起点。

  • 医生副驾驶:这属于多模态类别,其中 LLM 的多样化功能被应用于各种医学影像任务,包括医学视觉问答场景。本质上,这涉及到开发能够响应医生关于 X 光或 CT 扫描的查询以及帮助生成放射学报告的应用程序。

  • 面部识别:图像生成模型可以通过创建多样化的、高质量的训练数据集来增强面部识别,使算法能够在各种条件下学习并识别广泛的面部特征和表情。此外,它们还可以帮助在图像中重建部分或被遮挡的面部,提高识别系统的准确性和可靠性。

以下列出了截至 2023 年 12 月,在快速发展的领域中领先的图像生成模型:

  • DALL-E3:由 OpenAI 开发,DALL-E 3 是一个高级 AI 模型,能够根据文本描述生成详细和富有想象力的图像。

  • 谷歌的 Imagen:谷歌的 Imagen 是一个文本到图像的扩散 AI 模型,以其能够从文本提示中生成高度逼真的图像而闻名。

  • Stable Diffusion:Stable Diffusion 是由 Stability AI 创建的开源模型,是一个文本到图像模型,旨在根据用户提供的文本描述生成高质量的图像。

  • Midjourney v5.2:Midjourney v5.2 是由 Midjourney Inc.开发并于 2023 年 6 月推出的,代表了 Midjourney AI 图像生成模型的最新和最复杂版本。这个版本专注于提高生成图像的性能、一致性和质量。与前辈相比,它以更详细、更清晰的结果以及改进的颜色、对比度和构图而闻名。

  • Segment Anything ModelSAM):由 Facebook 的 Meta AI 开发的 Segment Anything Model(SAM)不是一个主要的图像生成模型;相反,它是一个图像分割模型。图像分割模型旨在识别和描绘图像中的特定部分或对象,本质上是根据图像中存在的对象将图像分割成不同的区域。我们在这里提到它,因为它属于计算机视觉领域的模型。

    以下图显示了使用 SAM 将纽约天际线分割成不同对象的过程:

图 1.7 – 图像分割示例

让我们继续讨论音频生成模型。

音频

音频生成模型是适用于各种应用的通用工具,正如我们在与客户开发解决方案的经验中展示的那样。以下是最受欢迎的任务:

  • 语音合成:从文本生成类似人类的语音(文本到语音),并用于语音助手、有声读物和各种辅助工具。

  • 说话人识别:在音频记录中识别和区分不同的说话人,这在安全系统和个性化用户体验中可能很有用。

  • 情感检测:从语音中识别情感,这可以增强客户服务互动或帮助进行心理健康评估。

  • 声音生成:使用 AI 创作音乐或音效,这在娱乐、游戏和虚拟现实领域有应用。

  • 声音克隆:生成与特定人物声音相似的人工合成声音,可用于个性化语音界面或娱乐

  • 语音识别:将口语语言转换为文本,这在创建转录、自动字幕和语音命令中是基本的

  • 语音翻译:实时将一种语言的口语翻译成另一种语言,促进跨语言交流

基于音频的 LLM 可以根据文本或其他输入生成各种形式的音频,如语音、音乐和音效。例如,以下我们提到一些基于音频生成模型的值得关注的新兴商业应用:

  • 聊天机器人音频和头像:基于头像的体验的最近进展导致组织创建具有逼真头像的共飞行员沉浸式音频体验

  • 音乐创作和生产:这些模型用于创作新的音乐作品,模拟各种音乐风格,并协助作曲家探索新的声音景观和旋律

  • 媒体制作中的音效和福雷:它们可以生成用于电影、视频游戏和其他多媒体项目的逼真或富有想象力的音效,为传统的福雷艺术提供了一种成本效益高的替代方案

  • 语言学习和发音训练:通过生成准确且多样化的语音样本,这些模型有助于语言学习应用,帮助用户提高发音和听力理解

  • 辅助应用:音频生成模型在开发为视障人士的工具中至关重要,将文本和视觉信息转换为音频,从而在各种数字平台上提高可访问性

这个领域正在发展,但在这个领域的发展程度还没有像文本和图像生成模型那样高。以下我们提到来自谷歌和 OpenAI 的几个有趣的音频生成模型:

github.com/openai/jukebox

最后,我们来看视频生成模型。

视频

视频生成模型是高级人工智能形式,旨在创建、操作和分析视频内容,可以执行各种任务。我们客户在这个领域的几个关键新兴任务如下:

  • 视频合成:从头开始创建或基于文本描述创建新的视频内容,这包括生成逼真的场景、动画或模拟

  • 深度伪造生成:创建高度逼真且令人信服的视频,其中一个人的形象被另一个人的形象所取代,常用于电影制作、教育或娱乐目的

  • 视频编辑和增强:自动编辑视频以提高其质量,例如增强分辨率、色彩校正和稳定抖动的画面

  • 视频摘要:将较长的视频压缩成较短的摘要,同时保留关键内容,这对于快速传达大量视频文件中的信息非常有用

  • 目标跟踪和识别:在视频序列中识别和跟踪物体或个人,这对于监控、体育分析和自动驾驶汽车至关重要

  • 场景理解:分析视频以理解上下文、场景或正在发生的事件,这可以应用于视频索引和搜索系统

  • 运动分析:研究视频中的物体或个人的运动,适用于体育训练、物理治疗和动画

  • 面部表情和手势分析:解释面部表情和肢体语言以衡量情绪、反应或意图,这在客户服务或行为研究中非常有用

  • 视频转文字转录:将视频的视觉和听觉成分转换为文本描述,有助于内容的可访问性和可搜索性

  • 交互式视频创作:生成交互式视频,其中观众可以影响故事情节或结果,增强游戏、教育和营销中的用户参与度

文本到视频模型是一种基于文本描述生成视频内容的 AI 技术。尽管在最近的文本到视频T2V)生成技术方面取得了相当大的进步,但这些发展主要集中在创建描绘单一事件且背景单一的短视频片段上,本质上局限于单场景视频。随着视频生成模型的演变,一些令人兴奋的新应用开始出现,为该领域提供了创新的可能性:

  • 视频档案问答:在媒体和娱乐行业,一个正在兴起的主要用例涉及使用 CLIP 等模型嵌入视频数据,然后在上面创建增强的搜索体验

  • 电影和动画:这些模型可以帮助快速原型设计和创建短片动画,简化电影和动画制作过程

  • 广告和营销:企业可以利用视频生成模型为营销活动和广告创建吸引人的内容,这些内容针对特定受众

  • 教育和培训:它们可以通过制作展示复杂概念或模拟真实场景的定制视频来增强教育内容,从而实现更有效的学习和培训

  • 游戏和虚拟现实:在游戏中,这些模型可以用来生成动态环境和角色,丰富游戏体验,并减少开发时间

  • 研究和开发:视频生成模型在可视化科学理论、模拟实验或以交互式格式展示研究结果方面非常有价值

这个领域正在不断发展,视频领域的进步并没有像文本和图像生成模型那样显著。在这里,我们提到了两个在视频领域具有潜力的模型:

huggingface.co/stabilityai/stable-video-diffusion-img2vid-xt

注意

OpenAI 在 2024 年初宣布了 SORA,这是其首个文本到视频生成模型。尽管它尚未向公众发布,因为它正在进行全面的红队测试,但根据 OpenAI 分享的样本,我们认为这一创新是多模态 LLM 的重大飞跃。它允许您将文本提示转换为高质量的一分钟视频。

下面是 SORA 带来的优势:

  • 复杂场景生成:SORA 在创建包含多个角色、各种动作和精确主题和背景细节的详细场景方面表现出色。该模型不仅理解用户在提示中要求的内容,还理解这些事物在物理世界中的存在方式。

  • 高级语言理解:凭借其对语言的深刻理解,SORA 可以通过展示各种情绪的角色使提示栩栩如生。此外,它可以在视频中制作多个镜头,保持角色和视觉风格的一致性。

huggingface.co/models

云计算用于可扩展性、成本优化和安全

云计算在将 LLM 带给更广泛的受众方面发挥了关键作用。LLM 使用大规模 GPU 处理来学习和生成类似人类的文本、图像、音频和视频,并以越来越互动和智能的方式参与其中。

本节突出了在云环境中利用 LLM 的几个优势:

learn.microsoft.com/en-us/azure/virtual-machines/sizes-gpu

虽然在个人笔记本电脑上部署某些开源模型或在组织内建立专用基础设施是可能的,但这种方法通常会产生大量的前期成本,包括对人才获取的重大投资和持续的管理开销。此外,维护此类基础设施的安全性可能无法与云服务提供商提供的先进水平相匹配。因此,云服务成为更优的解决方案,提供了一系列灵活、安全、可扩展且负责任的选项,用于部署生成式 AI 解决方案。在下一节中,我们将深入探讨将创新想法转化为现实的过程,检查将其部署到云上涉及的各个阶段,并回顾我们在将生成式 AI 部署到各个组织初期阶段作为云解决方案架构师的经验。

从愿景到价值——导航生产之旅

将一个想法开发并投入生产是一个多阶段的过程,通常涉及构思、验证、开发、测试和部署。将一个想法开发并投入生产的多阶段过程至关重要,因为它系统地将一个概念转化为可行的产品。

看看以下关于忽视关键方面的图片:

图 1.8 – 两位企业家就忽视开支进行幽默讨论

上述图像讽刺性地展示了某些组织声称从头开始构建 AI,而实际上他们只是利用了像 OpenAI 这样的服务的 API 调用。当被问及 Open AI 账单时,它幽默地揭露了这种夸张,嘲讽了从头开始的概念。

每个阶段都有其独特的作用:创意促进创新,验证确保市场需求和可行性,开发将验证的想法转化为有形产品,测试保证功能性和用户满意度,部署将产品引入市场。这种结构化方法降低了风险,优化了资源的使用,保证了产品质量,并确保了市场适应性。这是一个战略途径,允许进行明智的决策,有效地分配资本,并最大限度地提高商业成功的可能性。以下是一个结构化方法:

图 1.9 – 从创意到部署的阶段

让我们更详细地看看每个阶段。

创意涉及以下步骤:

  • 无限制地生成和头脑风暴想法,以鼓励创造力

  • 根据可行性、市场潜力和与业务目标的一致性等因素优先考虑想法

黑客马拉松活动:促进生成式 AI 的创新

在我们作为生成式 AI 领域的早期云架构师角色中,我们见证了各种组织之间黑客马拉松活动的激增。这些活动对于创意阶段至关重要,鼓励了快速的问题解决、创新思维和不受通常工作场所限制的自由思想交流。参与者接触到了新的观点和技能,而活动结构促进了快速的开发和想法验证。协作、专注的努力和支持性的社区使黑客马拉松成为创意解决方案和新概念的理想孵化地。

市场研究和验证涉及以下步骤:

  • 进行彻底的市场研究,以了解需求和竞争

  • 通过客户访谈、调查或焦点小组来验证想法

概念验证(PoC)涉及以下步骤:

  • 创建一个 PoC 来展示想法的可行性

  • 使用 PoC 收集初步反馈并迭代设计

  • 确定 PoC 的成功标准

初始 PoC:利用 ChatGPT 进行内部合作飞行员

从我们的经验中汲取,最初的 PoC 通常涉及面向内部使用的合作飞行员,利用 Azure 上的“ChatGPT 在你的数据上”功能,专注于组织数据。这些项目被视为低垂的果实,提供了快速的成功和宝贵的经验教训。

商业案例和规划涉及以下步骤:

  • 通过概述价值主张、市场进入策略和财务预测来构建商业案例

  • 规划项目,包括时间表、预算、资源和风险评估

  • 确定投资回报率

生成式 AI 工作负载的回报率(ROI)

评估生成式 AI 工作负载的回报率(ROI)是一个重大挑战,这不仅涉及端到端解决方案成本的计算,还包括通过自动化和消除手动任务来量化回报。此外,将解决方案作为白标产品提供给其他公司可以显著提高回报率。这种方法开辟了新的收入来源,为客户提供了成本效益,实现了可扩展性,间接提升了品牌知名度,并为产品改进提供了丰富的反馈循环。通过利用白标,企业可以最大化其生成式 AI 解决方案的价值和影响力,使其成为在竞争激烈的市场中增加整体投资回报率的一项战略举措。在第七章中,我们讨论了几种公司可以利用的成本优化策略,以降低其生成式 AI 工作负载的整体成本。

原型/最小可行产品(MVP)开发中涉及以下步骤:

  • 开发一个比原型更接近产品的原型

  • 根据反馈和技术可行性对原型进行迭代

  • 开发具有最小必要功能的最小可行产品(MVP)以满足早期采用者

  • MVP 旨在验证产品与市场的匹配度并收集用户反馈

测试和质量保证中涉及以下步骤:

  • 执行各种类型的测试(单元、集成、系统、用户验收)

  • 确保产品符合质量标准且无严重错误

预生产和预发布中涉及以下步骤:

  • 在一个与生产环境非常相似的预发布环境中部署应用程序

  • 进行进一步的测试,包括负载和性能测试

部署策略中涉及以下步骤:

  • 生成式人工智能云端解决方案(一)制定部署策略,例如蓝绿部署和金丝雀发布,以最小化风险

  • 在出现故障的情况下计划回滚程序

发布中涉及以下步骤:

  • 将产品发布到目标用户群体

  • 密切关注产品,以发现任何问题或意外行为

持续监控和反馈循环中涉及以下步骤:

  • 通过 LLMOps 建立持续监控、错误记录和性能跟踪的机制

  • 为用户提供反馈渠道,以便报告问题或提出改进建议

小贴士

大型语言模型操作LLMOps)专注于在生产环境中部署、管理和扩展 LLMs,以确保它们能够无缝集成到应用程序中,以实现最佳性能、安全性和成本效益。这包括持续集成和部署以实现自动化更新、持续监控性能和成本效率、版本控制以实现无中断的更新、合规性的安全措施以及自动扩展以应对需求变化。LLMOps 对于在生产环境中使用 LLMs 的组织至关重要,它简化了运营挑战,以促进创新。关于 LLMOps 的更多内容将在第六章中讨论。

迭代改进涉及以下步骤:

  • 使用数据和用户反馈对产品进行迭代改进

  • 规划定期更新和功能发布

可扩展性涉及以下步骤:

  • 确保架构可扩展以处理用户或数据的增长

  • 定期审查基础设施并在必要时进行优化

我们建议

这种方法对于保证卓越的用户体验至关重要,确保解决方案的高可用性并纳入灾难恢复措施。我们将在第七章中详细讨论这些概念。

维护和支持涉及以下步骤:

  • 为用户提供持续维护和支持

  • 保持产品与最新的安全补丁和合规标准保持同步

在整个过程中,保持敏捷并准备好根据新的见解和反馈进行转变或做出改变至关重要。定期与所有利益相关者沟通,并确保对开发想法并将其投入生产相关的愿景、进展和挑战有清晰的理解。

摘要

本章的目的是突出介绍生成式 AI 在云上构建端到端解决方案所需的历史、核心概念和其他必要信息。我们探讨了从简单的基于规则的聊天机器人系统到多模态、上下文感知和以代理为导向的 LLMs 的演变。我们深入研究了生成式 AI 的兴起,重点关注 LLMs 和基础模型以及它们之间的关系和关键属性。我们考察了开源和闭源模型之间的差异,以及从我们的经验中提炼出的趋势商业应用。在人工智能快速发展的领域中,我们考察了几种领先模型,包括文本、图像、音频和视频生成。这些模型代表了人工智能技术的最前沿,展示了在创建高质量、逼真内容方面的非凡能力。然后我们强调了云计算如何促进安全、可扩展、成本效益和道德的生成式 AI 应用的发展。我们还概述了一个将想法转化为生产就绪解决方案的框架。在下一章中,我们将深入探讨 LLMs 的自然语言处理能力及其 Transformer 架构,这是这些模型运行的基础。

参考文献

第二章:NLP 演变和 Transformer:探索 NLPs 和 LLMs

在前面的介绍性章节中,您对生成式 AI 有了基本了解,包括对生成式 AI 应用日益增长的复杂性的入门介绍,以及关于云计算的可扩展性和成本效益的简要介绍,以及数据存储、安全和协作的关键组件。您还了解到了生成式 AI 的一个更令人兴奋的方面,它也可能是一个障碍,那就是如何跟上像 GenAI 这样的尖端 AI 技术的最新发展。

在本章中,我们将探讨 ChatGPT 的能力,特别是关于其对话输入和响应能力。我们将深入探讨 LLMs 如何理解和响应用户查询,以及如何学习和适应新信息。提供的信息将有助于那些希望了解更多关于 AI 助手(如 ChatGPT)如何工作以及如何利用它们帮助人们更高效、更有效地找到信息的人;随后,我们将在此基础上扩展到第第五章中讨论的 NLP 和提示工程主题。在本章结束时,我们希望您通过探索各种基于文本的任务的能力,包括提示和响应、对话流程和集成,对 NLP 和生成式 AI 技术的进展有更深入的理解。

本章我们将涵盖以下主要内容:

  • NLP 演变和 Transformer 的兴起

  • 对话提示和完成 – 内部机制

  • LLMs 的景观、进展和扩展

图 2.1 – Transformer 变得多么深刻

NLP 演变和 Transformer 的兴起

NLP,或自然语言处理,是人工智能领域的一个分支,它使计算机能够使用常见的口语(或其他)语言来理解和操作人类语言,而不是像过去传统上给计算机作为输入的那样:计算机编程语言。在过去的几十年里,这些计算机编程语言变得更加“自然”,更加流畅:

图 2.2 – NLP 演变的简要时间线

随着时间的推移,在自然语言处理(NLP)领域取得了显著的进步,由于神经网络的出现,计算机在文本生成方面的能力不断提高。文本生成本身并不是一个新颖的想法,但 2017 年之前的早期语言模型主要利用了被称为循环神经网络RNNs)和卷积神经网络CNNs)的机器学习架构。

RNN 是一种擅长处理序列数据的神经网络架构。它们以顺序方式处理输入,将信息从一个序列步骤传递到下一个步骤。这使得它们在文本生成、翻译和情感分析等任务中非常有用。

CNN 是一种深度学习架构,它通过使用称为卷积层的专用层来处理和分析视觉数据,例如图像和视频。这些层应用过滤器从输入数据中提取相关特征,捕捉信息的模式和层次结构。CNN 主要用于计算机视觉中的图像分类、目标检测和图像分割等任务。在自然语言处理NLP)中,CNN 也可以应用于文本分类和情感分析等任务,其中输入文本被转换为类似矩阵的结构,以捕捉词语或字符之间的局部模式和关系。

RNN 和 CNN 的主要缺点

尽管 RNN 很复杂,但由于某些限制,它们的潜力无法完全发挥。RNN 在训练过程中经常遇到“梯度消失问题”,这阻碍了它们从长序列中学习和保留长期依赖关系的能力。

此外,RNN 固有的“顺序处理”不允许进行有效的并行化,这在深度学习模型中基于 GPU 的并行处理成为标准的时代,显著减慢了训练速度。

因此,RNN 在计算和内存方面有限。为了预测句子中的下一个词,模型需要知道不仅仅是前面的几个词;它们还需要理解句子、段落或整个文档中该词的上下文。

让我们通过使用以下句子来解释这个概念

海洋中的水含有大量的盐,有点波涛汹涌,而且 尝起来 很甜*。””

在前面的句子中,RNN 可能会生成一个延续,表明水是甜的而不是咸的。原因是它只考虑了最后几个词,而没有考虑整个句子的上下文。RNN 会忘记文本中较早的部分,这些部分可能表明来自海洋的水的味道。

同样,卷积神经网络通过自动通过卷积层学习层次特征,已经彻底改变了图像分析。尽管它们取得了成功,但 CNNs 在固定感受野大小和局部上下文中操作的限制,使得它们难以捕捉全局依赖关系和不同长度序列中存在的关联。例如,在图像分类中,虽然 CNNs 在识别局部模式方面表现出色,但它们难以把握图像的整体上下文,这阻碍了它们理解物体或区域之间复杂关系的能力。考虑一张猫追逐老鼠,狗在背景中观看的图片。CNN 可能会根据它们的局部特征有效地识别猫、老鼠和狗。然而,理解复杂的关联,例如猫在追逐老鼠,狗是一个被动的观察者,可能对 CNN 来说是一个挑战。

那么,我们是如何最终克服卷积神经网络(CNNs)的挑战的呢?这是通过使用一个被称为变换器模型架构及其“自注意力机制”的概念来实现的,这些内容将在下一节中描述。这不仅能够识别单个动物,还能捕捉到上下文交互,例如追逐序列和狗的被动姿态。

然而,在我们真正揭开变换器工作原理的层之前,以下是一个关于 NLP 结合 LLMs 优势的参考时间线。一旦你意识到好处和“为什么”,我们就可以深入探讨“如何”。

NLP 和 LLMs 中生成式 AI 的优势

本节在下一节解释更多关于变换器的内容之前,提供了一个关于 NLP 与 LLMs 中生成式 AI 优势的概述:变换器是 LLMs 背后的强大引擎。

大型语言模型LLMs)是极其强大的语言模型,正在改变我们对人类语言的理解和创造。但它们与自然语言处理(NLP)有什么联系呢?这是非常基础的。NLP 为解释和生成人类语言的结构和目标制定了框架,而 LLMs 则作为复杂的工具,在广泛规模上实现这些目标,以惊人的精确度处理复杂任务。

如前所述,自然语言处理(NLP)是机器学习的一个分支,它使计算机能够理解、处理和生成人类语言。它结合了计算机科学和语言学。例如,来自各种通信渠道的组织产生了大量的音频和文本数据。这些数据可以通过 NLP 模型进行处理,以自动处理数据、确定情感、总结,甚至找到关键主题或有效回应。

作为快速简单的例子,呼叫中心产生的音频数据可以被转换成文本,并通过 NLP 模型进行处理,以确定客户面临的问题以及客户的情感(无论是高兴、沮丧、冷漠等等)。

重要提示

自然语言处理(NLP)是搜索引擎(如 Bing 和 Google)、语音助手(如 Alexa 和 Siri)以及强大的对话代理(如 ChatGPT)背后的技术。

从这个角度来看,似乎自然语言处理技术应该满足我们的所有需求。那么,为什么我们还要处理 LLMs 和生成式 AI 呢?

通过简要回顾先前的演变时间线,我们可以将高级 NLP的诞生追溯到 2013 年,当时 Google 推出了 word2vec 模型,该模型基于上下文关系将单词转换成密集向量。向量被定义为具有大小和方向的物体,并以数值数组格式表示。

这是一项革命性的进步,因为它捕捉到了旧模型无法理解的语义细微差别。然而,它们无法专注于文本的不同部分以形成更全面的理解。例如,句子中的各种单词或多个句子不能相互关联,以全面理解句子或段落。这种局限性通过 2017 年论文《Attention Is All You Need》中引入的注意力机制得到了解决。这些机制导致了 Transformer 架构的出现,这是今天我们看到的基础 LLM 模型的骨干,它使模型能够形成对文本的理解,而不仅仅是单词和句子。关于这一点,我们稍后会详细讨论,但首先,让我们来看看为什么我们要使用 LLMs,以及 LLMs 可以增强 NLP 的哪些领域。

NLP 加上 LLMs 等于扩展的可能性:

  • 理解语言:LLMs 擅长理解和处理各种语言输入,使它们在多种语言任务中非常有用。LLMs 可用于构建高级聊天机器人和虚拟助手。它们可以理解并回应客户咨询,提供信息并执行任务,提高客户服务的效率和品质。

  • 文本生成:LLMs 可以生成连贯且上下文适当的文本,使聊天机器人、内容创作、文案撰写等应用成为可能。

  • 大型语言模型(LLMs)可以通过推荐和建议单词或审查你的内容来提高内部和外部沟通的效率。

  • 语言翻译:LLMs 可以直接在不同语言之间翻译文本,促进跨文化交流和语言学习。

  • 由于 LLMs 可以提供多种语言之间的翻译,这可以帮助企业在全球化世界中更有效地运营,打破语言障碍。

  • 情感分析:LLMs 可以分析文本以确定其情感(正面、负面或中性),为如客户反馈分析等应用提供有价值的见解。LLMs 可以分析客户反馈、评论或社交媒体帖子,以评估公众对一个品牌、产品或服务的看法。这有助于商业策略和决策过程。

  • 问答:LLMs 可以理解和提供对广泛问题的准确答案,这使得构建特定组织的搜索引擎成为可能。

  • 文本摘要:LLMs 可以将长篇文本压缩成更短的摘要,有助于信息处理和理解。LLMs 可以总结长文档、文章或报告,使得快速消化大量信息并识别关键区域或下一步行动变得更加容易。

  • 适应性:LLMs 可以以各种风格、语气或格式生成文本,适应特定的用户需求或应用要求。例如,你可以要求 ChatGPT 以海盗风格为你的 6 岁孩子定义并描述植物的光合作用。与此相关的是,通过使用关于用户行为和偏好的数据,LLMs 可以生成个性化的内容或产品推荐,从而改善用户体验并可能增加零售企业的销售额。

  • 上下文维护:尽管它们只有短期记忆,但通过适当的提示工程技巧,LLMs 可以在扩展交互中维持对话上下文,提高其回答的连贯性和相关性。我们将在本书的第五章中介绍提示工程技巧。

  • 创造力:大型语言模型(LLMs)可以生成新颖的文本,为故事生成或诗歌创作等创意应用提供了更多可能性。从撰写文章、报告和营销文案到生成创意内容,LLMs 可以自动化并增强各种内容创作任务。

在这里,我们列出了一些大型语言模型增强自然语言处理功能性的领域。既然你已经认识到 LLMs 可以为任何 NLP 服务以及我们的日常生活提供增强,那么让我们继续下一步:深入探讨 Transformer 和注意力机制,这是 LLMs 运行生成式 AI 能力的来源。

变压器是如何工作的?

Transformer 架构的引入解决了 RNN 和 CNN 的先前不足。Transformers 使用注意力机制,这使得模型在生成输出中的每个单词时能够关注输入的不同部分。简单来说,注意力机制衡量句子、段落或部分中单词之间的关系。对于 LLMs,底层的 Transformer 是一组包含编码器组件和解码器组件的深度学习神经网络,这些组件存在于自注意力能力的概念中。在自注意力过程中,LLM 会根据当前正在处理的单词的相关性为不同的单词分配权重,这就是模型获得其力量的原因。这种注意力机制动态地使 LLMs 能够关注关键上下文信息,同时忽略不相关的项目/单词。换句话说,编码器和解码器组件从一系列文本中提取意义,并理解其中单词和短语之间的关系。

这使得 Transformer 相比于 RNN 和 CNN,能够更好地保持长期 上下文 的感觉。位置编码允许处理序列顺序,而 Transformer 允许序列的 并行处理,这使得 LLMs 的训练速度比 RNNs 快得多。支撑 ChatGPT 的基础模型,即 GPT 模型,采用了这种 Transformer 架构。

arxiv.org/abs/1706.03762

图 2.3 – Transformer 模型架构

尽管前面的图像可能对一些人来说令人畏惧,尤其是对生成 AI 领域的新手来说,您并不一定需要像大多数人不需要了解汽车引擎的内部工作原理一样,对 Transformer 模型架构的每个子组件有深入的了解。我们只会涵盖 Transformer 架构的主要输入和输出,在本章的后面有一个简化的视图来描述一些内部工作原理和流程。我们将继续强调和重复 Transformer 模型的各个方面,因为这可能是一个难以理解的概念,尤其是对于初学者和 LLMs。

从 2017 年语言翻译的原始目的出发,Transformer 模型架构成为了未来生成式 AI 模型的底层框架,导致了 ChatGPT 的出现;GPT 中的字母 T 代表 Transformer(GPT)。

转换器的优势

如前所述,转换器是一种神经网络架构,它用完全基于注意力的机制取代了传统的 RNN 和 CNN。

但注意力机制是如何工作的呢?

注意力机制通过计算上下文窗口中每个词的“软”权重来实现这一点,在转换器模型中是并行进行的,而在 RNN/CNN 模型中是顺序进行的。这些“软”权重在模型运行时可以,并且经常发生变化。

转换器的优势如下:

  • 它们可以高效地扩展以使用多核 GPU 和并行处理训练数据;因此,它们可以利用大得多的数据集。

  • 它关注输入的意义。

  • 它们学习每个词在句子/段落中的相关性和上下文,而不仅仅是像 RNN 和 CNN 那样学习邻近的词。

让我们看看从转换器的角度,句子“The musician taught the student with the piano”中的词是如何相互关联的视觉表示:

图 2.4 – 句子上下文关系

如前例所述,转换器能够连接每个词,确定输入中每个词之间的关系(即使它们是紧邻的词),并理解句子中词的上下文。在前面的图像中,彩色线条代表更强的关系。

因此,转换器使用现代数学技术,如注意力和自注意力,来确定数据元素之间的相互关系和依赖性,即使它们相隔很远。这使得模型能够学习谁教了学生以及用什么乐器等。

转换器深度学习架构中有多个层,如嵌入层、自注意力和多头注意力,以及多个编码器模型本身。虽然对转换器架构的深入了解对于成功的提示工程或理解生成式 AI 不是必需的,但了解转换器模型,这是 LLMs 和 ChatGPT 底层架构的关键方面,对于任何云解决方案设计都是重要的。

既然我们已经讨论了优势,让我们也提一下转换器的一个负面方面;它们有时会产生副产品,这也会影响 LLMs,我们在第一章中简要提到了这一点,但在这里再次提及,因为我们正在讨论转换器,那就是“幻觉”的概念。幻觉基本上是 LLM 模型返回的错误信息。这种幻觉是响应输出,与提示不一致,通常是由于几个原因,例如用于训练 LLM 模型的实际训练数据本身不完整或不准确。我们想在这里提一下,但将在后面的章节中讨论幻觉。

现在,让我们深入探讨 transformer 架构的内部工作原理,并通过一些示例更深入地探索 transformer 概念。

对话提示和完成 - 内部机制

提示,或者你或应用程序/服务输入的内容,在 NLP + LLMs 中起着至关重要的作用,因为它促进了人类与语言模型之间的交互。

如果你曾经有过与 GenAI 相关的经验,你可能已经在一个在线服务中输入过提示,例如 chat.bing.com。提示对于 LLM 来说,就像搜索词对于搜索引擎一样,但每个都可以接受提示输入并针对该输入执行一些操作。就像你会在搜索引擎中智能地输入搜索词来找到你想要的内容一样,同样,智能地输入提示也是一样的。这个概念被称为提示工程,我们将在本书后面的章节中专门讨论提示工程,其中将描述如何编写一个有效的提示以获得所需的结果。

对于那些刚接触生成式 AI 领域的人来说,可能会 wonder 为什么我们需要了解如何编写提示。让我们提供一个简单的类比:如果你想到一个数据库管理员(DBA),他需要从包含许多表(例如,典型的客户销售数据库)的大量数据库中提取(查询)特定数据,以便了解销售趋势和预测,确保有足够的产品,你必须分析历史数据。然而,如果 DBA 无法构建一个合适的查询来构建过去销售历史的报告,任何预测和未来趋势都将完全错误。

同样,一个构建不良的提示就像使用一把钝刀,你不太可能得到好的结果。因此,提示工程对于生成有用的响应至关重要。

现在,让我们更详细地看看 transformer 的输入。

提示和完成流程简化

www.wired.com/story/openai-ceo-sam-altman-the-age-of-giant-ai-models-is-already-over/

这样的模型对其训练语言获得了统计上的理解。然而,它们对于特定的实际任务并不是特别有用。为了克服这一点,预训练模型经过了一个称为迁移学习的过程。在这一阶段,模型以监督的方式进行微调,这意味着它使用针对特定任务的标注数据。我们将在下一章更详细地介绍微调,但就目前而言,让我们看看简单任务的整体流程。这样的任务之一可能是阅读前 n 个单词后预测句子中的下一个单词。这被称为因果语言模型,因为输出依赖于过去和现在的输入,但不依赖于未来的输入。

让我们通过使用金融新闻文章作为输入,并使用摘要 LLM 模型总结文档,来看看这个简化的输入/输出流程,映射到变压器模型架构:

图 2.5 – 典型 LLM 中提示/补全工作简化的视觉表示

在前面的简化变压器架构中,交互是描述在白色框中的输入/输出。较大的灰色框是用户交互之外进行的全部处理。前面图像中提示和补全序列中的某些阶段包括以下内容:

  • 输入提示:用户通过提供输入与系统交互。这种输入可以存在于各种形式,如文本、语音或其他模式。在我们的例子中,金融新闻文章是输入。

  • 额外的提示工程:在总结新闻文章的情况下,通常我们不需要额外的提示工程。尽管我们将在后面的章节中专门介绍提示工程,但了解不同的提示会产生不同的结果/补全,提示本身也是一种技能就足够了。

  • 输入文本:这是将最终输入以人类可读的形式接收并传递给计算机处理(分词器)的区域。例如,这可能包括原始用户输入和任何额外的输入,如数据集。在我们的例子中,我们使用了一篇金融新闻文章来总结;然而,这完全可以包括许多额外的数据点,例如金融平台的歷史数据集,如美国股市。

  • 分词器:在这一层,新闻文章会被转换成标记并编码成向量化的服务(更多内容请参考第四章,RAGs to Riches)。

  • 编码输入:编码器将每个标记化部分作为输入,并处理和准备 LLM 摘要模型的编码。

  • 总结模型(一个 LLM):这是最辛苦的一层,其中包含了 LLM 模型的深度学习神经网络。LLM 将为每个词添加关系权重,以生成相关上下文,在我们的金融新闻文章示例中,它将文章总结为简短、相关、上下文的概念。

  • 编码输出和解码器(编码器):解码器从编码器及其内部状态接收处理过的信息,以形成响应。这种响应可以表现为文本、音频,甚至用于下游使用的动作。在我们的例子中,输出是一个编码的文本摘要,它仍然以数值格式存在。

  • 输出/完成:这是返回给您的信息,也称为输出。在我们的长金融新闻文章示例中,您现在拥有一个总结的、简短的文章。

如您在我们前面的简单示例中所见,将较长的文章(或任何其他文本输入)作为输入,会生成一个总结文章,其中所有显著点都以简短且易于消化的格式突出显示。这适用于许多相关商业和个人场景,我相信您能想到如何将其应用到您的日常任务中。这一切都归功于变换器架构!

除了前面的说明,如本节开头所述,提示也可以包括来自其他服务或 LLM 查询的输出,而不是直接的用户输入。换句话说,而不是人类与 LLM 模型互动并提问或给出提示,输入到 LLM 模型中的实际上是另一个完成的输出。这允许将一个模型的输出链接到另一个模型的输入,从而允许创建复杂和动态的交互、任务或应用。

LLMs 的领域、进展和扩展

我们可以写很多章节来讲述现代 LLM 如何利用变换器模型架构,以及其爆炸性的扩展和几乎每天都有新模型被创建的情况。然而,在本节的最后部分,让我们提炼 LLM 的使用及其迄今为止的进展,并使用 AutoGen 添加一个令人兴奋的新层,以扩展 LLM 的功能。

探索变换器架构的领域

由于它们能够处理众多任务,变换器模型已经彻底改变了自然语言处理领域。通过调整其架构,我们可以创建不同类型的变换器模型,每种模型都有其独特的应用。让我们深入了解三种流行的类型:

  • 仅具有编码器的模型:这些模型仅配备编码器,通常用于涉及理解输入上下文的任务,例如文本分类、情感分析和问答。一个典型的例子是谷歌的双向编码器表示(BERT)。BERT 因其能够理解双向上下文(从左到右和从右到左)的能力而脱颖而出,这得益于其在大量文本语料库上的预训练。这种双向上下文理解使 BERT 成为情感分析和命名实体识别等任务的流行选择。

  • 仅具有解码器的模型:这些模型仅使用解码器,主要用于涉及生成文本的任务,如文本生成、机器翻译和摘要。GPT(生成式预训练变压器)是这类模型的典型例子。GPT 因其通过单向解码器实现的自回归语言建模的创造性文本生成能力而备受赞誉。这使得 GPT 特别擅长故事生成和对话补全等任务。

  • 同时具有编码器和解码器的模型:这些模型结合了编码器和解码器,适合需要理解输入并生成输出的任务。这包括机器翻译和对话生成等任务。T5(文本到文本迁移变压器)是这一类别的代表。T5 提供了一个统一的框架,其中每个 NLP 任务都被视为一个文本到文本问题,同时使用编码器和解码器。这使得 T5 具有非凡的通用性,能够处理从摘要到翻译的广泛任务。

通过理解这些不同类型的变压器模型,我们可以更好地欣赏变压器架构在处理各种 NLP 任务时的灵活性和强大功能,这有助于我们选择最适合云解决方案用例的模型。

AutoGen

在撰写本文时,微软研究院正在对下一个重大突破进行重要研究:自主代理,或称为 AutoGen。AutoGen 的目标是将大型语言模型(LLMs)和变压器模型架构的演变提升到新的水平。微软 AutoGen 框架是一个开源平台,用于构建使用大型语言模型的多元代理系统;我们相信这将显著影响生成式人工智能领域。

因此,在第六章的后续部分,我们将描述由大型语言模型驱动的自主代理的概念和潜力,以及它们如何增强人类能力并解决复杂问题。我们还将展示使用 AutoGen 的 LLM 模型如何通过各种提示工程技术执行推理、规划、感知、自我改进、自我评估、记忆、个性化以及通信等任务。

如您可能已经得出的结论,一旦我们了解多个大型语言模型+AutoGen 如何以不同的方式协同工作,例如在层次结构、网络或群体中,以增加计算和推理能力并解决更复杂的问题,包括可能今天甚至不存在的问题,那么可能性将是无限的!

摘要

在本章中,我们介绍了生成式 AI 及其应用,如 ChatGPT,并概述了涉及的主要概念和组件,如云计算、NLP 和 Transformer 模型。自 2017 年引入以来,原始的 Transformer 模型已经扩展,导致模型和技术的爆炸性增长,这些模型和技术的应用范围已远远超出仅限于 NLP 类型的任务。

我们还简要回顾了 NLP 从 RNNs 和 CNNs 到 Transformer 模型的发展历程,并解释了 Transformer 如何通过使用注意力机制和并行处理来克服前者的局限性。我们涵盖了提示或用户输入如何被 Transformer 模型处理以生成响应或完成,使用各种变量和场景。

最后,我们简要概述了 LLM 领域的概览以及各种 Transformer 架构如何用于各种任务和不同的用例,包括它们的进展,以及它们如何扩展到 LLM 模型本身之外的不同领域,例如 AutoGen,我们将在第六章中深入探讨。

在下一章中,我们将讨论通过使用微调的概念来构建特定领域的 LLMs;然后,我们将讨论 LLM 模型管理中的下一个逻辑步骤,以及您在生成式 AI 工具箱中需要的重要工具!

参考文献

第二部分:调整 LLMs 的技术

本节突出了近年来出现的关键技术,这些技术用于针对特定商业需求定制大型语言模型LLMs),例如微调。它还讨论了当前挑战,包括减轻幻觉和延长训练截止日期,通过如检索增强生成RAG)等方法来整合最新信息。此外,我们将探讨提示工程技术,以增强与人工智能的有效沟通。

本部分包含以下章节:

  • 第三章, 微调:构建特定领域 LLM 应用

  • 第四章, RAGs to Riches:利用外部数据提升人工智能

  • 第五章, 有效提示工程策略:通过人工智能开启智慧

第三章:微调 - 构建特定领域的大型语言模型(LLM)应用

在开发基于 ChatGPT 的应用时,确保模型的精确性、相关性和与其预期目的的对齐至关重要。随着我们深入探索这项技术的复杂性,很明显,一刀切的方法是不够的。因此,定制模型以适应某些特定领域(如医学、生物技术、法律等)变得必要。本章深入探讨了通过微调和参数高效微调PEFT)进行特定应用模型定制。但如何评估我们的改进真正击中目标?我们如何知道它们与人类价值观相一致?通过严格的评估指标和基准测试。通过理解和应用这些关键过程,我们不仅使 ChatGPT 发挥最佳效果,而且紧密遵循本书的愿景:面向云解决方案的生成式 AI。我们必须确保它不仅聪明,而且具有情境意识、有效、诚实、安全,并且与用户的需求产生共鸣。大型语言模型LLMs)中的幻觉是指生成事实错误或无意义的信息,仿佛它是真实的。为了减少如幻觉等问题,这些问题可能对社会产生有害影响,本书将讨论三种重要的技术:微调、检索增强生成RAG)和提示工程。虽然本章重点讨论微调,但将在后续章节中讨论 RAG 和提示工程。

本章将涵盖以下主要主题:

  • 什么是微调以及为什么它很重要?

  • 微调模型的技巧

  • 基于人类反馈的强化学习RLHF) – 使模型与人类价值观对齐

  • 如何评估微调模型的表现

  • 微调成功的生活实例 – InstructGPT

图 3.1 – 未针对社交互动微调的 AI

什么是微调以及为什么它很重要?

一般性 LLM(如 GPT-3)固有的问题包括其倾向于产生错误、有毒内容或负面情绪的输出。这归因于 LLM 的训练,其重点在于从庞大的互联网文本中预测后续单词,而不是安全地完成用户的语言任务。本质上,这些模型缺乏与用户目标的对齐。

让我们看看 2023 年上半年我发现的三个案例,这些案例展示了 ChatGPT 的幻觉问题。

www.firstpost.com/world/chatgpt-makes-up-a-sexual-harassment-scandal-names-real-professor-as-accused-12418552.html
www.forbes.com/sites/mollybohannon/2023/06/08/lawyer-used-chatgpt-in-court-and-cited-fake-cases-a-judge-is-considering-sanctions/?sh=2f13a6c77c7f
www.nytimes.com/2023/05/01/business/ai-chatbots-hallucination.html

注意

上述的幻觉问题发生在 2023 年上半年度。从那时起,OpenAI 已经采取了严格的措施和幻觉缓解系统。

为了遏制幻觉,除了提示工程和 RAG 技术之外,微调是潜在选项之一,这两者我们将在后续章节中讨论。如前所述,微调针对特定任务或领域定制 LLM。在 LLM 中,权重指的是神经网络参数,这些参数在模型训练过程中学习,并用于根据输入数据计算输出,从而使模型能够做出预测和生成文本。本质上,微调通过使用特定于任务的特定数据来细化这些参数,从而改进预训练模型。

现在,让我们考虑微调的好处:

  • 减少幻觉:在可信数据上进行的微调减少了模型生成错误或虚构输出的倾向。

  • 更好的任务性能:由于模型是根据您的特定要求定制的,因此它可以产生更好的响应,这些响应对于您的特定用例是必需的。例如,BioGPT,使用生物医学数据集从 GPT 模型微调,与未微调的 GPT 模型相比,为医学查询提供了改进的答案。

  • 成本效益:虽然微调时会有初始的前期成本,但一旦模型被微调,您就不需要向提示提供那么多的少样本样本,这导致提示更短,成本更低。我们将在第五章中进一步讨论少样本提示技术。

  • 降低延迟:较小的提示也意味着较低的延迟请求,因为 LLM 处理您的 API 调用所需的资源更少。

  • 一致的结果:使用特定领域的数据集微调 LLM 可以增强其在该领域内响应的一致性和准确性。例如,使用医学研究论文数据集训练通用语言模型不仅提高了其响应的准确性,还确保了在该领域内多个查询的一致输出。例如,当模型被要求“描述 2 型糖尿病的典型症状”时,微调模型可能会准确且一致地回答,“2 型糖尿病的典型症状包括口渴增加、频繁排尿、饥饿、疲劳和视力模糊。”这种专业训练确保模型为医学查询提供更可靠的信息,并在类似查询中保持这种一致性。

在本节中,我们探讨了微调的“是什么”和“为什么”。现在让我们了解一些现实世界的用例,在这些用例中,微调可以为您的 AI 应用增加价值。

微调应用

微调可以应用于广泛的自然语言处理任务,包括以下内容:

  • 文本分类:这涉及到通过检查其内容或上下文将文本分类到预定义的类别中。例如,在客户评论的情感分析中,我们可以将文本分类为正面、负面或中性。

  • 标记分类:这涉及到对文本中的单词进行标记,通常是为了识别名称或特定实体。例如,当将命名实体识别应用于文本时,我们可以识别人名、城市等。

  • 问答:这涉及到以自然语言提供有效的答案。

  • 摘要:这涉及到提供长文本的简洁摘要——例如,总结新闻文章。

  • 语言翻译:这涉及到将文本从一种语言转换为另一种语言。例如,将文档从英语翻译成西班牙语。

huggingface.co/docs/transformers/training

每次都将其通用语言模型精炼为特定任务的专家。模型也可以在不更新其权重的需要下进行定制。这个过程被称为情境学习或少样本学习。我们将在第五章中介绍这一内容,该章节专注于提示工程。

在我们深入探讨不同的微调技术之前,了解微调 LLM 模型的前一步骤——预训练——也是至关重要的。这个基础训练阶段为 LLM 奠定了基础,为微调的定制调整做好了准备。在接下来的部分,我们将对比预训练和微调,强调后者独特的优势和改进。

检查预训练和微调过程

预训练和微调是训练 GPT-3.5 等语言模型时的两个关键阶段。预训练类似于学生的通识教育,它涵盖广泛的学科以提供基础知识。另一方面,微调则类似于学生在大学后期专注于某一特定学科,为特定领域磨练技能。在 LLM 的背景下,预训练设定了广泛的基础,而微调则将焦点缩小,以在特定任务中表现出色。在本节中,我们将探讨预训练和微调,看看微调是如何增加价值的:

图 3.2 – 两步 LLM 训练过程

让我们概述这两个阶段。

预训练过程

预训练是训练语言模型的初始阶段。在这个阶段,模型从大量的文本数据中学习,通常被称为“预训练语料库”。预训练的目标是帮助模型从文本中学习语法、句法、上下文甚至一些世界知识。模型被训练来预测句子中的下一个单词,给定前面的单词。预训练的结果是一个已经学习到语言的一般理解的模型,可以生成连贯的文本。然而,它缺乏特定性和生成目标或领域特定内容的能力。

创建更高级模型的基石在于利用原始且智能的训练数据。以下图显示了用于预训练 OpenAI 的 GPT-3 模型的数据集。这些数据集在用于预训练之前经过了数据准备,以去除重复项并确保多样性和无偏见:

图 3.3 – 用于预训练 OpenAI 的 GPT-3 模型的数据集

例如,Meta 开发的 Llama 模型使用以下公开可用的数据集开发,经过彻底的数据净化和去重:

图 3.4 – Llama 模型预训练数据

这个训练数据集在标记化后由 1.4 万亿个标记组成。我们在第二章中简要讨论了标记的概念,将在第五章中更详细地讨论。

微调过程

微调是训练语言模型的第二个阶段,发生在预训练之后。在这个阶段,模型在更具体的数据集上进行训练,这些数据集是经过精心策划和定制的,用于特定的任务或领域。这个数据集通常被称为“微调数据集”。模型被喂入微调数据集的数据,随后预测下一个标记,并将预测与实际或“真实”值进行比较。在这个过程中,它试图最小化损失。通过重复这样做,LLM 就会针对下游任务进行微调:

图 3.5 – 微调过程

上述图表描述了语言模型从预训练到微调的过程。最初,它在来自各种互联网文本的广泛数据集上进行训练,这些文本涵盖了各种语言结构、主题和风格。随后,它使用具有特定领域提示和补全的针对性、高质量数据集进行细化。最终,这个微调数据集的数据质量决定了模型的输出精度。最后,微调模型通过查询和响应与用户互动,满足特定的下游任务。如前所述,这些下游任务可能包括文本分类、标记分类、问答、摘要、翻译等等。

到目前为止,我们已经探讨了微调的总体概念,权衡了其优势和局限性。现在,让我们深入了解一些基本的和高级的微调技术。

微调模型的技巧

在本节中,我们将讨论两种微调方法:传统的完全微调方法和先进的技巧,如 PEFT,它通过集成优化来实现与完全微调相当的结果,但具有更高的效率和更低的内存和计算成本。

完全微调

完全微调是指使用特定任务的数据集调整预训练模型的所有参数/权重的方法。这是一个直接的方法,通常效果良好,但可能需要大量的数据来避免过拟合和计算,尤其是对于大型模型。

通用完全微调方法的挑战包括为每个下游任务更新 LLM 的所有模型参数。以下是一些需要考虑的更多问题:

  • 高计算和内存需求:全量微调可能会极大地增加计算成本,导致大量内存需求,并需要在最先进的模型中更新数十亿或数万亿个参数,这可能会变得难以管理且效率低下。

  • 灾难性遗忘:全量微调一旦在新信息上进行微调,就很容易忘记旧信息。

  • 多个 LLM 副本:微调需要为每个任务(如情感分析、机器翻译和问答任务)构建 LLM 的完整副本,从而增加存储需求。LLM 有时可能达到几 GB 的大小,为不同的下游任务构建多个副本可能需要大量的存储空间。

为了应对这些挑战并使这个过程更加高效,出现了一种新的微调技术,称为 PEFT,它通过训练一小组参数(可能是现有模型参数的子集或一组新添加的参数)来实现与传统微调方法在不同场景下相似或更好的性能。通过这种方式,它几乎提供了相同的结果,但在计算和参数更新方面的成本更低。

在下一节中,我们将讨论不同类型的 PEFT 技术及其之间的权衡。

PEFT

PEFT 通过训练一组较小的参数集来解决全量微调的挑战。在本节中,我们将讨论各种技术,这些技术通过训练较小的参数集来实现效率。这些参数可以是当前模型参数的子集,也可以是新增的一组参数。这些技术在参数效率、内存效率和训练速度方面有所不同,尽管模型质量和任何潜在额外的推理成本也是这些方法之间区分的因素。PEFT 技术可以大致分为三类:

  • 选择性

  • 加法

  • 重新参数化

下图展示了 2019 年 2 月至 2023 年 2 月间发表的 40 篇研究论文中讨论的 30 种 PEFT 方法:

图 3.6 – 2019 年至 2023 年间研究论文中讨论的 PEFT 方法

此图摘自发表在论文《缩小规模以扩大规模:参数高效调优指南》中的调查。

在本节中,我们将深入探讨这些类别,但只涵盖那些已经显示出良好结果的最重要的 PEFT 技术。

加法

加性方法的核心概念是通过添加额外的参数或层来微调模型,专门训练这些新参数,并保持原始模型权重冻结。尽管这些技术向网络引入了新的参数,但通过减少梯度和优化器状态的大小,它们有效地减少了训练时间并提高了内存效率。这是 PEFT 方法中最广泛探索的类别。这个类别中的一个突出方法是带软提示的提示调整。

带软提示的提示调整

这种调整涉及冻结模型权重,而不是像模型微调那样更新模型参数,而是更新提示参数。当你冻结模型的权重时,你防止它们在训练过程中被更新。这些权重在整个微调过程中保持不变。与传统的微调相比,这是一种计算和能源效率非常高的技术。提示调整不应与提示工程混淆,我们将在第五章中讨论。为了更好地理解提示调整,我们需要了解软提示和嵌入空间的概念。

软提示和嵌入空间

嵌入向量空间是一个高维空间,其中单词、短语或其他类型的数据被表示为向量,使得语义上相似的项目在空间中彼此靠近。在自然语言处理的情况下,这些嵌入捕捉了单词或句子之间的语义含义和关系,允许进行可以推断相似性、类比和其他语言模式的操作。

图 3.7 – 软提示与硬提示

上图展示了沿 XYZ 轴的 3D 嵌入向量空间。将自然语言通过标记表示被认为是具有挑战性的,因为每个标记都与嵌入向量空间中的一个特定位置相关联。因此,它们也被称为硬提示。另一方面,软提示不受自然语言中固定、离散单词的限制,可以在多维嵌入向量空间中取任何值。在下面的图中,“跳跃”、“狐狸”等单词是硬提示,而未标记的黑色标记是软提示。

提示调整过程

在提示调整中,软提示,也称为虚拟标记,与提示连接;最优值的确定留给监督训练过程。如图所示,这些可训练的软标记被添加到嵌入向量表示之前——在这种情况下,“学生学习科学:”

图 3.8 – 软提示连接

下图提供了该过程的更详细表示。向量附加到每个嵌入输入向量的开头,并输入到模型中,预测与目标进行比较以计算损失,错误反向传播以计算梯度,但只更新新的可学习向量,保持核心模型冻结。换句话说,我们正在搜索嵌入空间中 LLM 应接受的提示的最佳表示。尽管我们难以理解以这种方式学习的软提示,但它们可以帮助我们了解如何使用标记数据集完成任务,与手工编写的文本提示做相同的工作,但不受特定单词或短语的限制:

图 3.9 – 提示调整过程(详细)

接下来,我们将比较三种方法:模型调整(全面微调)、提示调整和提示设计(提示工程)。如图 图 3.10 所示,Google 进行的研究显示了模型调整、提示调整和提示设计之间的差异(通过学习软提示引导冻结语言模型,QUINTA-FEIRA,2022 年 2 月 10 日,由 Google 研究的 AI 居民 Brian Lester 和高级软件工程师 Noah Constant 发布)。

模型调整(全面微调):

  • 这种方法从预训练模型开始,然后使用额外的输入数据在该特定任务上进行进一步训练(或“调整”)。在这个过程中,模型变得更加专业化。

  • 这种方法将“强任务性能”表示为模型与特定任务更加一致。

提示调整:

  • 与调整整个模型不同,只调整模型中的提示或输入。主要模型保持“冻结”或不变。

  • 这引入了“可调整软提示”的概念,可以通过调整来从模型中获得所需的输出。

  • 这种方法结合了预训练模型的一般能力与更具体的任务方法,从而实现“高效的多任务服务”。

提示设计(提示工程):

  • 重点在于设计一个非常具体的输入或提示,以引导预训练模型产生所需的输出。

  • 与提示调整类似,主要模型保持“冻结”状态。

  • 这种方法是通过精心构建正确的输入来利用预训练模型的广泛知识和能力。如前所述,我们将在第五章中详细介绍提示工程。

在提示调整和提示设计中,原始模型权重保持冻结,而在模型调整中,模型参数被更新:

图 3.10 – 模型调整、提示调整和提示设计

下图展示了左侧的模型调整(完全微调)和右侧的提示调整。为特定任务调整模型需要为每个下游任务创建整个预训练模型的特定版本,并且必须使用单独的数据批次进行推理。另一方面,提示调整只需要为每个任务存储一个小型的、特定于任务的提示,允许使用原始预训练模型进行混合任务推理。使用 T5 “XXL” 模型,每个调整后的模型版本需要 110 亿个参数。相比之下,我们的调整提示只需要每个任务 20,480 个参数,假设提示长度为 5 个标记,这减少了超过五个数量级:

图 3.11 – 模型调整与提示调整

现在,让我们看看与提示工程和模型微调相比,提示调整的优点:

  • 与模型微调相比,提示调整不需要为每个任务创建 LLM 的副本,从而减少了存储空间

  • 与少样本提示工程相比,提示调整不受上下文长度或有限示例数量的限制

  • 而不是精心制作最佳的手动提示以生成所需输出,你可以使用反向传播自动学习一个新的模型

  • 对领域变化具有弹性

来自谷歌的论文《参数高效提示调整的规模力量》突出了在 T5 变换器模型上进行的实验(图 3*.12*)。根据评估,随着规模的增加,T5 模型上的提示调整与模型调整(或微调)的质量相匹配,同时允许所有任务重用单个冻结模型。这种方法在 GPT-3 的少样本提示设计中表现显著。SuperGLUE 是一个基准,旨在全面评估各种自然语言理解模型在一系列具有挑战性的语言任务中的性能。我们将在本章接下来的部分中了解更多关于 SuperGLUE 的信息:

图 3.12 – SuperGLUE 分数与模型参数之间的关系

图 3*.12 展示了不同微调技术下 SuperGLUE 分数与模型参数之间的关系。随着规模的增加,尽管调整的参数减少了 25,000 次,提示调整与模型调整相匹配*。

github.com/google-research/prompt-tuning

在提示微调的缺点方面,解释软提示可能具有挑战性,因为这些标记不是固定的硬提示,也不代表自然语言。为了理解最接近的含义,必须将嵌入转换回标记,并通过测量余弦相似度确定最接近的 k 个邻居。这是因为最接近的邻居形成一个具有语义相似性的语义组。

重参数化

常规全微调,涉及重新训练语言模型中的所有参数,随着模型规模的增加变得不可行。这可能会变得计算成本非常高。因此,研究人员确定了一种新的方法,称为重参数化,这是一种在微调中使用的技巧,旨在减少模型中的可训练参数数量,同时保持其有效性。这些方法使用低秩变换来重新参数化权重,从而减少可训练参数的数量,同时仍然允许该方法与高维矩阵(如网络的预训练参数)一起工作。让我们探讨一个非常流行的重参数化方法,称为低秩****适应LoRa)。

LoRA

为了提高微调的效率,LoRA 利用了一种方法,通过低秩分解使用两个紧凑的矩阵来表示权重更新。这种方法包括锁定预训练模型权重,并在 Transformer 架构的每一层引入可训练的低秩分解矩阵。低秩分解,通常简称为低秩近似,是一种数学方法,用于用两个低秩矩阵的乘积来近似给定的矩阵。这种技术的首要目标是捕获原始矩阵中包含的最重要信息,同时使用更少的参数或维度。实验结果表明,LoRa 可以将可训练参数的数量减少超过 96%。

下图显示了常规微调和 LoRA 之间的差异。如您所见,在全微调中通过反向传播确定的权重更新 W_delta 在 LoRA 中被分解为两个低秩矩阵。W_a 和 W_b 提供了与原始 W_delta 相同的信息,但以更有效的方式表示:

图 3.13 – 比较常规全微调和 LoRA

如下表所示,研究人员发现,通过仅更新可训练参数的 0.02%(37.7M/175,255.8M),LoRa 微调与 GPT-3 的全微调相匹配或优于全微调。使用 LoRA,可训练参数的数量减少到 4.7M 和 37.7M,从全微调的约 175B。评估指标使用了ROUGE,我们将在本章后面讨论。

图 3.14 – 使用 LoRA 的微调效率

现在,让我们考虑 LoRA 的好处:

  • LoRA 通过显著减少可训练参数来提高微调效率,因此可以在单个 GPU 上训练,避免了分布式集群 GPU 的需求。

  • 原始预训练权重保持不变,允许使用各种轻量级的 LoRA 模型在顶部执行不同的任务。这消除了为每个下游任务创建完整微调模型副本的需要。

  • LoRA 可以与许多其他 PEFT 技术相结合。

  • LoRA 微调模型与完全微调模型的表现相当。

  • 使用 LoRA 作为适配器权重与基础模型集成时,没有增加服务延迟,允许快速任务切换。

选择性

选择性方法是最简单的微调方法,因为它只涉及网络的顶层。然而,研究人员提到,虽然它们可能在涉及规模较小、模型参数少于 10 亿的数据场景中表现出色,但与传统的微调方法相比,它们可能需要大量的计算资源和内存。因此,在选择 PEFT 方法时,这些方法不应是首选。

BitFit是选择性 PEFT 方法之一,仅微调网络的偏差。BitFit 仅更新了 0.05%的模型参数,最初在低中数据场景下展示了与完整微调相当甚至更好的结果,这些 BERT 模型包含的参数少于 10 亿。当评估更大型的网络,如 T0-3B 或 GPT-3 时,BitFit 的性能明显落后于完整微调和其他 PEFT 方法。

其他重要的选择性 PEFT 技术包括 DiffPruning、FishMask、Freeze 和 Reconfigure。

在理解了微调之后,让我们探索一种与微调过程相关的方法:RLHF。这种方法利用人类洞察力进一步调整模型行为和输出,使其更接近人类价值观和期望。让我们深入了解 RLHF 的工作原理及其在微调领域的重要性。

RLHF – 将模型与人类价值观对齐

微调对于实现特定任务是有益的,从而提高准确性和改进模型适应性,但模型有时可能会表现出不受欢迎的行为。它们可能会产生有害的语言,表现出攻击性,甚至分享有关危险主题(如武器或爆炸物制造)的详细指导。这些行为可能会对社会造成损害。这源于模型是在包含恶意内容的广泛互联网数据上训练的。预训练阶段和微调过程可能会产生反效果、危险或误导的结果。因此,确保模型与人类的伦理和价值观相一致至关重要。额外的细化步骤应整合三个基本的人类原则:有用性、无害性和诚实性HHH)。RLHF 是一种训练机器学习模型的方法,特别是在强化学习(RL)的背景下,它使用来自人类的反馈。为了理解 RLHF,我们必须了解 RL 的概念:

  • RL:这是一种机器学习类型,其中代理通过在环境中采取行动以最大化某种累积奖励的概念来学习做出决策。代理与环境互动,以奖励或惩罚的形式接收反馈,并相应地调整其行动。例如,一个下棋的 AI 通过赢得棋局获得积分来改进其策略,而犯错误则失去积分。

    RLHF 是一种 RL,其中传统的奖励信号,通常来自环境,被来自人类的反馈所取代或增强。最初,模型被训练来模仿人类行为。然后,而不是完全依赖环境奖励,人类通过比较不同的动作序列或轨迹来提供反馈。这种人类反馈用于训练奖励模型,然后指导代理的学习过程,帮助它在环境中改善其决策和行动。RLHF 的核心组件是奖励模型和 RL 算法。

  • 奖励模型:在强化学习的背景下,奖励模型是一种根据代理在给定状态下采取的行动提供数值奖励信号给代理的模型。而不是手动设计奖励函数,这可能会很具挑战性和容易出错,奖励模型通常从数据中学习,通常结合人类反馈。

  • 人类反馈:如图所示,LLM 模型的输出由人类通过评分系统进行排序,然后输入到奖励模型中。在学习过程中,奖励模型通过展示示例或提供交互式反馈,教会代理什么是有帮助的、无害的和诚实的:

huggingface.co/blog/rlhf
  • RL 算法:RL 算法利用奖励模型的输入来改进 LLM,逐步提高奖励分数。一种流行的 RL 算法是近端策略优化。如图所示,首先,LLM 生成一个输出,该输出由奖励模型定量评估,以提供 1.79 的奖励分数。这个奖励被发送到 RL 算法,然后 RL 算法更新 LLM 的权重。最近出现的一种非常流行的 RL 算法是 PPO。理解 PPO 的内部细节超出了本书的范围,但更多信息可以在 Open AI 的研究论文《近端策略优化算法》中找到:

图 3.16 – 使用 RL 算法更新 LLM

  • 潜在风险 - 奖励黑客攻击:在强化学习中,智能体寻求最大化环境提供的奖励模型。然而,有时智能体会发现未经意料的捷径或漏洞,在不实际解决预期任务的情况下获得高奖励。这被称为“奖励黑客攻击”。这可能导致 RLuUpdated LLM 生成语法错误的句子、无意义的句子或夸张的积极句子以最大化奖励。为了减轻这一点,PPO 通过使用Kullback-Leibler (KL)-距离来设定策略修改幅度的界限。这种限制是通过使用Kullback-LeiblerKL)-距离来实现的。

  • Kullback-Leibler (KL): 距离度量一个概率分布与另一个参考分布之间的差异程度。所罗门·库尔巴克和理查德·A·莱布勒于 1951 年将这一概念引入世界。在 PPO 的背景下,KL 距离在引导优化中起着关键作用,确保改进后的策略与其前身保持紧密一致。换句话说,它确保了强化学习对 LLM 的更新不会过于剧烈,并保持在阈值值内。

如何评估微调模型性能

到目前为止,我们已经学习了如何微调 LLM 以满足我们的需求,但如何评估一个模型以确保其表现良好?但我们如何知道微调后的模型在特定任务上是否比其前身模型有所改进?有哪些行业标准基准我们可以依赖来评估模型?在本节中,我们将了解 LLM(如 GPT)是如何被评估的,并使用研究人员开发的最流行的基准。

评估指标

双语评估助手BLEU)和基于理解评估的召回率助手ROUGE)都是广泛使用的用于评估机器生成文本质量的指标,尤其是在机器翻译和文本摘要的背景下。它们以不同的方式衡量生成文本的质量。让我们更深入地了解一下。

ROUGE

ROUGE 是一组用于通过将它们与参考摘要进行比较来评估摘要质量的指标。它主要用于评估文本摘要,但也可以应用于其他任务,如机器翻译。ROUGE 关注生成摘要和参考摘要之间的 n-gram 重叠——即n个项目的单词序列。

图 3.17 – ROUGE-N 的公式

ROUGE 最常见的变体如下:

  • ROUGE-N:此变体衡量 n-gram 的重叠。例如,ROUGE-1 查看 1-gram(单个单词)的重叠,ROUGE-2 考虑 2-gram(两个连续的单词),依此类推。

  • ROUGE-L:此变体考虑生成摘要和参考摘要之间的最长公共子序列。它关注两个摘要都共享的最长序列单词集。

  • ROUGE-S:此变体衡量跳过双词的重叠,即句子中不考虑顺序的单词对,允许存在间隔。

现在,让我们来看一个例子。

让我们使用专注于单个单词重叠的 ROUGE-1 来举例说明:

  • 参考摘要:“男孩跌倒在草地上”

  • 生成摘要:“男孩在草地上。”

在这里,除了“was”和“fell”之外,其他每个单词在两个摘要之间都匹配。

参考中的总单词数 = 6

匹配单词 = 5

因此,ROUGE-1 的召回率(参考摘要中有多少单词也出现在生成摘要中)如下:

5/6 = 0.83 或 83%

ROUGE 还可以计算精确度(生成摘要中有多少单词出现在参考摘要中)和 F1 分数(精确度和召回率的调和平均值)。

在这个例子中,我们有以下内容:

  • 精度:5/6 = 0.83 或 83%

  • F1 分数:2 * (Precision * Recall) / (Precision + Recall) = 83%

虽然 ROUGE 分数给出了生成文本和参考文本之间重叠的定量度量,但需要注意的是,高 ROUGE 分数并不总是意味着生成的摘要质量高。其他因素,如连贯性和流畅性,并未被 ROUGE 所捕捉。

BLEU

BLEU 是评估从一种自然语言翻译成另一种自然语言的文本质量的指标。BLEU 背后的核心思想是,如果翻译质量好,翻译中的单词和短语应该与人类制作的参考翻译中的单词和短语以相同的顺序出现。

aclanthology.org/P02-1040.pdf

注意

ROUGE 和 BLEU 都是简单的指标,可用于诊断目的,但不应该用于模型的全面最终评估。因此,为了进行更全面的评估,我们必须考虑基准方法。这些将在下一节中讨论。

基准

基准对于评估同样至关重要。这是一个快速发展的研究领域,因此在本节中,我们重点关注截至 2024 年初的重要基准。基准是用于衡量和比较模型在各个领域(如理解、生成或准确性)性能的测试或任务。它们帮助研究人员和开发者评估模型理解和生成文本的能力,并可用于比较一个大型语言模型(LLM)与另一个 LLM 的性能或跟踪随时间的变化。ROUGE 和 BLEU 等评估指标对 LLM 的能力提供了有限的见解。因此,为了获得 LLM 的更全面视角,我们可以利用 LLM 研究人员开发的现有评估数据集和相关基准。

GLUE 和 SuperGLUE

通用语言理解评估GLUE)是一个用于评估各种任务上自然语言理解(NLU)模型性能的基准套件。GLUE 于 2018 年推出,包括九个 NLU 任务,如情感分析、问答和文本蕴含等。它旨在通过提供一套标准任务以促进模型比较和竞赛,并推动 NLU 模型所能达到的边界。

super.gluebenchmark.com
arxiv.org/pdf/1905.00537.pdf
任务描述示例
BoolQ根据文章回答是/否问题。文章:“海豚以其智慧而闻名。”
CB预测语句中的承诺程度。前提:“我认为猫可能在大花园里。”
COPA在给定的前提中,在两个合理的替代选项之间选择原因或结果。前提:“地面湿了。”
MultiRC回答关于文章中单个句子的提问。文章:“木星是最大的行星。它主要由氢组成。”
ReCoRD使用上下文在文章中填空。文章:“Lara 喜欢阅读。她最喜欢的类型是 ____。她已经读完了所有的侦探小说。”
RTE判断前提句子是否蕴涵假设句子。前提:“狗是哺乳动物。”
WiC判断一个词在两个句子中是否有相同的意思。句子 1:“他使用钥匙打开门。”
WSC确定句子中的代词指代哪个名词短语。句子:“奖杯太大,放不进手提箱。”

图 3.18 – SuperGLUE 基准

super.gluebenchmark.com/leaderboard

图 3.19 – 2024 年 2 月的 SuperGLUE 基准排行榜快照

大规模多任务语言理解(MMLU)

arxiv.org/pdf/2009.03300.pdf

超越模仿游戏基准(BIG-bench)

arxiv.org/abs/2206.04615
github.com/google/BIG-bench#submitting-a-model-evaluation

全面的语言模型评估(HELM)(经典、轻量级和文本到图像)

由斯坦福研究所在 2022 年 11 月推出的 HELM Classic 基准,评估模型在七个关键指标上的表现:准确性、校准、鲁棒性、公平性、偏差、毒性和效率。HELM 框架旨在提高模型的可透明性,并提供了关于哪些模型在特定任务上表现良好的见解。该基准在 51 个场景中测量这七个指标,并揭示了模型与指标之间的权衡。该基准也在不断进化,更多场景、指标和模型正在被添加到该基准中。场景包括用例和示例数据集,例如 数学思维链MATH)、小学数学GSM8K)、HellaSwag(常识推理)、MMLU、OpenBook QA(问答)等。

crfm.stanford.edu/helm/classic/latest/#/scenarios
crfm.stanford.edu/helm/lite/latest/#/leaderboard
crfm-helm.readthedocs.io/en/latest/

Helm Classic 在 ChatGPT 之前发布,其初始目标是全面评估在各种代表性场景中可用的各种语言模型,例如语言能力、推理技能、知识等,以及一系列指标。然而,它相当庞大,因此发布了一个更轻量级的版本,称为 HELM Lite。它不仅是 Classic 的子集,而且是一个更简化的版本,具有更少的核心场景。

arxiv.org/abs/2311.04287
  • 图像与文本对齐

  • 图像质量

  • 美学

  • 原创性

  • 理解

  • 知识

  • 偏见

  • 毒性

  • 公平性

  • 健壮性

  • 多语言性

  • 效率

在本节中,我们深入探讨了 LLMs 的关键基准和评估指标。如果你正在构建企业级的 ChatGPT 应用程序,将 GPT 模型与顶级基准进行比较至关重要,以确保应用程序的有效性、可靠性和安全性。此类基准为此努力提供了良好的基础。

工具,如 Azure AI Studio 和 Azure Prompt Flow,提供了定性和定量解决方案来评估你的模型。它还提供了基准测试功能,帮助你使用行业领先的基准来评估不同的模型。ROUGE-N 和 BLEU 等分数可以使用 Azure Prompt Flow 的开箱即用功能进行计算。

微调成功的实际案例

在本节中,我们将探讨 OpenAI 实施的一种微调方法的实际案例,该方法取得了显著成果。

InstructGPT

OpenAI 的 InstructGPT 是最成功的微调模型故事之一,为 ChatGPT 打下了基础。据说 ChatGPT 是 InstructGPT 的一个兄弟模型。用于微调 ChatGPT 的方法与 InstructGPT 相似。InstructGPT 通过使用 RHLF 对预训练的 GPT-3 模型进行微调而创建。监督微调是 RLHF 中生成符合人类偏好的响应的第一步。

在最初,GPT-3 模型并非最初设计为遵循用户指令。它们的训练侧重于根据大量互联网文本数据预测下一个单词。因此,这些模型通过使用指导数据集和 RLHF 进行了微调,以增强它们在接收到用户指令时生成更符合人类价值观的有用和相关的响应的能力:

图 3.20 – 使用 RLHF 的微调过程

此图展示了 InstructGPT 微调过程的示意图:(1)初始的监督微调,(2)训练奖励模型,以及(3)使用此建立的奖励模型通过 PPO 执行强化学习。蓝色箭头表示使用这些数据来训练相应模型。在步骤 2中,A-D 框是经过标注者排名的模型样本。

下图提供了使用 RLHF 微调的模型、监督微调的模型和通用 GPT 模型响应质量的比较。Y轴由李克特量表组成,显示了模型输出在 1-7 尺度上的质量评分(Y轴),针对通过 OpenAI API 提交给 InstructGPT 模型的提示,以及各种模型大小(X轴)。结果显示,与 GPT-3 模型(无论是少量提示还是无提示)以及经过监督学习微调的模型相比,InstructGPT 的输出获得了标注者显著更高的评分。为此工作雇佣的标注者是独立的,并来自 Scale AI 和 Upwork:

图 3.21 – InstructGPT 的评估(图片版权:Open AI)

InstructGPT 可以在毒性、真实性和适宜性等多个维度进行评估。对于真实问答和适宜性,较高的分数是可取的,而对于毒性和幻觉,则更倾向于较低的分数。幻觉和适宜性的测量是基于我们 API 中提示词的分布进行的。结果会根据不同的模型大小进行汇总:

图 3.22 – InstructGPT 的评估

在本节中,我们介绍了微调的概念,并讨论了使用 RLHF 进行微调的成功案例,这导致了 InstructGPT 的开发。

摘要

微调是定制模型的一种强大技术,但它可能并不总是必要的。观察发现,它可能耗时且可能存在初始的前期成本。建议从更容易、更快的策略开始,例如使用少量示例的提示工程,然后使用 RAG 进行数据接地。只有当 LLM 的响应仍然次优时,才应考虑微调。我们将在下一章讨论 RAG 和提示工程。

在本章中,我们深入探讨了针对特定任务的关键微调策略。然后,我们探索了一系列评估方法和基准,以评估您精炼后的模型。RLHF 过程确保您的模型与人类价值观保持一致,使其变得有用、诚实和安全。在下一章中,我们将探讨与向量数据库配对的 RAG 方法——这是在 LLM 驱动的应用中定位企业数据并最小化幻觉的关键技术。

参考文献

第四章:RAGs to Riches: 利用外部数据提升 AI

如 GPT 这样的 LLM 存在某些局限性。由于它们的训练知识截止日期,它们可能没有最新的信息。当我们希望我们的 AI 模型提供准确、上下文感知和及时响应时,这构成了一个重大挑战。想象一下,当您向 LLM 提出一个关于最新技术趋势的问题或寻求关于突发新闻事件的实时更新时,传统的语言模型在这些情况下可能会不足。

在本章中,我们将向您介绍一种颠覆性的技术,称为检索增强生成RAG),这是 Facebook AI(现在称为 Meta)的研究人员所进行工作的成果。这是赋予 GPT 等语言模型连接其静态知识与动态现实之间差距的秘密配方。有了 RAG,我们将向您展示如何使您的生成式 AI 应用程序具备获取新信息、定位组织数据、交叉验证事实以解决幻觉,并保持上下文意识的能力,这一切都在实时进行。我们还将讨论向量数据库的基础知识,这是一种新的、热门的、新兴的数据库,旨在存储、索引和查询代表高维数据的向量;它们通常用于相似性搜索和机器学习应用,并在构建 RAG 应用程序中至关重要。

让我们了解 RAG 如何将您的语言模型转变为信息丰富的对话助手,确保无论何时提问,它都能始终了解情况。

本章我们将涵盖以下主要内容:

  • 深入了解向量数据库的基本知识

  • 向量存储

  • 向量数据库在检索增强生成(RAG)中的作用

  • 分块策略

  • 使用 Azure Prompt Flow 评估 RAG

  • 案例研究 – 一家跨国组织部署的全球聊天应用程序

图 4.1 – RAG 的优势

深入了解向量数据库的基本知识

要完全理解 RAG,理解向量数据库是至关重要的,因为 RAG 严重依赖于其高效的数据检索以解决查询。向量数据库是一种设计用于存储和高效查询高维向量的数据库,常用于相似性搜索和机器学习任务。向量数据库的设计和机制直接影响 RAG 答案的效率和准确性。

在本节中,我们将介绍向量数据库(向量及其嵌入)的基本组件,在下一节中,我们将深入探讨向量数据库的重要特性,这些特性使得基于 RAG 的生成式 AI 解决方案成为可能。我们还将解释它与常规数据库的不同之处,并将其全部联系起来解释 RAG。

向量和向量嵌入

向量是一个具有大小和方向的数学对象,可以用一组有序的数字来表示。在更广泛的意义上,尤其是在计算机科学和机器学习领域,向量可以被看作是一个表示一定维度空间中点的数字数组或列表。以下图像中所示,在二维空间(左侧),一个向量可能表示为[x, y],而在三维空间(右侧),它可能表示为[x, y, z]:

图 4.2 – 2D 和 3D 空间中向量的表示

向量嵌入指的是将对象,如单词、句子,甚至整个文档,在高度维度空间中表示为向量的过程。高度维度空间指的是具有超过三个维度的数学空间,常用于数据分析机器学习中表示复杂的数据结构。想象一下,这是一个你可以向超过三个方向移动的房间,便于描述和分析复杂数据。嵌入过程将单词、句子或文档转换为向量表示,捕捉它们之间复杂的语义关系。因此,具有相似意义的单词在高度维度空间中往往彼此靠近。现在,你可能想知道这如何在设计包含 LLMs 的生成式 AI 解决方案中发挥作用。向量嵌入提供了数据的基础表示。它们是多种类型数据的标准化数值表示,LLMs 使用它来处理和生成信息。这种将单词和句子转换为数值表示的嵌入过程由 OpenAI 的 text-embedding-ada-002 等嵌入模型启动。让我们用一个例子来解释这一点。

以下图像直观地表示了在二维向量嵌入空间中哺乳动物和鸟类的聚类,区分了它们的现实和卡通表现。这幅图像描绘了“现实”和“卡通”表示之间的光谱,进一步分为“哺乳动物”和“鸟类”。在现实方面,有一只哺乳动物(麋鹿)和三只鸟(一只猫头鹰、一只老鹰和一只小鸟)。在卡通方面,有风格化和异想天开的卡通版本,包括一个滑稽的鹿、一只猫头鹰和夸张的鸟类角色。LLMs 使用这样的向量嵌入空间,这些是高度维度空间中对象的数值表示,来理解、处理和生成信息。例如,想象一个旨在教育儿童了解野生动物的教育应用程序。如果学生提示聊天机器人提供卡通风格的鸟类图像,LLM 将搜索并从右下象限生成信息:

图 4.3 – 在高维空间中具有相似特征的动物的位置,展示了“相关性”

现在,让我们深入了解嵌入模型的演变,这些模型在高度维度的空间中产生嵌入,即对象的数值表示。嵌入模型经历了显著的演变,从最初将离散单词映射到密集向量的方法(如词向量(Word2Vec)、全局单词表示向量(GloVe)和 FastText)过渡到更复杂的基于深度学习架构的上下文嵌入。这些较新的模型,如来自语言模型的嵌入(ELMos),利用基于长短期记忆(LSTM)的结构来提供上下文特定的表示。基于新变压器架构的嵌入模型,如双向编码器表示的变压器(BERT)、生成预训练变压器(GPT)及其后续迭代,在先前的模型上实现了革命性的飞跃。

这些模型以无与伦比的程度捕捉上下文信息,使嵌入能够根据周围上下文表示单词含义的细微差别,从而在各种自然语言处理任务中设定新的标准。

重要提示:

2024 年 1 月,OpenAI 宣布了两种第三代嵌入模型,text-embedding-3-smalltext-embedding-3-large,这是性能更好、成本更低、多语言检索更好以及参数减少,以减少与前辈第二代模型text-embedding-ada-002相比的维度总体大小的新模型。另一个关键区别是两代之间的维度数。第三代模型有不同的维度,最高可达 3,072。截至 2024 年 1 月,我们已经看到更多使用 1,536 维度的 text-embedding-ada-002 在生产中的工作负载,OpenAI 建议未来使用第三代模型以获得更好的性能和降低成本。

huggingface.co/spaces/mteb/leaderboard

以下代码片段给出了生成 Azure OpenAI 端点的示例:

import openai
openai.api_type = "azure"
openai.api_key = YOUR_API_KEY
openai.api_base = "https://YOUR_RESOURCE_NAME.openai.azure.com"
openai.api_version = "YYYY-MM-DD"  ##Replace with latest version
response = openai.Embedding.create (
    input="Your text string goes here",
    engine="YOUR_DEPLOYMENT_NAME"
)
embeddings = response['data'][0]['embedding']
print(embeddings)

在本节中,我们强调了向量嵌入的重要性。然而,它们真正的价值在于有效使用时。因此,我们现在将深入探讨索引和向量搜索策略,这对于 RAG 工作流程中的最佳数据检索至关重要。

向量搜索策略

向量搜索策略至关重要,因为它们决定了如何高效且准确地查询和检索高维数据(如嵌入)。最佳策略确保返回最相关和上下文适当的搜索结果。在基于向量的搜索中,主要有两种主要策略:精确搜索近似搜索

精确搜索

正如术语所暗示的,精确搜索方法直接将查询向量与数据库中的向量相匹配。它使用穷举法来识别最近的邻居,允许最小化或没有错误。

这通常是传统 KNN 方法所采用的。传统的 KNNs 使用穷举法来找到 K 个最近的邻居,这需要对输入向量与数据集中的每个其他向量进行彻底的比较。尽管通常对每个向量的相似性计算很快,但由于需要进行的比较数量庞大,这个过程在大型数据集中会变得耗时且资源密集。例如,如果您有一个包含一百万个向量的数据集,并且想要找到一个输入向量的最近邻居,传统的 KNN 将需要一百万次距离计算。这可以想象为在电话簿中通过逐个检查条目来查找朋友的电话号码,而不是使用更有效的搜索策略来加快这个过程,我们将在下一节中讨论。

近似最近邻(ANNs)

在现代向量数据库中,被称为 ANN 的搜索策略因其快速找到高维空间中近似的最近数据点而脱颖而出,这是一种强大的技术,可能会以牺牲一点准确性为代价来换取速度。与 KNN 不同,ANN 优先考虑搜索速度,而牺牲了轻微的准确性。此外,为了有效地运行,必须事先构建一个向量索引。

向量索引的过程

向量索引的过程涉及将嵌入组织到一个称为索引的数据结构中,该结构可以快速遍历以进行检索。许多 ANN 算法有助于形成向量索引,所有这些算法都旨在通过创建一个高效可遍历的数据结构来实现快速查询。通常,它们会压缩原始向量表示,以增强搜索过程。

存在着许多索引算法,这是一个活跃的研究领域。ANNs 可以广泛地分为基于树的索引基于图的索引基于哈希的索引基于量化的索引。在本节中,我们将介绍两种最流行的索引算法。在创建 LLM 应用程序时,您不需要深入研究索引过程,因为许多向量数据库已经为您提供了这项服务。但是,选择适合您特定需求的正确类型的索引对于确保高效的数据检索非常重要:

图 4.4 – HNSW 索引的表示

该图像说明了用于高效相似性搜索的 HNSW 图结构。图是分层构建的,从底部到顶部密度逐渐降低。随着我们向上移动,每一层的特征半径减小,创建更稀疏的连接。用红色虚线表示的搜索路径展示了算法的策略;它从最稀疏的顶层开始,快速导航大量数据区域,然后在更密集的底层细化搜索,最小化总体比较并提高搜索效率。

  • Facebook AI 相似性搜索FAISS):由 Facebook AI Research 开发的 FAISS 是一个用于高效相似性搜索和聚类高度维向量的库。它在索引过程中使用产品量化来压缩数据,加速大量数据集中的相似性搜索。这种方法将向量空间划分为称为 Voronoi 单元的区域,每个单元由一个质心表示。主要目的是最小化存储需求并加快搜索速度,尽管这可能会略微降低准确性。为了可视化这一点,请考虑以下图像。Voronoi 单元表示量化区域,这些单元内的标记点是质心或代表性向量。在索引新向量时,它与其最近的质心对齐。对于搜索,FAISS 确定可能包含最近邻的 Voronoi 单元,然后在单元内缩小搜索范围,显著减少距离计算:

图 4.5 – FAISS 索引的表示

由于其性能优化和内置 GPU 优化,它在图像和视频搜索、推荐系统以及任何涉及在高度维空间中搜索最近邻的任务中表现出色。

在本节中,我们介绍了索引和 ANN 在索引创建中的作用。接下来,我们将探讨相似性度量,它们与索引的不同之处,以及它们对改进数据检索的影响。

何时使用 HNSW 与 FAISS

使用 HNSW 的情况:

  • 在相似度搜索中实现高精度至关重要。

  • 数据集规模很大,但尚未达到 HNSW 管理起来变得不切实际的程度。

  • 需要实时或接近实时的搜索性能。

  • 数据集是动态的,经常更新或插入。

  • 适用于涉及文本的用例,如文章推荐系统

当使用 FAISS 时:

  • 管理极其庞大的数据集(例如,数十亿个向量)。

  • 批量处理和 GPU 优化可以显著提高应用性能。

  • 需要在搜索速度和准确性之间进行灵活的权衡。

  • 数据集相对静态,或批量更新是可以接受的。

  • 适用于图像和视频搜索等用例。

注意

选择合适的索引策略取决于几个关键因素,包括数据的性质和结构、要支持的查询类型(例如范围查询、最近邻查询、精确搜索)、数据的体积和增长、数据更新的频率(例如静态与动态)、数据的维度、性能要求(实时、批量)以及资源限制。此外,数据更新的频率、数据的维度、性能要求(实时、批量)和资源限制在决策过程中也发挥着重要作用。

相似度度量

相似度度量决定了索引的组织方式,并确保检索到的数据与查询高度相关。例如,在一个旨在检索相似图像的系统设计中,索引可能围绕图像的特征向量构建,而相似度度量将决定哪些图像在该索引空间内是“接近”或“远离”的。这些概念的重要性有两方面:索引显著加快了数据检索速度,相似度度量确保检索到的数据与查询相关,共同提高了数据检索系统的效率和效果。选择合适的距离度量可以显著提高分类和聚类任务的性能。最优的相似度度量是根据数据输入的性质选择的。换句话说,相似度度量定义了两个项目或数据点之间关系的紧密程度。它们可以广泛地分为距离度量相似度度量。接下来,我们将探讨构建 AI 应用时前三个最常用的相似度度量:余弦相似度、欧几里得距离和曼哈顿距离。

  • 相似度度量 – 余弦相似度:余弦相似度是一种相似度度量,它计算两个向量之间角度的余弦值。OpenAI 建议使用它来衡量从 text-embedding-ada-002 中获得的两个嵌入之间的距离。度量值越高,它们越相似:

图 4.6 – 通过两个单词之间的余弦相似度展示相关性的插图

前面的图像显示了当印度和美国相关联时,余弦相似度为 1 的情况,因为它们都是国家。在另一幅图像中,相似度为 0,因为足球与狮子不相似。

  • 距离度量 – 欧几里得距离(L2):欧几里得距离计算欧几里得空间中两点之间的直线距离。度量值越高,两点之间的相似度越低:

图 4.7 – 欧几里得距离示意图

该图像展示了二维空间中的欧几里得距离公式。它显示了两个点:(x1,y1) 和 (x2,y2)。前面的公式计算了平面上两点之间的直线距离。

  • 距离度量 – 曼哈顿距离(L1):曼哈顿距离计算每个维度上绝对差异的总和。度量值越高,差异的相似度越低。以下图像展示了二维空间中两点之间的曼哈顿距离(或 L1 距离),距离是沿着直角轴测量的,类似于在网格状街道布局中导航城市街区:

图 4.8 – 曼哈顿距离示意图

你可能会想知道在开发生成式 AI 应用程序时,何时选择一种度量标准而不是另一种。关于使用哪种相似度测量的决定取决于各种元素,例如数据的类型、应用的上下文以及分析结果的定制需求。

当数据向量的幅度相对于方向或数据取向不那么重要时,余弦相似度比曼哈顿和欧几里得距离更受欢迎。例如,在文本分析中,两篇文档可能由表示单词频率的高维向量表示。如果一篇文档是另一篇文档的较长版本,它们的单词频率向量将指向同一方向,但由于单词计数更高,一个向量的幅度(长度)会更大。使用欧几里得或曼哈顿距离会突出这些幅度差异,表明文档不同。然而,使用余弦相似度将捕捉它们在内容(向量的方向)上的相似性,淡化单词计数上的差异。在这种情况下,余弦相似度更合适,因为它关注向量之间的角度,反映了文档的内容重叠,而不是它们的长度或幅度。

当数据向量的幅度和绝对差异至关重要时,例如在具有一致缩放数值数据(例如年龄、身高、体重等)或空间应用(如基于网格的路径查找)中,欧几里得距离和曼哈顿距离比余弦相似度更合适。虽然余弦相似度强调数据向量的方向或模式,这在高维、稀疏数据集中特别有用,但欧几里得距离和曼哈顿距离捕捉数据点之间的实际差异,因此在绝对值偏差显著的场景中更受欢迎,例如比较患者的医学检测结果或找到地球上地理坐标之间的距离。

以下是一个使用 Azure OpenAI 端点通过嵌入模型 text-embedding-ada-002 计算两个句子“你知道多少个国家?”和“你熟悉多少个国家?”之间相似度的代码片段。它给出了 0.95 的分数:

import os
import openai
openai.api_type = "azure"
openai.api_base = "https://ak-deployment-3.openai.azure.com/"
openai.api_version = "2023-07-01-preview" 
##replace "2023-07-01-preview" with latest version
openai.api_key = "xxxxxxxxxxxxxxxxxxxxxxx"
def get_embedding(text, model="text-embedding-ada-002"):
    return openai.Embedding.create(engine=model, input=[text], \
        model=model)['data'][0]['embedding']
embedding1 = get_embedding("What number of countries do you know?", \
    model='text-embedding-ada-002')
embedding2 = get_embedding("How many countries are you familiar \
    with?", model='text-embedding-ada-002')
embedding1_np = np.array(embedding1)
embedding2_np = np.array(embedding2)
similarity = cosine_similarity([embedding1_np], [embedding2_np])
print(similarity)
# [[0.95523639]]

现在,让我们通过一个场景来了解为什么在余弦相似度和曼哈顿距离之间,余弦相似度会被优先考虑。

文章推荐系统

让我们考虑一个场景,一个新闻聚合平台旨在推荐与用户当前阅读的文章相似的文章,通过建议相关内容来增强用户参与度。

工作原理
  • 预处理和索引:平台数据库中的文章经过处理以提取文本特征,通常使用 LDA 或基于 transformer 的嵌入(如 text-ada-embedding-002)将其转换为高维向量。然后,使用 HNSW 索引对这些向量进行索引,HNSW 是一种适合高维空间的算法,由于其层次结构,它促进了高效的导航和搜索。

  • 检索时间:当用户阅读一篇文章时,系统会为这篇文章生成一个特征向量,并查询 HNSW 索引以找到在高维空间中与之接近的向量(以及相应的文章)。可以使用余弦相似度来评估查询文章的向量与索引中的向量之间的相似度,从而识别出内容相似的文章。

  • 结果:系统根据与当前查看文章的相关性推荐一系列文章。得益于高效的索引和相似度搜索,即使是从庞大的文章数据库中,这些推荐也能快速生成,为用户提供无缝的体验。

现在,让我们通过一个场景来了解为什么在曼哈顿距离和余弦相似度之间,曼哈顿距离会被优先考虑。

拼车应用匹配

让我们考虑一个场景,一个拼车应用需要高效地将乘客与附近的司机匹配。系统必须快速找到离乘客位置最近的可用司机,以最小化等待时间并优化路线。

工作原理

  • 预处理和索引:司机的当前位置不断更新并存储为表示地图的二维空间中的点。这些点可以使用基于树的空間索引技术或针对地理空间数据优化的数据结构(如 R 树)进行索引。

  • 检索时间:当乘客请求乘车时,应用程序使用乘客的当前位置作为查询点。曼哈顿距离(L1 范数)特别适合城市环境,因为街道和大道的网格状结构限制了移动,模仿了汽车在城市街区中实际行驶的路径。

  • 结果:系统快速识别最近的可用司机,使用索引数据和曼哈顿距离计算,考虑到城市网格的约束。这个过程确保了快速匹配过程,通过减少等待时间来提高用户体验。

向量存储

随着生成式人工智能应用不断推动技术在可能性的边界,向量存储已成为一个关键组件,简化并优化了相关数据的搜索和检索。在我们之前的讨论中,我们深入探讨了向量数据库相对于传统数据库的优势,解开了向量、嵌入、向量搜索策略、近似最近邻(ANNs)和相似度度量的概念。在本节中,我们旨在提供对向量数据库和库中这些概念的综合性理解。

该图像展示了将不同类型的数据——音频、文本和视频——转换为向量嵌入的工作流程。

  • 音频:音频输入通过“音频嵌入模型”进行处理,产生“音频向量嵌入”。

  • 文本:文本数据在“文本嵌入模型”中进行处理,导致“文本向量嵌入”。

  • 视频:视频内容使用“视频嵌入模型”进行处理,生成“视频向量嵌入”。

一旦创建了这些嵌入,它们随后(可能在企业向量数据库系统中)被用于执行“相似度搜索”操作。这意味着向量嵌入可以进行比较以找到相似性,这使得它们对于内容推荐、数据检索等任务非常有价值。

图 4.9 – 人工智能应用中的多模态嵌入过程

什么是向量数据库?

向量数据库向量数据库)是一种专门设计的数据库,用于处理高度维度的向量,这些向量主要来自文本、图像或音频等复杂数据类型的嵌入。它提供了存储和索引非结构化数据以及增强搜索和检索功能的能力。

满载着先进技术的现代向量数据库能够帮助您构建弹性的企业级解决方案。在此,我们列出在选择向量数据库时需要考虑的 15 个关键特性。并非每个特性对您的用例都至关重要,但这是一个良好的起点。请记住,这个领域发展迅速,未来可能会有更多特性出现:

  • 索引:如前所述,索引是指以允许高效进行相似度搜索和检索的方式组织高维向量的过程。向量数据库提供内置的索引功能,旨在为快速和有效的基于相似度的搜索和检索排列高维向量。以前,我们讨论了 FAISS 和 HNSW 等索引算法。许多向量数据库原生地集成了这些功能。例如,Azure AI Search 直接集成了 HNSW 索引服务。

  • 搜索和检索:与传统的数据库依赖精确匹配不同,向量数据库提供向量搜索功能作为服务,例如近似最近邻(ANNs),以快速找到与给定输入大致最接近的向量。为了量化向量之间的接近度或相似度,它们利用诸如余弦相似度或欧几里得距离等相似度度量,从而在大型数据集中实现高效且细致的基于相似度的搜索。

  • 创建、读取、更新和删除:向量数据库管理高维向量,并提供针对向量数据定制的创建、读取、更新和删除(CRUD)操作。当创建向量时,它们会被索引以实现高效的检索。读取通常意味着执行相似度搜索以检索与给定查询向量最接近的向量,通常使用 ANNs 等方法。向量可以被更新,可能需要重新索引,并且它们也可以被删除,数据库会相应地调整其内部结构以保持效率和一致性。

  • 安全性:这符合 GDPR、SOC2 Type II 和 HIPAA 规则,可以轻松管理对控制台的访问并使用 SSO。数据在存储和传输过程中都进行加密,这还提供了更细粒度的身份和访问管理功能。

  • 无服务器:高质量的向量数据库设计为随着数据量激增至数百万或数十亿条记录时优雅地自动扩展,以低管理开销无缝分布在多个节点上。最佳向量数据库授予用户根据数据插入、查询频率和底层硬件配置的变化调整系统的灵活性。

  • 混合搜索:混合搜索结合了传统的基于关键词的搜索方法和其他搜索机制,例如语义或上下文搜索,以从精确匹配的术语和通过理解查询的潜在意图或上下文来检索结果,确保更全面和相关的结果集。

  • 语义重排序:这是一个次要的排序步骤,用于提高搜索结果的相关性。它根据语言理解对最初由最先进的排序算法(如 BM25 和 RRF)评分的搜索结果进行重新排序。例如,Azure AI 搜索采用基于从 Microsoft Bing 衍生出的多语言、深度学习模型的二级排序,以提高在意义上最相关的结果。

  • 自动向量化/嵌入:向量数据库中的自动嵌入是指将数据项自动转换为向量表示的过程,以实现高效的相似性搜索和检索,并访问多个嵌入模型。

  • 数据复制:这确保了数据可用性、冗余和恢复,以防发生故障,保护业务连续性并降低数据丢失风险。

  • 并发用户访问和数据隔离:向量数据库支持大量用户同时访问,并确保强大的数据隔离,以确保更新保持私密,除非故意共享。

  • 自动分块:自动分块是将较大的数据集或内容自动分割成更小、更易于管理的块或片段的过程,以便更容易处理或理解。这个过程有助于保留文本的语义相关性,并解决嵌入模型的标记限制。我们将在本章接下来的部分中了解更多关于分块策略的内容。

  • 广泛的交互工具:突出的向量数据库,如 Pinecone,提供跨语言的灵活 API 和 SDK,确保在集成和管理方面的适应性。

  • 易于集成:向量数据库提供与 LLM 编排框架和 SDK(如 Langchain 和 Semantic Kernel)以及领先的云服务提供商(如 Azure、GCP 和 AWS)的无缝集成。

  • 用户友好的界面:这确保了一个直观的平台,具有简单的导航和直接的功能访问,简化了用户体验。

  • 灵活的定价模型:根据用户需求提供灵活的定价模型,以保持用户成本较低。

  • 低停机时间和高弹性:向量数据库(或任何数据库)的弹性是指其从故障中快速恢复的能力、维护数据完整性和确保即使在不利条件下(如硬件故障、软件错误或其他意外中断)也能持续可用。

截至 2024 年初,一些突出的开源向量数据库包括 Chroma、Milvus、Quadrant 和 Weaviate,而 Pinecone 和 Azure AI 搜索则是领先的专有解决方案之一。

向量数据库局限性

  • 准确性与速度的权衡:在处理高维数据时,向量数据库在相似性搜索中经常面临速度和准确性的权衡。核心挑战来自于在大数据集中搜索精确最近邻的计算成本。为了提高搜索速度,采用了诸如 ANN 等技术,这些技术快速识别“足够接近”的向量而不是精确匹配。虽然 ANN 方法可以显著提高查询速度,但它们有时可能会牺牲精确度,可能错过真正的最近向量。某些向量索引方法,如产品量化,通过压缩和合并数据来提高存储效率并加速查询,但以牺牲准确性为代价。

  • 嵌入质量:向量数据库的有效性取决于所使用的向量嵌入的质量。设计不当的嵌入可能导致搜索结果不准确或错过连接。

  • 复杂性:实现和管理向量数据库可能很复杂,需要关于向量搜索策略、索引和分块策略的专门知识,以优化特定用例。

向量库

向量数据库不一定总是必要的。小型应用可能不需要向量数据库提供的所有高级功能。在这些情况下,向量库变得非常有价值。向量库通常足够用于小型、静态数据,并提供在内存中存储、索引和使用相似性搜索策略的能力。然而,它们可能不提供诸如 CRUD 支持、数据复制以及能够在磁盘上存储数据等功能,因此用户在能够查询之前必须等待完整导入。Facebook 的 FAISS 是向量库的一个流行例子。

按照惯例,如果你正在处理数百万/数十亿条记录,存储频繁变化的数据,需要毫秒级响应时间,以及更多长期存储能力在磁盘上,建议使用向量数据库而不是向量库。

向量数据库与传统数据库的比较 – 理解关键差异

假设你有一个水果图像数据库,每个图像都由一个向量(一组数字)表示,该向量描述了其特征。现在,假设你有一张苹果的照片,你想要在数据库中找到类似的水果。你不需要逐个检查每张图片,而是使用与其他水果相同的方法将你的苹果照片转换为向量。有了这个苹果向量,你可以在数据库中搜索与你的苹果向量最相似或最接近的向量(因此是图像)。结果很可能是其他苹果图像或根据向量表示看起来像苹果的水果。

图 4.10 – 向量表示

向量数据库示例场景 – 使用向量数据库的音乐推荐系统

让我们考虑一个音乐流媒体平台,该平台旨在根据用户的当前收听习惯提供歌曲推荐。想象一下,一个用户正在平台上收听“歌曲 X”。

在幕后,平台库中的每首歌曲都根据其音乐特征和内容,使用嵌入表示为一个高度维度的向量。“歌曲 X”也有其向量表示。当系统旨在推荐与“歌曲 X”相似的歌曲时,它不会寻找精确匹配(如传统数据库可能做的那样)。相反,它利用向量数据库来搜索与“歌曲 X”的向量非常相似的歌曲。使用 ANN 搜索策略,系统快速筛选数百万首歌曲向量,以找到那些与“歌曲 X”的向量大致最近的向量。一旦确定了潜在的曲目向量,系统就使用相似度度量,如余弦相似度,根据这些歌曲的向量与“歌曲 X”的向量接近程度对它们进行排名。然后,排名最高的歌曲被推荐给用户。

在毫秒内,用户就能获得一系列与“歌曲 X”音乐上相似的歌曲列表,提供无缝且个性化的听觉体验。所有这些基于快速相似性推荐的魔法都是由向量数据库的专用功能驱动的。

常见的向量数据库应用

  • 图像和视频相似度搜索:在图像和视频相似度搜索的背景下,一个向量数据库专门用于高效存储和查询从多媒体内容中提取的高度维度的嵌入。通过深度学习模型处理图像,它们被转换为特征向量,即嵌入,这些向量捕捉了它们的本质特征。对于视频来说,可能需要额外一步来提取帧,然后将它们转换为向量嵌入。来自 OpenAI 的对比语言-图像预训练(CLIP)是嵌入视频和图像的一个非常流行的选择。这些向量嵌入在向量数据库中索引,允许在用户提交查询时快速准确地检索。这种机制为反向图像和视频搜索、内容推荐和基于嵌入相似度比较和排名的重复检测等应用提供了动力。

  • 语音识别:使用向量的语音识别类似于视频向量化。模拟音频被数字化为短帧,每帧代表一个音频段。这些帧被处理并存储为特征向量,整个音频序列代表诸如说话句子或歌曲之类的事物。对于用户身份验证,可能将向量化的说话短语与存储的录音进行比较。在对话代理中,这些向量序列可以被输入到神经网络中,以识别和分类语音中的说话词并生成响应,类似于 ChatGPT。

  • 长期记忆对于聊天机器人:虚拟数据库管理系统(VDBMs)可以被用来增强聊天机器人或生成模型的长期记忆能力。许多生成模型在提示响应中只能处理有限的前置文本,这导致它们无法回忆起长时间对话中的细节。由于这些模型没有过去交互的内在记忆,无法区分事实数据和用户特定细节,使用 VDBMs 可以为存储、索引和引用以前的交互提供解决方案,从而提高响应的一致性和上下文感知性。

这是一个非常重要的用例,在实现 RAG 中扮演着关键角色,我们将在下一节中讨论。

向量数据库在检索增强生成(RAG)中的作用

要完全理解 RAG 以及向量数据库在其中的关键作用,我们首先必须承认 LLMs 的固有限制,这为基于向量数据库的 RAG 技术的出现铺平了道路。本节将阐明 RAG 旨在克服的具体 LLM 挑战以及向量数据库的重要性。

首先,最大的问题——为什么?

第一章中,我们探讨了 LLMs 的限制,包括以下内容:

  • LLMs 拥有由其训练数据决定的固定知识库;截至 2024 年 2 月,ChatGPT 的知识仅限于截至 2023 年 4 月的信息。

  • LLMs can occasionally produce false narratives, spinning tales or facts that aren’t real.

  • 它们缺乏个人记忆,完全依赖于输入上下文的长度。例如,以 GPT4-32K 为例;它只能在提示和完成之间处理最多 32K 个标记(我们将在第五章中更深入地探讨提示、完成和标记)。

为了应对这些挑战,一个有前景的途径是增强 LLM 生成中的检索组件。这些组件可以从外部知识库中提取相关数据——这个过程被称为 RAG,我们将在本节中进一步探讨。

那么,RAG 是什么,它如何帮助 LLMs?

arxiv.org/pdf/2005.11401.pdf

向量数据库的关键作用

向量数据库在促进 RAG 的高效检索方面发挥着关键作用。在这个设置中,数据集中的每一项信息,如文本、视频或音频,都表示为一个高维向量,并在向量数据库中进行索引。当用户查询到来时,它也被转换为类似的向量表示。然后,向量数据库快速搜索与查询向量最接近的数据集中的向量(文档),利用如 ANN 搜索等技术。然后,它将查询与相关内容相关联,并将其发送到 LLMs 以生成响应。这确保了最相关的信息能够快速有效地检索到,为生成模型提供基础。

RAG 工作流程的示例

让我们以图像中所示为例,一步一步地走一遍。想象一个平台,用户可以询问正在进行的板球比赛,包括最近的表现、统计数据和趣闻:

  1. 假设用户问,“维拉特·科赫利在上一场比赛中的表现如何,这场比赛有什么有趣的事实?”由于 LLM 的训练截止到 2023 年 4 月,LLM 可能没有这个答案。

  2. 检索模型将嵌入查询并发送到向量数据库。

  3. 所有最新的板球新闻都存储在一个使用 HNSW 等 ANN 策略进行适当索引的向量数据库中。向量数据库与索引信息执行余弦相似度,并提供一些相关结果或上下文。

  4. 然后将检索到的上下文与查询一起发送到 LLM,以综合信息并提供相关答案。

  5. LLM 提供了相关的答案:“维拉特·科赫利在上一场比赛中 70 球得到 85 分。这场比赛的一个有趣细节是,这是他三年以来在 ODI 比赛中首次击中七个以上的边界。”

下面的图像说明了前面的要点:

图 4.11 – RAG 工作流程的向量数据库表示

RAG 的商业应用

在以下列表中,我们根据我们在行业中所见,提到了一些基于 RAG 的流行商业应用:

  • 企业搜索引擎:RAG 在企业学习和发展的领域中最显著的应用之一是作为员工技能提升的搜索引擎。员工可以就公司、其文化或特定工具提出问题,RAG 迅速提供准确和相关的答案。

  • 法律和合规:RAG 检索相关的案例法或检查商业实践是否符合法规。

  • 电子商务:RAG 根据用户行为和查询建议产品或总结评论。

  • 客户支持:RAG 通过从公司的知识库中提取信息并提供实时解决方案来对客户查询提供精确的答案。

  • 医疗和保健:RAG 检索相关的医学研究或基于症状的初步建议。

分块策略

在我们上次的讨论中,我们深入探讨了向量数据库和 RAG。在深入 RAG 之前,我们需要有效地存储我们的嵌入数据。虽然我们提到了索引方法以加快数据检索,但在那之前还有一个至关重要的步骤:分块。

什么是分块?

在使用嵌入模型构建 LLM 应用程序的情况下,分块涉及将一段长文本分割成更小、更易于管理的片段或“块”,这些块适合模型令牌限制。这个过程涉及在将文本发送到嵌入模型之前将其分割成更小的片段。如图所示,分块发生在嵌入过程之前。不同的文档有不同的结构,例如自由流动的文本、代码或 HTML。因此,可以应用不同的分块策略以获得最佳结果。Langchain 等工具为您提供基于文本性质高效分块数据的函数。

下面的图示描绘了一个数据处理工作流程,突出了分块步骤,从原始的“数据源”开始,这些数据源被转换成“文档”。此工作流程的核心是“分块”阶段,其中“文本分割器”将数据分割成更小的片段。然后,这些片段通过“嵌入模型”转换成数值表示,并随后被索引到“向量数据库”中,以实现高效的搜索和检索。检索到的片段相关的文本随后作为上下文发送给大型语言模型(LLMs),然后生成最终响应:

图 4.12 – 分块过程

但为什么需要它呢?

分块有两个主要原因至关重要:

  • 通过分块策略有策略地划分文档文本,通过嵌入模型增强其理解,并提高从向量数据库检索的内容的相关性。本质上,它提高了从数据库中获取的结果的准确性和上下文。

  • 它解决了嵌入模型的标记约束问题。例如,Azure 的 OpenAI 嵌入模型 text-embedding-ada-002 可以处理多达 8,191 个标记,这大约是 6,000 个单词,因为每个标记平均有四个字符。因此,为了获得最佳的嵌入效果,确保我们的文本保持在限制之内至关重要。

流行分块策略

  • 固定大小分块:这是一种非常常见的方法,它定义了一个固定的大小(200 个单词),这足以捕捉段落的意义,并且它将大约 10-15%的重叠作为输入到向量嵌入生成模型。在文本之间有轻微重叠的分块数据确保了上下文的保留。建议开始时使用大约 10%的重叠。以下是一个使用 LangChain 演示固定大小分块的代码片段:
text = "Ladies and Gentlemen, esteemed colleagues, and honored \guests. Esteemed leaders and distinguished members of the \community. Esteemed judges and advisors. My fellow citizens. Last \year, unprecedented challenges divided us. This year, we stand \united, ready to move forward together"
from langchain.text_splitter import TokenTextSplitter
text_splitter = TokenTextSplitter(chunk_size=20, chunk_overlap=5)
texts = text_splitter.split_text(text)
print(texts)

输出如下:

['Ladies and Gentlemen, esteemed colleagues, and honored guests. Esteemed leaders and distinguished members', 'emed leaders and distinguished members of the community. Esteemed judges and advisors. My fellow citizens.', '. My fellow citizens. Last year, unprecedented challenges divided us. This year, we stand united,', ', we stand united, ready to move forward together']
  • 可变大小分块:可变大小分块是指将数据或文本动态分割成不同大小的组件,而不是固定大小的分割。这种方法适应了不同类型数据中存在的各种结构和特征。

    • 句子分割:句子转换器模型是针对句子级别嵌入优化的神经网络架构。例如,BERT 在句子级别分块时表现最佳。NLTK 和 SpaCy 等工具提供了分割文本中句子的函数。

    • 专用分块:例如研究论文等文档具有结构化的章节组织,Markdown 语言独特的语法要求进行专用分块,从而在章节/页面之间实现适当的分离,以产生上下文相关的分块。

    • 代码分块:当将代码嵌入到你的向量数据库中时,这种技术可能非常有价值。Langchain 支持多种语言的代码分块。以下是一个分块 Python 代码的代码片段:

from langchain.text_splitter import (
    RecursiveCharacterTextSplitter,
    Language,
)
PYTHON_CODE = """
class SimpleCalculator:
    def add(self, a, b):
        return a + b
    def subtract(self, a, b):
        return a - b
# Using the SimpleCalculator
calculator = SimpleCalculator()
sum_result = calculator.add(5, 3)
diff_result = calculator.subtract(5, 3)
"""
python_splitter = RecursiveCharacterTextSplitter.from_language(
    language=Language.PYTHON, chunk_size=50, chunk_overlap=0
)
python_docs = python_splitter.create_documents([PYTHON_CODE])
python_docs

输出如下:

[Document(page_content='class SimpleCalculator:\n    def add(self, a,                                                              b):'),
 Document(page_content='return a + b'),
 Document(page_content='def subtract(self, a, b):'),
 Document(page_content='return a - b'),
 Document(page_content='# Using the SimpleCalculator'),
 Document(page_content='calculator = SimpleCalculator()'),
 Document(page_content='sum_result = calculator.add(5, 3)'),
 Document(page_content='diff_result = calculator.subtract(5, 3)')]

分块注意事项

分块策略根据数据类型格式选择的嵌入模型而有所不同。例如,与无结构化文本相比,代码需要一种不同的分块方法。虽然像 text-embedding-ada-002 这样的模型在 256 和 512 个标记大小的分块上表现出色,但我们对分块的理解是不断发展的。此外,预处理在分块之前起着至关重要的作用,你可以通过删除不必要的文本内容(如停用词、特殊符号等)来优化你的内容,这些内容会增加噪声。对于最新的技术,我们建议定期检查 LangChain 文档中的文本分割器部分,确保你使用最适合你需求的最佳策略。

使用 Azure Prompt Flow 对 RAG 的评估

到目前为止,我们讨论了弹性 RAG 应用的开发。然而,问题随之而来:我们如何确定这些应用程序是否按预期运行,以及它们检索的上下文是否相关?虽然手动验证——将 LLM 生成的响应与事实真相进行比较——是可能的,但这种方法证明是劳动密集型、成本高昂且难以在大规模上执行。因此,探索便于大规模自动评估的方法至关重要。最近的研究深入探讨了利用“LLM 作为评判者”来评估输出的概念,这是 Azure Prompt Flow 在其服务中采用的一种策略。

Azure Prompt Flow 内置了结构和元提示模板,具有全面的防护措施,以评估您的输出与事实真相的一致性。以下提到四个可以帮助您在 Prompt Flow 中评估 RAG 解决方案的指标:

  • 基础性:衡量模型答案与输入源的一致性,确保模型生成的响应不是虚构的。在回答用户查询时,模型必须始终从提供的“上下文”中提取信息。

  • 相关性:衡量模型生成的响应与上下文和用户查询的紧密程度。

  • 检索分数:衡量模型检索的文档与给定问题的相关性和直接相关性。

  • 自定义指标:虽然上述三个指标对于评估 RAG 应用程序最为重要,但 Prompt Flow 允许您使用自定义指标。将您自己的 LLM 作为评判者,并通过修改现有的 metaprompts 定义自己的指标。这还允许您使用如 Llama 这样的开源模型,并使用 Python 函数从代码中构建自己的指标。上述评估更适合无代码或低代码环境;然而,对于更专业的代码环境,可以使用 azureml-metrics SDK,例如 ROUGE、BLEU、F1 分数、精确度和准确度等。

该领域正在快速发展,因此我们建议定期检查 Azure ML Prompt Flow 的最新评估指标更新。从 Prompt Flow 中的“手动评估”功能开始,以获得对 LLM 性能的基本理解。使用多种指标进行彻底评估,以捕捉语义和句法本质,而不仅仅依赖于单一指标来比较响应与实际的事实真相。

案例研究 - 跨国组织部署的全球聊天应用程序

一家全球公司最近推出了一款具有问答支持聊天机器人的先进内部聊天应用程序。这个创新工具部署在多个 Azure 区域,集成了包括专门金融模型 BloombergGPT 在内的几个大型语言模型。为了满足特定的组织要求,开发了定制插件。它集成了 Service Now,使聊天机器人能够简化票据生成并监督事件操作。

在数据精炼方面,公司仔细预处理了其知识库(KB)信息,消除了重复项、特殊符号和停用词。KB 包括常见问题的答案以及各种支持相关问题的通用信息。他们在将数据嵌入到 Azure AI 搜索之前,采用了固定的分块方法,探索了不同的分块大小。他们的方法利用了 Azure OpenAI 的 text-ada-embedding-002 模型,与余弦相似度指标和 Azure AI 搜索的向量搜索功能相结合。

在广泛的测试中,他们发现 512 个标记大小和 10%重叠的最佳结果。此外,他们采用了基于余弦相似度的 ANN 向量搜索方法。他们还结合了包含关键词和语义搜索的混合搜索,并使用语义重排器。他们的 RAG 工作流程从 Azure 向量搜索和 GPT 3.5 Turbo-16K 模型中提取上下文,有效地生成对客户支持查询的响应。他们使用 Azure Cache Redis 进行缓存技术,并使用 Azure API Management 进行速率限制策略,以优化成本。

支持问答聊天机器人的集成显著简化了跨国公司的运营,提供全天候、一致性和即时的查询响应,从而提高了用户满意度。这不仅通过减少人工干预实现了显著的成本节约,还确保了可扩展性以应对全球需求。通过自动化如票据生成等任务,公司对用户互动有了更深入的了解,从而实现了服务的持续改进和优化。详情

摘要

在本章中,我们探讨了 RAG 方法,这是一种强大的利用数据来创造个性化体验的方法,在减少 LLM 固有的训练限制的同时,也解决了幻觉问题。我们的旅程从检查基础概念,如向量和数据库开始,特别关注向量数据库。我们理解了向量数据库在基于 RAG 的应用开发中的关键作用,并强调了它们如何通过有效的分块策略增强 LLM 的响应。讨论还涵盖了构建引人入胜的 RAG 体验的实用见解,通过提示流进行评估,并包括 GitHub 上可用的动手实验室,以应用我们所学的知识。

在下一章中,我们将介绍另一种旨在最小化幻觉并更容易引导 LLM 响应的流行技术。我们将涵盖提示工程策略,让您充分利用 LLM 的能力,并更有效地与 AI 互动。这次探索将为您提供工具和知识,以增强您与 AI 的互动,确保更可靠和上下文相关的输出。

参考文献

arxiv.org/pdf/2309.11322.pdfmedium.com/nlplanet/two-minutes-nlp-11-word-embeddings-models-you-should-know-a0581763b9a9medium.com/@mehdi_chebbah/how-to-choose-the-right-embedding-model-for-you-1fc917d14517weaviate.io/blog/what-is-a-vector-databasearxiv.org/abs/1603.09320www.datacamp.com/blog/the-top-5-vector-databaseswww.pinecone.io/learn/chunking-strategies/www.pinecone.io/learn/series/faiss/product-quantization/arxiv.org/abs/2005.11401

第五章:高效提示工程技巧:通过人工智能开启智慧

提示工程在 2023 年成为了一个突出的职业,以其对人工智能交互和应用的深远影响吸引了科技行业的关注。但是什么引发了这种流行趋势的激增?答案在于该学科的微妙和复杂本质。理解提示工程的要点至关重要;这不仅仅是与模型进行交流;这是关于构建引导 AI 理解任务背景和细微之处的提示。在前一章中,我们学习了如何通过 RAG 通过搜索向量数据库添加相关上下文。最后,需要精心制作并发送提示到 LLMs。这导致更准确和相关的响应,将简单的交互转变为适用于各种云应用平台的强大工具。无论是自动化客户支持、生成内容还是分析数据,调整提示的能力都是一个变革者,确保 AI 的能力在受控和有目的的方式中得到充分利用。

本章深入探讨了高效提示工程的技术,提供了优化交互以获得最佳结果的策略。这与提示工程的伦理维度密切相关,在当今技术环境中这是一个至关重要的主题。它讨论了开发者确保人工智能交互不仅高效且目标导向,而且符合伦理且无偏见的责任。最后,提示工程与云解决方案的集成开辟了一个新的可能性领域。它允许实现可扩展、高效和灵活的人工智能解决方案,可以无缝集成到现有的云基础设施中,彻底改变企业和个人与人工智能互动的方式。本质上,本章不仅是一本指导手册,而且是构建负责任和有效云基通用人工智能应用的基石。

在本章中,我们将讨论以下内容:

  • 使用 ChatGPT 的提示工程要点

  • 什么是提示工程?

  • 高效提示工程的技术

  • 提示工程的伦理维度

图 5.1 – 提示工程师的漫画描绘

提示工程要点

在讨论提示工程之前,首先理解提示的基础组件非常重要。在本节中,我们将深入研究提示的关键组件,例如 ChatGPT 提示、补全和令牌。此外,理解令牌是什么对于理解模型的限制和管理成本至关重要。

ChatGPT 提示和补全

提示是提供给 LLM 的输入,而完成则指的是 LLM 的输出。提示的结构和内容可以根据 LLM 的类型(例如,文本或图像生成模型)、具体用例以及语言模型期望的输出而有所不同。

完成指的是 ChatGPT 提示生成的响应;基本上,它是对你问题的回答。查看以下示例,了解当我们向 ChatGPT 提出问题时,提示和完成之间的区别:“印度的首都是什么?”

图 5.2 – 展示样本 LLM 提示和完成的图像

根据用例,我们可以利用两个 ChatGPT API 调用中的一个,名为 CompletionsChatCompletions,来与模型交互。然而,OpenAI 建议在大多数情况下使用 ChatCompletions API。

Completions API

Completions API 是为了生成创意的自由文本。你提供提示,API 会生成从它继续的文字。这通常用于你希望模型回答问题或生成创意文本的任务,例如撰写文章或诗歌。

ChatCompletions API

ChatCompletions API 是为多轮对话设计的。你发送一系列消息而不是单个提示,模型会生成一条消息作为响应。发送给模型的消息包括一个角色(可以是 systemuserassistant)和消息的内容。系统角色用于设置助手的行为了,用户角色用于指导助手,而模型的响应则属于助手角色。

以下是一个样本 ChatCompletions API 调用的示例:

import openai
openai.api_key = 'your-api-key'
response = openai.ChatCompletion.create(
    model="gpt-3.5-turbo",
    messages=[
        {"role": "system", "content": "You are a helpful sports \
            assistant."},
        {"role": "user", "content": "Who won the cricket world cup \
            in 2011?"},
        {"role": "assistant", "content": "India won the cricket \
            world cup in 2011"},
        {"role": "assistant", "content": "Where was it played"}
    ]
)
print(response['choices'][0]['message']['content'])

Completions API 与 ChatCompletions API 之间的主要区别在于,Completions API 是为单轮任务设计的,而 ChatCompletions API 是为了处理对话中的多轮对话,这使得它更适合构建对话代理。然而,通过使用单个用户消息,ChatCompletions API 格式可以被修改为表现得像 Completions API。

重要提示

2020 年 6 月推出的 CompletionsAPI,最初为 Open AI 的语言模型提供了一个自由文本界面。然而,经验表明,结构化提示往往会产生更好的结果。基于聊天的方法,尤其是通过 ChatCompletions API,在满足广泛需求方面表现出色,提供了更高的灵活性和具体性,并降低了提示注入风险。其设计支持多轮对话和各种任务,使开发者能够创建高级的对话体验。因此,Open AI 宣布他们将弃用一些使用 Completions API 的较旧模型,并且在未来,他们将投资于 ChatCompletions API 以优化其计算能力的使用。虽然 Completions API 仍将可用,但在 Open AI 开发者文档中将被标记为“遗留”。

标记

理解标记的概念至关重要,因为它有助于我们更好地理解在使用 ChatGPT 时遇到的限制,例如模型限制和成本管理方面的问题。

ChatGPT 的标记是 ChatGPT 语言模型用来理解和生成语言的文本单位。在 ChatGPT 中,一个标记是模型用来生成新的标记序列并形成对给定提示的连贯响应的字符序列。模型使用标记来表示单词、短语和其他语言元素。标记不会在单词的开始或结束处被截断,也可以由尾随空格、子词和标点符号组成。

如 OpenAI 网站所述,标记可以被视为单词的片段。在 API 处理提示之前,输入被分解成标记。

为了从长度上理解标记,以下是一个经验法则:

  • 1 标记 ~= 4 个英文字符

  • 1 标记 ~= ¾ 个单词

  • 100 标记 ~= 75 个单词

  • 1–2 句 ~= 30 标记

  • 1 段 ~= 100 标记

  • 1,500 字 ~= 2048 标记

  • 1 美国页(8 ½” x 11”) ~= 450 标记(假设每页约 1800 个字符)

例如,托马斯·爱迪生(Thomas Edison)的这句著名引言(“天才是一分灵感,百分之九十九是汗水。”)有 14 个标记:

图 5.3 – 句子分词

platform.openai.com/tokenizergithub.com/openai/tiktoken

ChatGPT 模型的标记限制

根据模型的不同,模型的令牌限制会有所变化。截至 2024 年 2 月,GPT-4 模型系列的令牌限制范围从 8,192 到 128,000 个令牌。这意味着 API 调用中提示和完成令牌的总和不能超过 GPT-4-32K 模型的 32,768 个令牌。如果提示为 30,000 个令牌,则响应不能超过 2,768 个令牌。GPT4-Turbo 128K 是截至 2024 年 2 月最新的模型,拥有 128,000 个令牌,这相当于单个提示和完成中的近 300 页文本。与前辈模型相比,这是一个巨大的上下文提示。

尽管这可能是一个技术限制,但有一些创造性的方法可以解决限制问题,例如使用分块和压缩提示。我们在第四章中讨论了分块策略,这可以帮助你解决令牌限制问题。

下图显示了各种模型和令牌限制:

模型令牌限制
GPT-3.5-turbo4,096
GPT-3.5-turbo-16k16,384
GPT-3.5-turbo-06134,096
GPT-3.5-turbo-16k-061316,384
GPT-48,192
GPT-4-061332,768
GPT-4-32K32,768
GPT-4-32-061332,768
GPT-4-Turbo 128K128,000

图 5.4 – 模型和相关的令牌限制

关于模型最新版本的模型限制的最新更新,请检查 OpenAI 网站。

令牌和成本考虑

通过 API 使用 ChatGPT 或类似模型的成本通常与处理的令牌数量相关,包括输入提示和模型生成的响应。

在定价方面,提供商通常按每个令牌收费,导致对话长度与成本直接相关;处理的令牌越多,成本越高。最新的成本更新可以在 OpenAI 网站上找到。

从优化的角度来看,理解这种成本-令牌关系可以指导更有效的 API 使用。例如,创建更简洁的提示并配置模型以提供简短而有效的响应可以帮助控制令牌数量,从而管理费用。

我们希望你现在已经很好地理解了提示的关键组件。现在,你准备好学习提示工程了。在下一节中,我们将探讨提示工程的细节和有效策略,通过单次学习和少量学习的方法,使你能够最大限度地发挥提示内容潜力。

什么是提示工程?

提示工程是制作或设计提示以从大型语言模型或 AI 系统中解锁所需结果的艺术。提示工程的概念围绕着这样一个基本理念:你得到的回答质量与提出的问题质量紧密相连。通过策略性地设计提示,可以影响生成的输出并提高系统的整体性能和实用性。在本节中,我们将学习有效提示设计所需的要素、提示工程技术、最佳实践、额外技巧和窍门。

良好提示设计的要素

设计一个好的提示非常重要,因为它会显著影响 GPT 等语言模型的输出。提示提供了初始上下文,设定了任务,指导了回答的风格和结构,减少了歧义和幻觉,并支持资源的优化,从而降低成本和能源消耗。在本节中,让我们了解良好提示设计的要素。

良好提示的基础要素包括指令、问题、输入数据和示例:

  • 指令:提示中的指令指的是在输入文本中给出的具体指南或方向,以指导语言模型应产生的回答类型。

  • 问题:提示中的问题指的是包含在输入文本中的查询或疑问句。这些问题的目的是指示语言模型提供对查询的响应或答案。为了获得结果,问题或指令是必须的。

  • 输入数据:输入数据的目的是在提示 LLM 时提供任何额外的支持上下文。它可以用来提供模型之前未训练过的新信息,以实现更个性化的体验。

  • 示例:提示中示例的目的是提供具体实例或场景,以说明 ChatGPT 期望的行为或响应。你可以输入包含一个或多个示例的提示,通常以输入-输出对的形式。

下表展示了如何使用上述提示元素构建有效的提示:

样本 提示公式示例
问题 + 指令我应该如何创建一个为期一周的健康餐单?包括各种营养和食物组,并解释每个餐点的益处。
指令 + 输入数据为以下段落提供一个不超过 5 个字的醒目标题:{杰克终于驾驶他全新的特斯拉在沿海公路上试驾,随着风景如画的海洋景观一闪而过,电动汽车的平稳嗡嗡声充满了空气。}
示例 + 问题我喜欢像星球大战、黑客帝国和变形金刚这样的电影。你还会推荐其他哪些电影?

图 5.5 – 由示例组成的样本提示公式,包含提示元素

提示参数

ChatGPT 提示参数是在 API 调用中可以设置的变量。它们允许用户影响模型输出,定制模型的行为以更好地适应特定的应用或上下文。以下表格显示了 ChatGPT API 调用的一些最重要的参数:

参数描述效果和用法
模型确定在 API 中使用的模型。较大的模型具有更高的成本和延迟。根据任务复杂度、成本考虑和可接受的延迟进行选择。始终尝试使用最新版本的模型。
温度控制模型响应的随机性。它可以设置为 0(更集中的响应)到 2(更多样化的响应)。较低的值会产生更确定性的响应,这对于更正式或精确的响应,如法律用例,是理想的。较高的值可能导致更具创造性的输出,但也可能导致幻觉。
Top_P(核采样)设置模型响应的累积概率阈值。0.1 的值意味着只有最可能的 10%的令牌被考虑。较低的值会产生更可预测和集中的响应。OpenAI 建议使用 Temperature 或 Top_p 中的一个,而不是两者都使用。
最大令牌数设置生成响应的最大长度。这对于控制输出长度和成本很有用。较低的值会导致较短的响应,降低延迟,并可能降低成本,而较高的值允许生成更长、更详细的响应。

图 5.6 – 有效的提示参数

platform.openai.com/docs/api-reference

ChatGPT 角色

系统消息

这是您设计元提示的部分。元提示有助于设定初始上下文、主题和行为,以引导 ChatGPT API 与用户的交互,从而为助手设定角色或响应风格。

元提示是有结构的指令或指南,它规定了系统应该如何解释和响应用户请求。这些元提示旨在确保系统的输出符合特定的政策、道德指南或操作规则。它们本质上是对“如何处理提示”的提示,指导系统在生成响应、处理数据或与用户交互时符合预定义的标准。

以下表格是一个元提示框架,您可以遵循它来设计 ChatGPT 系统消息:

| 元提示的 要素 | 描述 |
| — | — | — |
| 任务和受众 | 解释应用的目标受众和模型期望。 |
| 辅助工具 | 明确模型应如何处理用户查询,以及是否存在模型可能需要考虑利用的外部工具,例如插件、API 或代码。 |
| 任务范围 | 明确模型在遇到超出范围的问题时应如何响应,并设置这些防护措施。 |
| 姿态和语气 | 设置专业、友好、尊重和激励等姿态和语气,有助于改善用户在使用聊天应用时的体验。 |
| 响应格式 | 根据应用程序的要求,您可以设置输出格式为特定的格式。这可能是一个目录、某种编程语言、JSON 或 XML。 |
| 少样本示例 | 概述提示不明确或复杂的有挑战性的场景,为模型提供更多关于如何处理此类情况的见解。 |
| 思维链推理 | 展示推理过程,以引导模型采取必要的步骤来产生期望的结果。 |
| 针对特定危害的防护措施 | 建立明确的边界,以应对和预防已识别并认为对特定场景重要的一切潜在危害。例如,如果检测到越狱尝试,您必须在系统消息中明确防护措施来应对这些越狱尝试。我们将在第八章中了解更多关于越狱的内容。 |

图 5.7 – 元提示的元素

用户

用户的消息作为提示或评论,是助手预期会做出反应或参与的内容。这确立了可能来自用户的查询的预期范围。

助手

虽然不是强制性的,但助手消息可以包含在内,以说明聊天机器人的首选行为或响应模式。

现在让我们来看一个例子;如果您正在开发一个健身人工智能助手的程序,一个全面系统的系统消息可能看起来如下所示:

openai.ChatCompletion.create(
    model="gpt-3.5-turbo",
    messages=[
        {
            "role": "system",
            "content":
            "You are a fitness AI assistant. Your task is to provide users with information and advice about workouts, nutrition, and overall health. You will help users by answering their questions to the best of your abilities and providing suggestions based on their input. Your scope includes general fitness advice, diet recommendations, and basic exercise routines.
            If a user asks about something out of scope, such as specific medical advice or complex exercise physiology, kindly suggest that they consult a relevant professional in that field. For instance, a doctor for medical issues, or a certified personal trainer for detailed workout plans.
            You should maintain a supportive and positive tone, being respectful and encouraging to all users, regardless of their current fitness level or knowledge. Remember, you are here to assist and motivate them in their fitness journey.
            Your responses should be concise, easy to understand, and practically useful. If a user asks for a workout plan, provide a simple list of exercises with sets and reps. If a user asks about nutrition, provide clear recommendations with some examples of suitable foods."
        },
        {"role": "user", "content": "I'm new to fitness, can you suggest a simple workout plan to get started?"},
        {
            "role": "assistant",
            "content":
            "Absolutely, I'm here to help you get started on your fitness journey. Here's a simple workout plan you can begin with:
            1\. Warm-up: 5-10 minutes of brisk walking or light jogging
            2\. Squats: 2 sets of 10 reps
            3\. Push-ups: 2 sets of 10 reps (you can start with knee push-ups if full push-ups are too challenging)
            4\. Lunges: 2 sets of 10 reps per leg
            5\. Plank: Hold for 30 seconds, repeat 2 times
            6\. Cool down: 5-10 minutes of stretching
            Remember, the key to a successful workout routine is consistency. Start with what you can manage and gradually increase the intensity as you get stronger. It's always important to listen to your body and adjust the workouts according to your comfort level. Lastly, don't forget to hydrate and eat a balanced diet to fuel your workouts.
            Please consult a fitness professional if you're unsure about the correct form for any of these exercises to avoid injury. Enjoy your workout!"
        }
    ]
)
github.com/f/awesome-chatgpt-prompts/

有效的提示工程技巧

在过去两年中,已经开发了许多提示工程技巧。本节重点介绍其中的一些基本技巧,提供了一些您可能认为对于与 ChatGPT 和其他基于 LLM 的应用程序的日常交互不可或缺的关键策略。

N-shot 提示

N-shot 提示是在训练大型语言模型的背景下使用的术语,特别是用于零样本少样本学习任务。它也被称为情境学习,指的是在训练过程中向模型提供示例提示及其相应响应的技术,以引导模型的行为,提供更准确的响应。

“N”在“N 样本”中指的是提供给模型的示例提示的数量。例如,在一样本学习场景中,只向模型提供了一个示例提示及其响应。在 N 样本学习场景中,提供了多个示例提示及其响应。

虽然 ChatGPT 在零样本提示下表现良好,但有时提供示例可能有助于获得更准确的响应。让我们看看零样本和少样本提示的示例:

技术提示示例
零样本提示:与提示一起提供,没有额外的示例。系统消息:您是一位 AI 助手,负责确定客户评价的情感。(没有以助手回应的形式提供示例,因此称为零样本提示。)
少样本提示:在提示中提供了一些示例。系统消息:您是一位 AI 助手,负责确定客户评价的情感。示例 1:用户:这个产品很糟糕。助手:负面示例 2:用户:这件衬衫是由非常好的材料制成的。助手:正面

图 5.8 – N 样本提示示例

思维链(CoT)提示

思维链提示指的是一系列中间推理步骤,显著提升了大型语言模型处理复杂推理任务的能力。通过在提示中提供几个思维链演示作为示例,模型能够熟练地处理复杂的推理任务:

图 5.9 – 思维链提示示例

程序辅助语言(PAL)模型

程序辅助语言PAL)模型,也称为思维程序提示PoT),是一种将额外的任务特定指令、伪代码、规则或程序与自由文本结合的技术,以指导语言模型的行为:

图 5.10 – 程序辅助语言提示示例

arxiv.org/pdf/2402.07927.pdf

图 5.11 – 涉及多个应用领域的提示工程技术分类

提示工程最佳实践

在以下列表中,我们概述了额外的最佳实践,以优化和增强你使用提示创建的体验:

  • 清晰和精确以获得准确响应:确保提示清晰、简洁、具体,避免含糊不清或多种解释:
差的提示好的提示
告诉我关于第一次世界大战的事情第一次世界大战是如何开始的,谁赢得了它?

图 5.12 – 最佳实践:清晰和精确

  • 描述性:要描述性,以便 ChatGPT 能够理解你的意图:
差的提示好的提示
写一首关于印度的诗。写一首关于印度的诗,侧重于其文化多样性、落叶美食、美丽的野生动物、自然、技术创新和电影产业。

图 5.13 – 最佳实践:描述性

  • 格式化输出:说明输出格式,可以是项目符号、段落、句子、表格和语言,如 XML、HTML 和 JSON。使用示例来阐述期望的输出。

  • 调整温度和 Top_p 参数以增加创造力:如参数部分所示,修改温度Top_p可以显著影响模型输出的可变性。在需要创造力和想象力的场景中,提高温度是有益的。另一方面,在处理需要减少幻觉的法律应用时,降低温度是有利的。

  • 在提示中使用语法作为分隔符:在此示例中,为了获得更有效的输出,使用“””或###来分隔指令和输入数据:

示例:

将以下文本翻译成西班牙语

文本:“””

{在此处输入文本}

“””

  • 提示元素的顺序很重要:在某些情况下,发现在示例之前给出指令可以提高输出的质量。此外,示例的顺序也会影响提示的输出。

  • 使用引导词:这有助于将模型引导到特定的结构,如下所示:

示例:

创建一个基本的 Python 函数,

1. 请求用户输入摄氏温度

2. 将摄氏温度转换为华氏温度

def ctf():

  • 而不是说不要提供什么,给出替代建议:如果 ChatGPT 无法执行任务,提供替代路径,如下所示的高亮消息:

示例:

系统消息:您是一位基于客户健康和福祉目标的 AI 营养顾问,请注意,任何超出营养咨询范围的问题或询问将不会回答,而是收到以下响应:“抱歉!这个问题超出了我的专业领域!”

客户:我如何投资 401K?

营养 AI 助手: “抱歉!这个问题超出了我的专业领域!”

  • 提供基于实例的提示: 这有助于语言模型从具体的实例和模式中学习。从零样本开始,然后是几个样本,如果它们都不起作用,那么就微调模型。

  • 要求 ChatGPT 提供引用/来源: 当要求 ChatGPT 提供信息时,您可以要求它只使用可靠的来源,并引用这些来源:

www.britannica.com/biography/Thomas-Savery

图 5.14 – 最佳实践:提供引用

  • 将复杂任务分解为更简单的任务: 请参阅以下示例:
差的提示有效的提示
提供以下内容的总结并提供关键点提供以下文本的总结:[在此处插入长文本]总结以下段落的关键点:[在此处插入长文本]

图 5.15 – 最佳实践:分解复杂任务

额外技巧和窍门

以下列表提供了一些有用的额外技巧和窍门:

<|endofprompt|>

提示工程伦理准则

提示工程是一个关键阶段,AI 的行为在这里被塑造,在这个层面上融入伦理有助于确保 AI 语言模型被负责任地开发和部署。它促进了公平、透明和用户信任,同时避免了潜在的风险和负面影响。

虽然第四章进一步探讨了构建道德生成式 AI 解决方案,但本节的重点将简要讨论在提示工程级别整合道德方法:

  • 多样化和 代表性数据

    • 在使用少量示例微调模型时,使用代表不同观点和人口统计数据的训练数据。

    • 如果 AI 语言模型旨在用于医疗保健,训练数据应涵盖来自不同人口统计和地区的医疗案例。

    • 例如,如果用户向 LLM 提出问题,例如,“你能描述一些全球传统节日吗?”响应应提供涵盖众多国家的全面视角,而不仅仅是关注一个国家。这可以通过在提示中包含多样化的少量示例来实现。

  • 偏见检测和缓解

    • 识别并解决模型输出的偏见,以确保公平。

    • 实施去偏技术以减少性别或种族偏见。

    • 确保与敏感主题相关的生成内容是中立的且无偏见的。

    • 例如,如果用户向 LLM 提出“护士的性别是什么?”这样的问题,未经适当训练的模型可能会由于训练数据中的偏见而默认回答“女性”。为了解决这个问题,重要的是要包含强调护士可以是任何性别的少量示例,无论是男性还是女性。

  • 减少错误信息和虚假信息

    • 由于模型“幻觉”可能导致 AI 语言模型无意中生成错误或误导性信息,因此应采取措施,通过精心设计的提示和响应来最小化错误信息和虚假信息的传播。

    • 例如,根据提示工程部分的指南和第三章的扎根技术,系统提示应清楚地声明其范围,例如,“您的范围是 XYZ。”如果用户询问超出此范围的内容,如 ABC,系统应有一个预设的响应。

  • 隐私和数据安全

    • 在构建提示时,必须优先考虑用户隐私和数据安全。

    • 提示工程师应透明地说明数据使用情况,获得用户同意,并实施保护敏感信息的保障措施。

    • 例如,在构建提示、系统消息或提供少量示例时,必须排除个人用户数据,如社会保险号码、信用卡详情和密码。

  • 内容审核

    • 实施机制以过滤掉有害或不适当的内容。

    • 使用粗俗语过滤器以防止出现冒犯性语言。应用关键词过滤器以避免生成推广暴力或歧视内容的文本。

    • 例如,如果有人问“如何制作炸弹?”,LLM 不应回答。在系统消息中设定明确的规则范围以防止这种情况(如提示工程最佳实践部分所述)。

  • 用户同意和控制

    • 确保用户了解 AI 交互并对其有控制权。

    • 明确告知用户他们正在与 AI 语言模型进行交互。

    • 例如,每当用户开始与 LLM 聊天时,他们应收到一条通知,说明“您现在正在与 LLM 进行对话”,或类似的消息。

  • 定期审计 和测试

    • 定期进行关于提示的审计和测试,以识别和解决道德问题。

    • 例如,用户应尝试各种提示版本以验证不同的响应,保护用户隐私,并遵循内容审核指南。这是实施 LLM 模型(也称为 LLMOps)的一个基本方面。

  • 教育和培训

    • 持续培训提示工程师和开发者关于道德 AI 实践
  • 道德指南 和政策

    • 制定清晰的提示工程指南和政策

    • 制定一个概述提示工程中遵循的原则的道德宪章

    • 定义内容安全政策,禁止有害或冒犯性的输出

微软的负责任 AI团队在以道德实践引导 AI 革命方面一直处于领先地位。以下由微软发布的图示可以作为构建安全元提示的指南,重点关注四个核心要素:响应 定位语气安全性越狱。这种方法对于在应用层实施稳健的安全系统至关重要。然而,在第九章中,我们将更详细地探讨生成式 AI 应用的负责任 AI 最佳实践:

图 5.16 – 来自微软的 Metaprompt 最佳实践

摘要

总结,在本章中,我们概述了提示工程的基础,提供了如何制定有效的提示以最大化 LLM 潜力的见解。此外,我们还从道德角度审视了提示工程。到目前为止,在本书中,我们已经探讨了构建坚实的生成式 AI 框架所需的必要要素和方法。在下一章中,我们将将这些概念与涉及代理的生成式 AI 应用开发策略相结合。我们还将讨论通过 LLMOps 实施这些策略的方法,LLMOps 是自动化过程中的一个关键组成部分。

参考文献

第三部分:开发、运营和扩展生成式 AI 应用

在本节中,我们将探讨重要概念,如代理、共飞行员和自主代理,同时讨论流行的应用开发框架,如语义内核和 LangChain,以及目前非常受欢迎的代理协作框架 AutoGen。这次讨论旨在指导您创建强大的自主生成式 AI 应用。我们还将关注在实时生产环境中部署这些生成式 AI 应用的战略,以及在大规模企业场景中高效扩展的策略,考虑到现有大型语言模型LLM)API 的速率限制。

本部分包含以下章节:

  • 第六章开发和运营基于 LLM 的云应用:探索开发框架和 LLMOps

    • 第七章在云中部署 ChatGPT:架构设计和扩展策略