GPT3:使用大型语言模型构建创新的自然语言处理产品(一)
原文:
zh.annas-archive.org/md5/2e1cd03e3bd6ec89040bbe656cecdba9
译者:飞龙
前言
GPT-3,或称为生成式预训练转换器 3,是由 OpenAI 开发的基于转换器的大型语言模型。它由惊人的 1750 亿参数组成。任何人都可以通过 OpenAI API 访问这个大型语言模型,这是一个简单易用的“文本输入、文本输出”用户界面,不需要任何技术先决条件。这是历史上第一次将像 GPT-3 这样的大型 AI 模型远程托管并提供给普通大众,只需简单的 API 调用。这种新的访问模式称为模型即服务。由于这种前所未有的访问方式,包括本书作者在内的许多人认为 GPT-3 是向人工智能(AI)民主化迈出的第一步。
随着 GPT-3 的推出,构建 AI 应用比以往任何时候都更容易。本书将向您展示如何轻松使用 OpenAI API 入门。此外,我们还将向您介绍利用此工具解决您的用例的创新方法。我们将审视建立在 GPT-3 之上的成功初创企业以及在其产品领域利用它的企业,并研究其发展中的问题和潜在未来趋势。
本书面向所有背景的人,而不仅仅是技术专业人士。如果您是以下人士,本书对您应该很有用:
-
一个希望在 AI 领域获得技能的数据专业人士
-
一位希望在 AI 领域建立下一个大项目的企业家
-
一位企业领袖,希望升级他们的 AI 知识并将其用于推动关键决策
-
一个作家、播客、社交媒体管理员或其他使用语言的创作者,希望利用 GPT-3 的语言能力进行创意工作
-
任何一个 AI 创意,曾经似乎在技术上不可能或者成本过高而被忽略的人
本书的第一部分涵盖了 OpenAI API 的基础知识。在书的第二部分,我们探索了围绕 GPT-3 自然形成的丰富生态系统。
第一章概述了在这些主题中移动所需的上下文和基本定义。在第二章中,我们深入探讨了 API,将其分解为最重要的元素,如引擎和端点,描述了它们的目的以及希望与之更深层次交互的读者的最佳实践。第三章为您的第一个 GPT-3 动力应用提供了一个简单而有趣的配方。
接下来,将焦点转移到令人兴奋的人工智能生态系统,在第四章中,我们采访了一些最成功的基于 GPT-3 的产品和应用的创始人,了解他们在商业规模上与模型互动的经历和挑战。第五章 着眼于企业如何看待 GPT-3 及其采用潜力。我们在第六章讨论了更广泛采用 GPT-3 的问题,如误用和偏见,以及解决这些问题的进展。最后,在第七章 中,我们展望未来,为您介绍 GPT-3 在更广泛的商业生态系统中定位时所带来的最令人兴奋的趋势和可能性。
本书使用的惯例
本书中使用以下排版惯例:
斜体
表示新术语、URL、电子邮件地址、文件名和文件扩展名。
等宽
用于程序清单,以及在段落内引用程序元素,如变量或函数名称、数据库、数据类型、环境变量、语句和关键字。
等宽粗体
显示用户应该直接键入的命令或其他文本。
提示
此元素表示提示或建议。
注意
此元素表示一般注意事项。
致谢
来自 Sandra
我要感谢 Rebecca Novak,她为我们提供了撰写本书的独特机会,以及我的合著者 Shubham,他邀请我与他合作,并在整个过程中始终是一个极具支持和积极性的合作伙伴。
我们的书如果没有我们出色的编辑 Sarah Grey,就不会成为今天的样子,她总是督促我们对读者更具移情力。我还要向我们的技术编辑 Daniel Ibáñez 和 Matteus Tanha 表示深深的感谢,他们帮助我们使书籍在概念上更加坚实,还要感谢 Vladimir Alexeev 和 Natalie Pistunovich,他们为我们提供了很好的技术编辑建议。
感谢在 GPT-3 社区内同意与我们分享他们的经历,并帮助塑造第四章和第五章,并教育我们关于 GPT-3 产品生态系统的以下组织和个人:OpenAI 的 Peter Welinder,Microsoft Azure 的 Dominic Divakaruni 和 Chris Hoder,Algolia 的 Dustin Coates 和 Claire Helme-Guizon,Wing VC 的 Clair Byrd,Viable 的 Daniel Erickson,Fable Studio 的 Frank Carey 和 Edward Saatchi,Stenography 的 Bram Adams,Quickchat 的 Piotr Grudzień,Copysmith 的 Anna Wang 和 Shegun Otulana,AI2SQL 的 Mustafa Ergisi,Bubble 的 Joshua Haas,GitHub 的 Jennie Chow 和 Oege de Moor,以及 Bakz Awan 和 Yannick Kilcher。
我也想感谢我的母亲 Teresa,我的姐姐 Paulina,我的爷爷 Tadeusz,我的表姐 Martyna,以及在我忙于写作时陪伴我的朋友和同事。
来自 Shubham
这本书是 Rebecca Novack 找到我的博客并邀请我讨论在大型语言模型领域写一本独特的书的结果。接下来,我要感谢我的合作者 Sandra,她像一个完美的伙伴一样填补了空白并补充了我的技能。尽管在写这本书时我们面临了许多挑战,但由于 Sandra 能够将即使是最紧张的情况转变为有趣的情景,我们还是玩得很开心。
我很感激能与像 Sarah Grey 这样优秀的编辑一起合作。她在塑造这本书的最终形式上做得很好。编辑后,这本书就像是活过来了一样。还要特别感谢 Nicole Butterfield 在 Rebecca 在书的制作过程中不得不离开后承担责任。
我们的技术编辑 Daniel Ibáñez 和 Matteus Tanha 在给我们关于何时该去何时该走的极好反馈上发挥了至关重要的作用。非常感谢 OpenAI 团队,特别是 Peter Welinder 和 Fraser Kelton,他们在整个旅程中始终是支持和指导的不竭源泉。我还要感谢我们采访过的所有创始人和行业领袖,感谢他们宝贵的时间和宝贵的见解。
感谢我的妈妈 Gayatri,我的爸爸 Suresh,我的哥哥 Saransh,以及在写作过程中一直支持我的所有朋友和同事。另外,还要感谢 Plaksha 大学的教师和创始人们,他们给了我超越常规思维、挑战现状的机会。我在 Plaksha 的 Tech Leaders 计划中的教育和经验使我能够高效地完成这本书。
第一章:大型语言模型时代
“艺术是灵魂与世界碰撞的残渣” #gpt3
“技术现在是现代世界的神话” #gpt3
“革命始于一个问题,但并不以一个答案结束” #gpt3
“大自然用各种各样的方式装饰着这个世界” #gpt3
想象一下醒来时美丽的阳光明媚的早晨。今天是星期一,你知道这个星期会很忙碌。你的公司即将推出一款新的个人生产力应用程序 Taskr,并开始社交媒体宣传,让全世界都知道你们的创新产品。
你本周的主要任务是撰写并发布一系列引人入胜的博客文章。
你开始制作一个待办事项清单:
-
写一篇有关生产力技巧的信息性和有趣的文章,包括 Taskr。保持在五百字以内。
-
创作五个引人入胜的文章标题。
-
选择视觉。
你按下回车键,喝了一口咖啡,看着文章在屏幕上一句一句、一段一段地编织起来。30 秒内,你就有了一篇有意义、高质量的博客文章,是你社交媒体系列的完美开篇。视觉效果有趣且吸引眼球。完成了!你选择了最好的标题,开始发布流程。
这不是一个遥远的、未来的幻想,而是一瞥新现实的可能性,这得益于人工智能的进步。当我们写下这本书时,许多这样的应用正在被创建并向更广泛的受众部署。
GPT-3 是由 OpenAI 创建的尖端语言模型,OpenAI 是人工智能研发的前沿公司。OpenAI 于 2020 年 5 月发布了 GPT-3 的研究论文,随后于 2020 年 6 月通过OpenAI API发布了对 GPT-3 的访问权限。自 GPT-3 发布以来,来自不同背景的人们,包括技术、艺术、文学、营销等领域的人们,已经找到了数百种令人兴奋的模型应用,这些应用有潜力提升我们交流、学习和娱乐的方式。
GPT-3 能够以前所未有的轻松程度执行通用的基于语言的任务,比如生成和分类文本,自由地在不同的文本风格和目的之间移动。它能解决的问题范围广泛。
在这本书中,我们邀请您考虑一下您自己可以用 GPT-3 解决什么问题。我们会向您展示它是什么以及如何使用它,但首先我们想给您一点背景知识。本章的其余部分将讨论这项技术的来源、构建方式、擅长的任务以及与之相关的潜在风险。让我们直接深入讨论自然语言处理(NLP)领域以及大型语言模型(LLMs)和 GPT-3 是如何融入其中的。
自然语言处理:揭开神秘的面纱
自然语言处理 是语言学、计算机科学和人工智能的一个子领域,涉及计算机和人类语言之间的交互。NLP 的目标是构建能够处理人类语言的系统。自然语言 指的是人类相互交流的方式。
NLP 将计算语言学(基于规则的人类语言建模)与机器学习相结合,创建出能够识别上下文并理解自然语言意图的智能机器。机器学习(ML)是人工智能的一个子领域,涉及研究能够从经验中学习并执行任务而无需明确编程的机器。深度学习 是机器学习的一个子集,灵感来自人脑的工作方式。它是一个神经网络,或者说是一个由成千上万个神经元组成的大型网络,它们相互交互以执行具有极小干预的显著复杂任务。
2010 年代见证了深度学习的出现,随着该领域的成熟,出现了由数千甚至数百万个称为人工神经元的简单处理单元组成的密集神经网络的大型语言模型。神经网络成为 NLP 领域的首个重大变革者,通过使复杂的自然语言任务成为可能,这是以前仅在理论上可能的。第二个重大变革者是引入了预训练模型(如 GPT-3),这些模型可以在各种下游任务上进行微调,节省了大量的训练时间。(我们稍后在本章讨论预训练模型。)
NLP 是许多现实世界人工智能应用的核心,例如:
垃圾邮件检测
你的电子邮件收件箱中的垃圾邮件过滤器将一部分收到的邮件分配到垃圾邮件文件夹中,使用 NLP 来评估哪些邮件看起来可疑。
机器翻译
Google Translate、DeepL 和其他机器翻译程序使用 NLP 来评估由不同语言对的人类说话者翻译的数百万句子。
虚拟助手和聊天机器人
世界上所有的 Alexa、Siri、Google Assistant 和客户支持聊天机器人都属于这一类别。它们使用 NLP 来理解、分析和优先处理用户的问题和请求,并快速正确地做出响应。
社交媒体情感分析
市场营销人员收集有关特定品牌、谈话主题和关键词的社交媒体帖子,然后使用 NLP 来分析用户对每个主题的感受,以及个人和集体的感受。这有助于品牌进行客户研究、形象评估和社交动态检测。
文本摘要
对文本进行摘要意味着减少其大小,同时保留关键信息和基本含义。一些日常的文本摘要示例包括新闻标题、电影预告片、新闻简报制作、金融研究、法律合同分析和电子邮件摘要,以及提供新闻订阅、报告和电子邮件的应用程序。
语义搜索
语义搜索利用深度神经网络智能搜索数据。每当您在 Google 上搜索时,您都在与它进行交互。在您想要基于上下文而不是特定关键字搜索时,语义搜索非常有用。
“我们与其他人类的互动方式是通过语言,” Yannic Kilcher说,他是 NLP 领域最受欢迎的 YouTuber 和影响者之一,他补充说,语言是人类相互之间以及与计算机交互的一部分。因此,毫无疑问,NLP 作为一个领域已经成为过去十年里一些最激动人心的人工智能发现和实现的场所。
语言模型:更大更好
语言建模是将概率分配给特定语言文本中的一系列单词的任务。简单的语言模型可以查看一个词,并基于对现有文本序列的统计分析,预测接下来最有可能跟随它的单词(或单词)。要创建一个成功预测单词序列的语言模型,您需要在大量数据集上对其进行训练。
语言模型是自然语言处理应用程序的关键组件。您可以将它们视为统计预测机器,其中您将文本作为输入并获得预测作为输出。您可能已经从智能手机上的自动完成功能熟悉了这一点。例如,如果您键入“good”,自动完成可能会建议“morning”或“luck”。
在 GPT-3 之前,没有通用的语言模型能够在一系列 NLP 任务上表现良好。语言模型被设计为执行一个特定的 NLP 任务,例如文本生成、摘要或分类,使用现有的算法和架构。在本书中,我们将讨论 GPT-3 作为通用语言模型的非凡能力。我们将通过逐个解释“GPT”中的每个字母来开始本章,以显示它代表什么以及构建该模型所涉及的元素。然后,我们将简要介绍该模型的历史以及我们今天看到的序列到序列模型是如何出现的。在那之后,我们将向您介绍 API 访问的重要性以及根据用户需求随时间如何发展。我们建议您在继续阅读其他章节之前注册一个 OpenAI 账户。
生成式预训练变换器:GPT-3
GPT-3 这个名字代表“生成预训练变换器 3”。让我们逐个解释这些术语,以了解 GPT-3 的制作过程。
生成模型
GPT-3 是生成模型,因为它生成文本。生成建模是统计建模的一个分支。它是一种数学近似世界的方法。
我们周围有大量易于获取的信息——无论是在物理世界还是数字世界中。棘手的部分是开发智能模型和算法,可以分析和理解这些数据宝库。生成模型是实现这一目标最有前途的方法之一。
要训练一个模型,你必须准备和预处理一个数据集,这是一组示例,帮助模型学习执行给定任务。通常,数据集是某个特定领域的大量数据:比如数百万张汽车图像,以教会模型汽车是什么,例如。数据集也可以是句子或音频样本的形式。一旦你向模型展示了许多示例,你必须训练它生成类似的数据。
预训练模型
你听说过 10000 小时理论吗?在他的书Outliers中,马尔科姆·格拉德威尔(Malcolm Gladwell)建议,练习任何技能 10000 小时足以使你成为专家。这种“专家”知识体现在你的人脑发展的神经元之间的连接上。实际上,AI 模型也在做类似的事情。
要创建一个表现良好的模型,你需要使用一组特定的变量来训练它,称为参数。确定模型的理想参数的过程称为训练。模型通过连续的训练迭代吸收参数值。
要找到这些理想参数,深度学习模型需要大量时间。训练是一个漫长的过程,根据任务的不同,可能需要从几小时到几个月,并且需要大量的计算能力。能够为其他任务重复使用部分长时间的学习过程将是一个重要的帮助。这就是预训练模型发挥作用的地方。
预训练模型,遵循格拉德威尔的 10000 小时理论,是你首先培养的技能,可以帮助你更快地习得另一种技能。例如,掌握解决数学问题的技能可以帮助你更快地习得解决工程问题的技能。预训练模型是针对更一般的任务进行训练(由你或其他人进行),然后可用于对不同任务进行微调。与从头开始构建模型以解决问题不同,你可以使用在更一般问题上训练过的模型作为起点,并使用经过精心策划的特定数据集在你选择的领域进行更具体的训练。预训练模型可能不是 100%准确,但它可以避免重复造轮子,从而节省时间并提高性能。
在机器学习中,模型是在数据集上训练的。数据样本的大小和类型取决于你想要解决的任务。GPT-3 是在五个数据集的文本语料库上预先训练的:Common Crawl、WebText2、Books1、Books2 和 Wikipedia:
Common Crawl
共同抓取语料库(文本集合)包括了在八年的网络爬虫过程中收集的原始网页数据、元数据和文本数据的大量数据。OpenAI 研究人员使用这个数据集的经过筛选和精心策划的版本。
WebText2
WebText2 是 WebText 数据集的扩展版本,它是由 OpenAI 内部爬取高质量网页而创建的一个语料库。为了对质量进行审核,作者们从 Reddit 上爬取了所有获得至少三个赞(指示其他用户是否发现链接有趣、教育性或只是有趣)的外部链接。WebText2 包含了来自这 4500 万链接的 40GB 文本,超过 800 万个文档。
Books1 和 Books2
Books1 和 Books2 是两个包含数以万计各种主题书籍文本的语料库。
维基百科
维基百科语料库是包括 2019 年 GPT-3 数据集定稿时的众包在线百科全书Wikipedia上的所有英语文章的集合。该数据集大约有580 万篇英语文章。
这个语料库总共包括了近万亿个词。
GPT-3 能够生成和成功处理除了英语以外的其他语言。表 1-1 展示了数据集中的前 10 种语言。
表 1-1. GPT-3 数据集中排名前十的语言
排名 | 语言 | 文档数 | 总文档数的百分比 |
---|---|---|---|
1 | 英语 | 235,987,420 | 93.68882% |
2 | 德语 | 3,014,597 | 1.19682% |
3 | 法语 | 2,568,341 | 1.01965% |
4 | 葡萄牙语 | 1,608,428 | 0.63856% |
5 | 意大利语 | 1,456,350 | 0.57818% |
6 | 西班牙语 | 1,284,045 | 0.50978% |
7 | 荷兰语 | 934,788 | 0.37112% |
8 | 波兰语 | 632,959 | 0.25129% |
9 | 日语 | 619,582 | 0.24598% |
10 | 丹麦语 | 396,477 | 0.15740% |
虽然英语和其他语言之间的差距巨大——英语排名第一,占据数据集的 93%;而德语排名第二,仅占 1%——但是这 1% 足以创建完美的德语文本,包括风格转换和其他任务。其他语言也是如此。
由于 GPT-3 是在广泛而多样的文本语料库上进行预训练的,所以它可以成功地执行令人惊讶的数量的自然语言处理任务,而无需用户提供任何额外的示例数据。
变压器模型
神经网络构成深度学习的核心。它们的名称和结构受到人类大脑的启发,模仿生物神经元相互传递信号的方式。神经网络是一组或一系列协同工作的神经元网络或电路。神经网络的创新可以提高模型在下游任务上的性能,因此 AI 科学家不断致力于为神经网络开发新的架构。其中一项发明彻底改变了我们今天所知的 NLP:Transformer。Transformer是一个机器学习模型,它一次性处理一个文本序列(而不是一个词),并且具有强大的机制来理解单词之间的关联。
序列到序列模型
Google 和多伦多大学的研究人员在 2017 年的一篇论文中介绍了 Transformer 模型的概念:
我们提出了一种新的简单网络架构,Transformer,完全基于注意力机制,完全摒弃了循环和卷积。在两个机器翻译任务的实验中,这些模型在质量上表现更优秀,同时更易于并行化,并且训练时间显著缩短。^(2)
Transformer 模型的骨架是序列到序列的架构。序列到序列(Seq2Seq)将给定的元素序列,例如句子中的单词,转换为另一个序列,例如另一种语言中的句子;句子是依赖序列的,因为单词顺序对于理解句子至关重要。
Seq2Seq 模型特别擅长翻译,其中一个语言的单词序列被转换为另一种语言的不同单词序列。谷歌翻译在 2016 年底开始使用基于 Seq2Seq 的模型进行生产。
Seq2Seq 模型由两部分组成:编码器和解码器。想象一下编码器和解码器就像是只能说两种语言的人类翻译员,每个人都有不同的母语。举个例子,我们假设编码器是以法语为母语的人,解码器是以英语为母语的人。他们有一个共同的第二语言:我们假设它是韩语。为了将法语翻译成英语,编码器将法语句子转换为韩语(称为上下文)并将上下文传递给解码器。由于解码器理解韩语,他或她现在可以从韩语翻译成英语。通过共同合作,他们可以将法语翻译成英语,如图 1-1 所示。
图 1-1. Seq2Seq 模型(神经机器翻译)
Transformer 注意力机制
Transformer 架构被发明用于改进机器翻译任务中的 AI 性能。“Transformer 最初是作为语言模型的,”基尔切解释说,“甚至不是那么大,但后来它们变得很大。”
要使用 transformer 模型,你需要了解另一个技术概念:attention。注意机制是一种模仿认知注意力的技术:它逐步查看输入序列,并根据概率决定每一步哪些序列的其他部分是重要的。
例如,看看这个句子“猫吃了老鼠之后,坐在垫子上。”这个句子中的“它”指的是“猫”还是“垫子”?transformer 模型可以将“它”与“猫”强烈联系起来。这就是注意力。
回到我们的编码器和解码器示例,想象一下编码器写下了对句子语义重要的关键词,并将它们连同翻译一起给解码器。这些关键词使解码器的翻译变得更容易,解码器现在知道了句子中哪些部分是重要的,哪些术语给出了句子的上下文。
Transformer 模型有两种注意力类型:自注意力(句子内单词的连接)和编码器-解码器注意力(源句子中的单词与目标句子中的单词之间的连接)。
注意机制有助于 transformer 过滤噪声并关注相关内容:将两个单词连接起来,使它们在语义上相互关联,当这些单词本身没有任何明显的标记指向彼此时。
Transformer 模型受益于更大的架构和更多的数据。在大型数据集上进行训练并针对特定任务进行微调可以改善结果。transformer 比任何其他类型的神经网络更擅长理解句子中词语的上下文。GPT 只是 transformer 的解码器部分。
现在你知道了 GPT 的含义,让我们谈谈那个“3”——以及 1 和 2。
GPT-3 的简要历史
GPT-3 由旧金山的 AI 研究先驱 OpenAI 创建,并且是一个重要的里程碑。OpenAI 的声明使命是“确保人工通用智能惠及全人类。”人工通用智能是一种不局限于专业任务的 AI 类型,而是在各种任务中表现良好,就像人类一样。
GPT-1
OpenAI 于 2018 年 6 月提出了 GPT-1。开发者的关键发现是将 transformer 架构与无监督预训练相结合产生了有希望的结果。他们写道,GPT-1 经过特定任务的微调,实现了“强大的自然语言理解”。
GPT-1 作为通向具有一般语言能力的语言模型的重要里程碑。它证明了语言模型可以有效地进行预训练,这有助于它们良好地泛化。该架构可以进行各种 NLP 任务,只需进行很少的微调。
GPT-1 使用了 Book Corpus 数据集,其中包含约七千本未发表的书籍,以及变压器的解码器部分,其中包含自注意力以训练模型。该体系结构基本保持了与原始变压器相同。该模型有 1.17 亿个参数。GPT-1 为未来模型打开了道路,这些模型可以利用更大的数据集和更多的参数更好地释放这一潜力。
其成就之一是在各种 NLP 任务上具有良好的零样本性能,如问答(Q&A)和情感分析,这归功于预训练。零样本学习 是指模型在过去没有看到任何该类示例的情况下执行任务的能力;模型应该在没有查看任何示例的情况下理解任务。零样本任务转移 是一种设置,在该设置中,模型被呈现给少量甚至没有示例,并被要求基于示例和说明理解任务。
GPT-2
2019 年 2 月,OpenAI 推出了 GPT-2,它比 GPT-1 更大,但其他方面非常相似。主要区别在于 GPT-2 具有多任务处理能力。它 成功地证明 了语言模型可以在没有为这些任务接收任何训练示例的情况下在多个任务上表现良好。
GPT-2 表明,训练更大的数据集并拥有更多参数会提高语言模型理解任务并在零样本设置下超越许多任务的最新技术的能力。它还表明,甚至更大的语言模型在自然语言理解方面表现会更好。
为了创建一个广泛、高质量的数据集,作者们爬取了 Reddit 并从该平台上投票文章的外部链接中获取数据。得到的数据集 WebText 从超过八百万篇文档中提取了 40GB 的文本数据,远远大于 GPT-1 的数据集。GPT-2 是在 WebText 数据集上训练的,并具有 15 亿个参数,比 GPT-1 大 10 倍。
GPT-2 在多个数据集上进行了评估,包括阅读理解、摘要、翻译和问答等下游任务。
GPT-3
在构建更加健壮和强大的语言模型的过程中,OpenAI 构建了 GPT-3 模型。它的数据集和模型都比用于 GPT-2 的数据集和模型大约大两个数量级:GPT-3 具有 1750 亿个参数,并且在训练过程中使用了五种不同文本语料库的混合数据,这是比 GPT-2 更大的数据集。GPT-3 的体系结构与 GPT-2 基本相同。它在零样本和少样本设置下在下游 NLP 任务上表现良好。
GPT-3 具有撰写与人类撰写的文章无法区分的能力。它还可以执行即时任务,而这些任务从未被明确训练过,例如求和数字、编写 SQL 查询,甚至根据任务的简单英语描述编写 React 和 JavaScript 代码。
注
少样本、一样本和零样本设置是零样本任务转移的专业案例。在少样本设置中,模型提供了一个任务描述和尽可能多的与模型上下文窗口相匹配的示例。在一样本设置中,模型提供了确切的一个示例,而在零样本设置中,则没有提供示例。
OpenAI 的使命声明强调了 AI 的民主和道德方面。民主维度在于决定通过公共 API 或应用程序编程接口发布第三版模型 GPT-3:一种软件中介,用于在网站或应用程序与用户之间来回发送信息。
API 充当着使开发人员能够在应用程序和用户之间建立新的程序化交互的信使。通过 API 发布 GPT-3 是一项革命性的举措。直到 2020 年,由领先研究实验室开发的强大 AI 模型只对少数人开放——这些人是在这些项目上工作的研究人员和工程师。OpenAI API 通过简单的登录使全球用户首次获得对世界上最强大的语言模型的前所未有的访问权限。(OpenAI 采取此举措的商业原因是创建一个称为“模型即服务”的新范式,开发人员可以按 API 调用付费;我们将在第三章中对此进行更详细的讨论。)
OpenAI 研究人员在研究 GPT-3 时尝试了不同的模型大小。他们采用了现有的 GPT-2 结构并增加了参数数量。作为实验结果,产生了具有新的和非凡能力的模型——GPT-3。虽然 GPT-2 在下游任务中显示出了一些零样本能力,但当提供示例上下文时,GPT-3 可以执行更多的新任务。
OpenAI 研究人员发现,仅仅通过扩展模型参数和训练数据集的规模就能取得如此非凡的进展,这令人惊讶。他们普遍乐观地认为,即使是比 GPT-3 更大的模型,也将延续这些趋势,使得只需在少量样本上进行微调就能实现少样本或零样本学习的更强大的学习模型成为可能。
当你阅读本书时,专家估计,基于万亿参数的语言模型可能正在被构建和部署。我们已经进入了大型语言模型的黄金时代,现在是你成为其中一员的时候了。
GPT-3 吸引了大量的公众注意力。麻省理工科技评论将 GPT-3 视为2021 年的十大突破性技术之一。它在执行一系列广义任务时表现出近乎人类的效率和准确性,这种出色的灵活性正是它如此令人兴奋的原因,正如早期采用者 Arram Sabeti 所推文的(图 1-2)。
图 1-2. 来自Arram Sabeti的推文
API 的发布在自然语言处理领域引起了一场范式转变,并吸引了大量的测试者。创新和初创企业以闪电般的速度相继而至,评论家称 GPT-3 为“第五次工业革命”。
在 API 推出仅九个月后,根据 OpenAI 的说法,已经有超过三百个业务利用它展开发展。尽管如此突然,一些专家认为这种兴奋并不夸张。Bakz Awan 曾是一名开发者,现在是一名企业家和意见领袖,也是 OpenAI API 开发者社区的主要声音之一。他有一个 YouTube 频道“Bakz T. Future” 和一个 播客。Awan 认为,GPT-3 和其他模型实际上是“被低估了,它们的可用性、友好性、趣味性和强大性实际上是让人震惊的。”
Viable 的 CEO Daniel Erickson,其公司拥有一款由 GPT-3 提供支持的产品,赞扬该模型通过他所称的提示驱动式开发从大型数据集中提取见解的能力。
涉及这一领域的公司的使用案例包括为广告和网站生成文案。设计理念相对简单:公司将您的数据传入,转换为提示,并显示 API 生成的结果。它解决了一个只需要单个 API 提示就可以轻松完成的任务,并将 [一个] 用户界面围绕起来,将其交付给用户。
Erickson 认为,这一类使用案例的问题在于已经过度拥挤,吸引了许多雄心勃勃的初创企业创始人竞相提供类似的服务。相反,Erickson 建议转而考虑另一类使用案例,就像 Viable 所做的那样。基于数据驱动的使用案例没有提示生成使用案例那样拥挤,但它们更有利可图,并且可以轻松地创建一个安全的“壕沟”。
Erickson 表示,关键在于建立一个大型数据集,并不断添加数据,以提供潜在的见解。GPT-3 将帮助您从中提取有价值的见解。在 Viable,这就是让他们轻松实现盈利的模型。“人们为数据付的钱比为提示输出付的钱要多得多,”Erickson 解释道。
需要注意的是,技术革命也带来了争议和挑战。对于试图塑造叙事的任何人来说,GPT-3 是一个强大的工具。如果没有足够的关怀和善意,我们将面临的一个挑战是遏制试图利用该算法传播虚假信息的企图。另一个挑战将是消除其用于生成大量低质量数字内容的用途,这些内容将污染互联网上可用的信息。还有一个挑战是其数据集的局限性,这些数据集充满了各种各样的偏见,而这些偏见可能会被这项技术放大。我们将在第六章中更详细地探讨这些挑战,同时讨论 OpenAI 为解决这些挑战所做的各种努力。
访问 OpenAI API
截至 2021 年,市场已经产生了几种拥有比 GPT-3 更多参数的专有 AI 模型。然而,对它们的访问仅限于公司研发部门内的少数人,这使得不可能评估它们在现实世界 NLP 任务中的性能。
使 GPT-3 可访问的一个因素是其简单直观的“文本输入,文本输出”用户界面。它不需要复杂的、渐变微调或更新,你也不需要是专家来使用它。这种可扩展的参数和相对开放的访问结合起来,使 GPT-3 成为迄今为止最令人兴奋,也可以说是最相关的语言模型。
由于 GPT-3 的非凡能力,与开源相关的安全性和误用方面存在着重大风险,我们将在第七章中讨论。考虑到这一点,OpenAI 决定不公开发布 GPT-3 的源代码,并通过 API 提出了一种独特的访问共享模型。
公司决定最初以有限的 beta 用户列表的形式发布对 API 的访问权限。申请过程要求人们填写一份详细说明他们背景和请求 API 访问权限的原因的表格。只有批准的用户才被授予访问名为 Playground 的 API 的私人 beta 权限。
在早期,GPT-3 beta 访问的等待列表中有数万人。OpenAI 迅速处理了开始涌入的申请,分批添加开发者,但也密切监控他们对 API 用户体验的活动和反馈,以持续改进它。
由于安全保障措施的进展,OpenAI 在 2021 年 11 月取消了等待列表。GPT-3 现在可以通过简单的登录来开放访问。这是 GPT-3 历史上的一个重要里程碑,也是社区强烈要求的一步。要获取 API 访问权限,只需转到注册页面,注册一个免费账户,立即开始尝试它。
新用户最初会获得一定数量的免费信用额,可以自由地尝试 API。信用额相当于创建长度为三本普通长度小说的文本内容。免费信用额用完后,用户开始支付使用费用,或者如果有需要,他们可以向 OpenAI API 客户支持申请额外的信用额。
OpenAI 努力确保 API 驱动的应用程序被负责任地构建。因此,它提供工具,最佳实践,和使用指南来帮助开发者快速安全地将他们的应用程序投入生产。
该公司还制定了内容指南,以明确 OpenAI API 可用于生成何种类型的内容。为帮助开发者确保其应用程序用于预期目的,防止潜在的误用,并遵守内容指南,OpenAI 提供了免费的内容过滤器。OpenAI 政策禁止 API 的使用方式违反其宪章中描述的原则,包括宣扬仇恨、暴力或自我伤害的内容,或者意图骚扰、影响政治进程、传播错误信息、发送垃圾内容等行为。
一旦您注册了 OpenAI 账户,您可以继续阅读第二章,我们将讨论 API 的不同组件、GPT-3 Playground,以及如何针对不同的用例最大限度地利用 API 的能力。
^(1) 马尔科姆·格拉德威尔,《异类:成功的故事》(小布朗,2008 年)。
^(2) Ashish Vaswani 等人,《注意力机制就是你所需要的一切》,神经信息处理系统进展 30(2017)。
第二章:使用 OpenAI API
即使 GPT-3 是世界上最复杂和复杂的语言模型,其功能也被抽象为一个简单的“文本输入,文本输出”的接口提供给最终用户。本章将带您开始使用该接口、Playground,并涵盖 OpenAI API 的技术细节,因为细节总是揭示真正的精华。
要完成本章的学习,您需要在 https://beta.openai.com/signup 注册一个 OpenAI 账户。如果您还没有,请立即注册。
浏览 OpenAI Playground
您的 OpenAI 开发者账户提供了访问 API 和无限可能性的权限。我们将从 Playground 开始,这是一个基于 Web 的沙盒环境,允许您尝试 API,了解其组件的工作原理,并访问开发者文档和 OpenAI 社区。然后,我们将向您展示如何构建强大的提示,以生成您应用程序的良好响应。最后,我们将通过 GPT-3 执行四个自然语言处理任务的示例来结束本章:分类、命名实体识别(NER)、摘要和文本生成。
在一次与 OpenAI 产品和合作副总裁彼得·韦林德(Peter Welinder)的采访中,我们询问了如何为首次使用 Playground 的用户提供关键建议。他告诉我们,他的建议取决于用户的角色。如果用户具有机器学习背景,彼得鼓励他们“首先忘记他们已经知道的东西,然后只需进入 Playground,尝试让 GPT-3 做你希望它做的事情,只需询问它。”他建议用户“把 GPT-3 想象成你要求做某事的朋友或同事。你会如何描述你希望他们做的任务?然后,看看 GPT-3 如何回应。如果它的回应不符合你的要求,就修改你的指令。”
正如 YouTuber 和 NLP 影响者 Bakz Awan 所说:“非技术人员问:我需要学位来使用这个吗?我需要懂编程才能使用它吗?绝对不需要。您可以使用 Playground。您不需要编写一行代码。您会立即得到结果。任何人都可以做到。”
注意
在开始使用 Playground 之前,我们建议阅读 OpenAI 的 快速入门教程 和 开发者文档。
这里是开始使用 Playground 的步骤:
-
登录到 https://openai.com,并从主菜单导航到 Playground。
-
查看 Playground 屏幕(图 2-1)。
-
标记为 1 的大文本框是您提供文本输入(提示)的位置。
-
右侧标记为 2 的框是参数设置窗格,它使您可以调整参数。
-
标记为 3 的框允许您加载一个 预设:一个示例提示和 Playground 设置。提供您自己的训练提示或加载现有的预设。
图 2-1. Playground 界面,2022 年 1 月 10 日截图
-
-
选择现有的问答预设(标记为 3)。这将自动加载训练提示以及相关的参数设置。单击生成按钮(在图 2-1 中标记为 4)。
-
API 处理您的输入并在同一文本框中提供响应(称为完成)。它还显示了您使用的令牌数量。令牌是用于确定每个 API 调用价格的单词的数值表示;我们将在本章后面讨论它们。
-
屏幕底部右侧是令牌计数,左侧是一个生成按钮(参见图 2-2)。
图 2-2. 带令牌计数的问答提示完成
-
每次单击生成按钮,GPT-3 都会考虑文本输入字段中的提示和完成,并将它们视为下一个完成的训练提示的一部分。
这是您可以在图 2-2 中看到的提示:
I am a highly intelligent question answering bot. If you ask me a question that
is rooted in truth, I will give you the answer. If you ask me a question that is
nonsense, trickery, or has no clear answer, I will respond with "Unknown".
Q: What is human life expectancy in the United States?
A: Human life expectancy in the United States is 78 years.
Q: Who was president of the United States in 1955?
A: Dwight D. Eisenhower was president of the United States in 1955.
Q: Which party did he belong to?
A: He belonged to the Republican Party.
Q: What is the square root of banana?
A: Unknown
Q: How does a telescope work?
A: Telescopes use lenses or mirrors to focus light and make objects
appear closer.
Q: Where were the 1992 Olympics held?
这是完成:
A: The 1992 Olympics were held in Barcelona, Spain.
现在您已经了解了 Playground 的基本概述,让我们深入了解提示工程和设计的细节。
提示工程和设计
OpenAI API 彻底改变了我们与 AI 模型互动的方式,剥离了复杂的编程语言和框架。特斯拉人工智能总监 Andrej Karpathy 在 GPT-3 发布后开玩笑地说,编程 3.0 就是关于提示设计的(他发布的表情包在图 2-3)。您提供的训练提示与您获得的完成质量之间存在直接关系。您的文字结构和排列方式会严重影响输出。了解提示设计是释放 GPT-3 真正潜力的关键。
写好提示的秘诀在于了解 GPT-3 对世界的了解。正如 Awan 指出的那样:“它只看过文本。这意味着你不应该期望它了解物理世界,尽管它显然了解。它可以描述《蒙娜丽莎》,[可能]告诉你[关于]它的意义,重要性,历史[的],但它从未见过[这幅画],因为它只受过文本训练。”
你的工作是让模型利用它已有的信息生成有用的结果。在字谜游戏中,表演者给其他玩家足够的信息来猜出秘密单词。同样,对于 GPT-3,我们只给模型足够的上下文(以训练提示的形式)来找出模式并执行给定的任务。
图 2-3. 表情包来源未知,由Andrej Karpathy 在 2020 年 6 月 18 日发布
提示
在设计训练提示时,目标是从模型中获得一个零-shot的响应:也就是说,看看你是否可以在没有引导模型的外部训练示例的情况下获得你想要的响应。如果不能,那么向前移动,而不是向它展示整个数据集,而是向它展示一些例子。设计训练提示的标准流程是首先尝试零-shot,然后是几-shot,然后是基于语料库的微调(稍后在本章中描述)。
GPT-3 是通向通用人工智能的第一步,因此它也有其局限性。它并不知道一切,也无法以人类的方式推理,但是当你知道如何与它交流时,它是非常有能力的。这就是提示工程艺术的地方。
GPT-3 并非真相说者,但它是一位出色的故事讲述者。它接受文本输入,并试图以它认为最佳完成输入的文本来回应。如果你给它几行你最喜欢的小说,它会试图以相同风格继续。它通过导航上下文来工作,没有适当的上下文,它会生成不一致的回应。让我们看一个例子,以了解 GPT-3 是如何处理输入提示并生成输出的:
Q: What is human life expectancy in the United States?
A:
如果你向 GPT-3 提供这样的提示而没有任何上下文,你实际上是在要求它从其训练数据宇宙中寻找一般性答案。结果将是一般化和不一致的回应,因为模型不知道使用哪部分训练数据来回答问题。
另一方面,提供正确的上下文将会极大地提高回应的质量。它简单地限制了模型必须检查以回答问题的训练数据的宇宙,从而产生更具体和切题的回应:
I am a highly intelligent question answering bot. If you ask me a question that
is rooted in truth, I will give you the answer. If you ask me a question that
is nonsense, trickery, or has no clear answer, I will respond with "Unknown".
Q: What is human life expectancy in the United States?
A:
你可以把 GPT-3 处理输入的方式想象成人类大脑的处理方式。当有人向我们提出任何没有适当上下文的问题时,我们往往会给出随机的回应。这是因为没有任何适当的方向或上下文,很难得到精确的回应。GPT-3 也是如此;它的训练数据宇宙如此之大,以至于在没有任何外部上下文或方向的情况下,很难导航到正确的响应。
像 GPT-3 这样的 LLM 在给定正确上下文的情况下能够进行创意写作和回答事实性问题。以下是我们用于创建高效和有效的训练提示的五步公式:
-
定义你试图解决的问题以及它是什么类型的 NLP 任务,例如分类、问答、文本生成或创意写作。
-
想一想是否有办法得到一个零-shot 解决方案。如果你认为你需要外部示例来为你的用例引导模型,那么请认真考虑。
-
现在想一想,考虑到 GPT-3 的“文本输入,文本输出”接口,您可能如何以文本形式表达问题。考虑所有可能的场景来以文本形式表示您的问题。例如,假设您想要构建一个广告文案助手,可以通过查看产品名称和描述来生成创意文案。为了以“文本输入,文本输出”格式来界定这个目标,您可以将输入定义为产品名称和描述,输出定义为广告文案:
Input: Betty's Bikes, for price-sensitive shoppers Output: Low prices and huge selection. Free and fast delivery. Order online today!
-
如果您最终使用外部示例,请尽量少用,并尝试包含多样性,捕捉所有表示以避免模型过拟合或预测偏差。
这些步骤将作为每次从零开始创建训练提示时的标准框架。在您可以为数据问题构建端到端解决方案之前,您需要更多地了解 API 的工作原理。让我们通过查看其组件来深入了解。
OpenAI API 的工作原理
我们将在章节中更详细地讨论 图 2-4 中的所有这些组件。
图 2-4. API 的组件
表 2-1 显示了 OpenAI API 中组件的概述。
表 2-1. OpenAI API 中的组件
组件 | 功能 |
---|---|
执行引擎 | 确定用于执行的语言模型 |
响应长度 | 设置 API 在其完成中包含的文本量的限制 |
温度和 Top P | 温度控制响应的随机性,表示为从 0 到 1 的范围。Top P 控制模型应考虑的随机结果数量,如温度所示;它确定了随机性的范围。 |
频率惩罚和存在惩罚 | 频率惩罚通过“惩罚”模型来减少重复生成相同行的可能性。存在惩罚增加模型讨论新主题的可能性。 |
最佳选择 | 允许您在服务器端指定要生成的完成数(n),并返回“n”个完成中的最佳选择 |
停止序列 | 指定信号 API 停止生成完成的一组字符 |
注入起始和重新启动文本 | 注入起始文本允许您在完成的开头插入文本。注入重新启动文本允许您在完成的末尾插入文本。 |
显示概率 | 允许您通过显示模型对于给定输入可以生成的标记的概率来调试文本提示 |
执行引擎
执行引擎 确定用于执行的语言模型。选择正确的引擎是确定您模型能力的关键,从而获得正确输出。GPT-3 提供了四种大小和功能各异的执行引擎:Davinci、Ada、Babbage 和 Curie。Davinci 是最强大的,也是 Playground 的默认引擎。
响应长度
响应长度设置了 API 在其完成中包含多少文本的限制。因为 OpenAI 按 API 调用生成的文本长度收费(如前所述,这转化为令牌,或者是单词的数字表示),响应长度(也以令牌表示)对于预算有限的人来说是一个关键参数。更高的响应长度将使用更多的令牌并且成本更高。例如,如果进行分类任务,将响应文本调节器设置为 100 不是一个好主意:API 可能会生成无关的文本并使用额外的令牌,这将在您的账户上产生费用。由于技术限制,API 支持最多 2048 个令牌的提示和完成的组合。因此,在使用 API 时,您需要小心,确保提示和预期完成不超过最大响应长度,以避免突然完成。如果您的用例涉及大文本提示和完成,解决方法是想出在令牌限制内解决问题的创造性方法,例如缩短提示,将文本分成较小的片段,并链接多个请求。
温度和 Top P
温度调节器控制响应的创造性,表示为从 0 到 1 的范围。温度值较低意味着 API 将预测模型看到的第一件事情,导致最正确但可能枯燥,变化较小的文本。另一方面,温度值较高意味着模型在预测结果之前评估可能适合上下文的响应。生成的文本将更加多样化,但语法错误和无意义生成的可能性更高。
Top P 控制模型应考虑的随机结果数量,如温度调节器所建议的;它确定了随机性的范围。Top P 的范围是从 0 到 1。接近零的值意味着随机响应将受到限制:例如,如果值为 0.1,则只有 10% 的随机响应将被视为完成。这使得引擎确定性,这意味着它将始终为给定的输入文本生成相同的输出。如果值设置为 1,API 将考虑所有响应以完成,冒险并提出创造性的响应。较低的值限制了创造力;较高的值扩展了视野。
温度和 Top P 对输出产生重要影响。有时候,要想明白何时以及如何使用它们以获得所需的输出可能会令人困惑。两者相关联:改变其中一个的值会影响另一个。因此,通过将 Top P 设置为 1,您可以允许模型通过探索整个响应谱来释放其创造力,并通过使用温度调节器来控制随机性。
提示
我们始终建议更改 Top P 或温度,并将另一个设置为 1。
大型语言模型依赖概率方法而不是传统逻辑。它们可以为相同输入生成各种响应,具体取决于您设置模型参数的方式。模型试图在其训练的数据宇宙中找到最佳的概率匹配,而不是每次都寻找完美解决方案。
正如我们在第一章中提到的,GPT-3 的训练数据宇宙是巨大的,包括各种公开可用的书籍,互联网论坛和 OpenAI 专门策划的维基百科文章,使其能够为给定提示生成各种完成。这就是温度和 Top P,有时被称为“创造力旋钮”,发挥作用的地方:您可以调节它们以生成更自然或更抽象的响应,其中包含一些富有创意的元素。
假设你要使用 GPT-3 为你的初创公司生成名称。您可以将温度调节旋钮设置为较高水平,以获得最具创意的响应。当我们日夜努力寻找我们初创公司的完美名称时,我们调高了温度。GPT-3 出手相助,帮助我们找到了一个我们喜欢的名字:Kairos 数据实验室。
在其他情况下,您的任务可能需要很少或根本不需要创造力:例如分类和问答任务。对于这些任务,请保持较低的温度。
让我们看一下图 2-5,使用一个简单的分类示例,根据它们的名称将公司归类为一般的桶或类别。
图 2-5. 温度组件
我们的提示:
The following is a list of companies and the categories they fall into:
Facebook: Social Media, Technology
LinkedIn: Social Media, Technology, Enterprise, Careers
Uber: Transportation, Technology, Marketplace
Unilever: Conglomerate, Consumer Goods
Mcdonalds: Food, Fast Food, Logistics, Restaurants
FedEx:
以及输出:
Logistics, Shipping
正如您在图 2-5 中看到的那样,我们再次使用温度来控制随机性的程度。您还可以通过将温度旋钮保持设置为 1 而更改 Top P 来做到这一点。
频率和存在惩罚
与温度和 Top P 调节旋钮一样,频率惩罚和存在惩罚调节旋钮考虑的是文本提示(前一个完成加上新输入),而不是内部模型参数,当决定输出时,现有文本因此影响新的完成。频率惩罚通过“惩罚”它来减少模型完全重复相同行的可能性。存在惩罚增加了它谈论新话题的可能性。
当您希望防止相同的完成文本在多个完成之间重复时,这些就派上用场了。尽管这些旋钮相似,但有一个重要区别。如果建议的文本输出重复(例如,模型在之前的完成或同一会话期间使用了完全相同的标记),并且模型选择旧输出而不是新输出,则会应用频率惩罚。如果给定文本中存在标记*,则将应用存在惩罚。
最佳效果
GPT-3 使用 最佳选择 功能在服务器端生成多个完成,对它们进行幕后评估,然后为您提供最佳的概率结果。使用“最佳选择”参数,您可以指定要在服务器端生成的完成数 (n)。模型将返回 n 个完成中的最佳完成(每个标记的最低对数概率)。
这使您能够在单个 API 调用中评估多个提示完成,而不是重复调用 API 来检查相同输入的不同完成的质量。但是,使用“最佳选择”是昂贵的:它花费了 n 倍于提示中的标记。例如,如果您将“最佳选择”值设置为 2,则将收取输入提示中标记的两倍的费用,因为在后台,API 将生成两个完成并显示给您最佳的一个。
“最佳选择”根据您的使用情况可以从 1 到 20 不等。如果您的使用情况为为客户提供一致的输出质量,则可以将“最佳选择”值设置为较高的数字。另一方面,如果您的使用情况涉及太多的 API 调用,则将“最佳选择”值设置为较低的数字是有意义的,以避免不必要的延迟和成本。我们建议在使用“最佳选择”参数生成多个提示时保持响应长度最小,以避免额外收费。
停止序列
停止序列 是一组字符,用于指示 API 停止生成完成。这有助于避免使用不必要的标记,对于常规用户来说,这是一项重要的节省成本功能。
您可以为 API 提供最多四个序列,以停止生成进一步的标记。
让我们看看 图 2-6 中的示例语言翻译任务,以了解停止序列的工作原理。在此示例中,将英语短语翻译为法语。我们使用重启序列“英语:”作为停止序列:每当 API 遇到该短语时,它将停止生成新的标记。
图 2-6. 停止序列组件
注入开始文本和注入重启文本
注入开始文本 和 注入重启文本 参数允许您分别在完成的开始或结束处插入文本。您可以使用它们来保持所需的模式。通常,这些设置与停止序列一起使用,就像我们的示例中一样。提示具有模式,其中提供了一个带有前缀“英语:”(重启文本)的英语句子,然后生成带有前缀“法语:”(开始文本)的翻译输出。因此,任何人都可以轻松区分两者,并创建一个模型和用户都可以清楚理解的训练提示。
每当我们为此类提示运行模型时,它会自动在输出之前注入开始文本“法语:”,并在下一个输入之前注入重启文本“英语:”,以便可以保持这种模式。
显示概率
显示概率参数位于 Playground 设置窗格的底部。在传统软件工程中,开发人员使用 调试器 来调试(调试)一段代码。您可以使用显示概率参数来调试您的文本提示。每当您选择此参数,您将看到突出显示的文本。将光标悬停在上面将显示模型可以为指定的特定输入生成的标记列表,以及它们的相应概率。
您可以使用此参数来检查您的选项。此外,它可以帮助您看到可能更有效的替代方案。显示概率参数有三个设置:
最有可能
列出最有可能被考虑作为完成的标记,按概率递减的顺序。
最不可能
列出最不可能被考虑作为完成的标记,按概率递减的顺序。
完整光谱
显示可能被选择完成的整个标记宇宙。
让我们在一个简单提示的情境下看看这个参数。我们想要用一个简单、众所周知的短语开头输出句子:“从前有一天。”我们向 API 提供提示“从前有一”,然后我们在显示概率选项中选中“最有可能”选项。
如图 2-7 所示,它将“time”作为响应生成。因为我们将“显示概率”参数设置为最有可能,API 不仅显示响应,还显示可能的选项列表以及它们的概率。
现在您已经有了一个概述,让我们更详细地看看这些组件。
图 2-7. 显示概率组件显示最有可能的标记
执行引擎
如图 2-7 所述,OpenAI API 提供四个执行引擎,通过参数数量和性能能力进行区分。执行引擎驱动 OpenAI API。它们是“autoML”解决方案,提供自动化的 ML 方法和流程,使机器学习可用于非专家。它们易于配置并适应给定的数据集和任务。
四个主要的执行引擎按字母顺序命名,分别是:Ada(以埃达·洛夫莱斯命名)、Babbage(查尔斯·巴贝奇)、Curie(居里夫人玛丽·居里)和 Davinci(列奥纳多·达·芬奇)。让我们深入了解每个执行引擎,以了解在使用 GPT-3 时何时使用哪个引擎,首先从达芬奇开始。
达芬奇
达芬奇是最大的执行引擎,在打开 Playground 时是默认的。它可以做任何其他引擎可以做的事情,通常需要更少的指令并且结果更好。然而,这样做的折衷是它的每个 API 调用成本更高,比其他引擎慢。您可能想使用其他引擎来优化成本和运行时间。
提示
在测试新想法和提示时,我们建议从 Davinci 开始,因为它具有出色的能力。尝试 Davinci 是了解 API 能力的好方法。然后,随着您对问题陈述的了解逐渐加深,您可以逐渐降低预算和运行时间。一旦您知道自己想要实现什么,您可以选择留在 Davinci(如果成本和速度不是问题),或者您可以转向 Curie 或其他成本较低的引擎,并尝试根据其能力优化输出。您可以使用OpenAI’s Comparison Tool生成比较引擎输出、设置和响应时间的 Excel 电子表格。
Davinci 应该是您处理需要理解内容的任务的首选,例如总结会议记录或生成创意广告文案。它擅长解决逻辑问题并解释虚构角色的动机。它甚至可以编写故事。Davinci 还能够解决一些涉及因果关系的最具挑战性的 AI 问题。
Curie
Curie 旨在找到功率和速度之间的最佳平衡,这对于执行大规模分类等高频任务或将模型投入生产非常重要。
Curie 在执行问答和作为通用聊天机器人方面也表现不错。例如,如果您正在构建客户支持聊天机器人,您可能会选择 Curie 来更快地服务高容量请求。
虽然 Davinci 在分析复杂文本方面更强大,但 Curie 可以以低延迟和闪电般的速度执行。在选择 Davinci 还是 Curie 投入生产之前,弄清楚您的用例并进行成本效益分析是明智的。
Babbage
Babbage 比 Curie 更快,但无法执行涉及理解复杂意图的任务。然而,它非常能干,并且在语义搜索排名和分析文档与搜索查询匹配程度方面是首选。它比 Curie 和 Davinci 便宜,并且是涉及频繁 API 调用的简单问题的首选选择。
Ada
Ada 是可用引擎中最快且成本最低的。它可以执行不需要细微理解背景的简单任务,例如解析文本、纠正语法或简单分类。通过提供更多输入上下文,可以提高 Ada 的性能。对于涉及频繁 API 调用的用例,Ada 可以是首选模型;通过正确配置设置,它可以实现与更大模型类似的结果。您对 API 参数进行的实验越多,您就会对适用于您的用例的设置有更多了解。
Instruct Series
基于四个主要模型,OpenAI 推出了一系列InstructGPT模型,这些模型在理解指令并遵循它们方面表现更好,同时比原始的 GPT-3 毒性更低、更真实。它们是使用来自 OpenAI 对齐研究的技术开发的。这些模型是在与人类的合作中训练的,并且现在作为 OpenAI API 的默认语言模型部署。
图 2-8 和 2-9 展示了 InstructGPT 和 GPT 系列 Davinci 引擎针对相同输入生成的两个输出。
图 2-8. InstructGPT Davinci 模型生成的输出
图 2-9. GPT Davinci 模型生成的输出
我们的输入:
Write a story about AI for a 5 year old.
InstructGPT 输出:
Robot was very happy. He had just been born, and he was already the smartest
robot in the world. He could do anything that any other robot could do, but he
could also think for himself.
GPT 输出:
This project is an attempt to make an AI that can produce fictional stories.
It is a work in progress.
Fictionality
The aim of this project is to create an AI that can create fictional stories.
为了使构建提示的过程真正高效,OpenAI 决定公开发布四个模型的 InstructGPT 版本:text-davinci-001、text-curie-001、text-babbage-001 和 text-ada-001。通过清晰的说明,这些模型可以产生比它们的基础版本更好的结果,并且现在是API 的默认模型。这个系列是在弥合人类思维与模型操作之间的差距方面的重要一步。
提示
我们建议您将此模型系列作为所有与文本相关的任务的默认模型。GPT-3 模型的基础版本可用作 Davinci、Curie、Babbage 和 Ada,并且旨在与微调、搜索、分类和回答端点一起使用。
端点
Playground 是一个图形化的 Web 界面,它在幕后调用 OpenAI API,但还有其他几种调用 API 的方式。要做到这一点,您需要熟悉其端点:在调用时相互通信的远程 API。在本节中,您将熟悉八个 API 端点的功能和用法。
列出引擎
列出引擎端点,也称为元数据端点,提供了可用引擎的列表,以及与每个引擎相关的特定元数据,例如所有者和可用性。要访问它,您可以使用 HTTP GET 方法调用以下 URI,而不传递任何请求参数:
GET https://api.openai.com/v1/engines
检索引擎
当您向检索引擎端点提供引擎名称时,它会返回有关该引擎的详细元数据。要访问它,请使用 HTTP GET 方法调用以下 URI,而不传递任何请求参数:
GET https://api.openai.com/v1/engines/{engine_id}
完成
完成是 GPT-3 最著名和广泛使用的端点。它简单地将文本提示作为输入,并返回完成的响应作为输出。它使用 HTTP POST 方法,并且需要将引擎 ID 作为 URI 路径的一部分。作为 HTTP Body 的一部分,完成端点接受了前一节讨论的几个附加参数。它的签名是:
POST https://api.openai.com/v1/engines/{engine_id}/completions
语义搜索
语义搜索端点允许您以自然语言提供查询以搜索一组文档,这些文档可以是单词、句子、段落,甚至更长的文本。它将根据文档与输入查询的语义相关性对文档进行评分和排名。例如,如果您提供文档[“学校”,“医院”,“公园”]和查询“医生”,您将为每个文档获得不同的相似度分数。
相似度分数是一个正分数,通常范围从 0 到 300(但有时可能更高),其中分数大于 200 通常表示文档在语义上与查询相似。相似度分数越高,文档与查询的语义相似度就越高(在此示例中,“医院”将与“医生”最相似)。您可以作为 API 请求的一部分提供高达两百个文档。^(1)
以下是语义搜索端点的签名:
POST https://api.openai.com/v1/engines/{engine_id}/search
文件
文件端点可用于跨不同端点,如答案、分类和语义搜索。它用于将文档或文件上传到 OpenAI 存储,该存储可在整个 API 中访问。相同的端点可使用不同的签名执行以下任务:
列出文件
返回属于用户组织或与特定用户帐户链接的文件列表。这是一个 HTTP GET 调用,不需要传递任何参数:
GET https://api.openai.com/v1/files
上传文件
上传包含要在各种端点之间使用的文档的文件。它将文档上传到 OpenAI 为用户组织已分配的内部空间中。这是一个 HTTP POST 调用,需要在 API 请求中添加文件路径:
POST https://api.openai.com/v1/files
检索文件
通过提供文件 ID 作为请求参数,返回关于特定文件的信息:
GET https://api.openai.com/v1/files/{file_id}
删除文件
通过提供文件 ID 作为请求参数,删除特定文件:
DELETE https://api.openai.com/v1/files/{file_id}
分类(测试版)
分类端点允许您利用带标签的示例集而无需进行微调。它使用提供的示例对查询进行分类,从而避免微调,进而消除超参数调整的需要。您可以将其用于几乎任何机器学习分类任务。
此端点提供了一个易于配置的“autoML”解决方案,可轻松适应不断变化的标签模式。您可以作为请求的一部分提供高达两百个带标签的示例,或者在查询期间提供预先上传的文件。除了提供 URI 路径外,此端点还需要模型和查询以及示例。其签名为:
POST https://api.openai.com/v1/classifications
答案(测试版)
GPT-3 的问答端点截至 2021 年底的写作仍处于测试阶段。当给出一个问题时,QA 端点基于一组文档或训练示例提供答案。
例如,如果您想在一组 PDF 上实现 QA 端点,您只需使用文件端点上传它们,并在请求参数中提供文件 ID。答案端点将使用这些文件作为上下文来回答任何查询。它还允许您通过提供(问题,答案)对列表作为训练示例的形式来控制模型的上下文语调和响应。它首先搜索提供的文档或示例以找到相关的上下文,然后将其与相关示例和问题结合起来生成响应。其签名为:
POST https://api.openai.com/v1/answers
嵌入
API 的另一个实验性端点是嵌入。嵌入是任何机器学习模型的核心,它们允许您通过将文本转换为高维向量来捕获语义。目前,开发者倾向于使用开源模型为其数据创建嵌入,这些数据可以用于各种任务,如推荐,主题建模,语义搜索等。
OpenAI 意识到 GPT-3 具有驱动基于嵌入的用例的巨大潜力,并提供了最先进的结果。为输入数据生成嵌入向量非常简单,可以通过 API 调用的形式来实现。要创建代表输入文本的嵌入向量,您可以使用以下签名:
POST https://api.openai.com/v1/engines/{engine_id}/embeddings
要调用嵌入端点,您可以根据您的用例选择引擎类型,参考嵌入文档。每个引擎都有其特定的嵌入维度,其中 Davinci 是最大的,而 Ada 是最小的。所有嵌入引擎都来自四个基本模型,并根据用例进行分类,以允许有效且成本友好的使用。
对 GPT-3 进行定制
OpenAI 的研究论文“适应社会的语言模型过程(PALMS)与价值定向数据集”,作者为 Irene Solaiman 和 Christy Dennison(2021 年 6 月),推动了公司推出了一种前所未有的微调端点,允许您通过定制模型以满足特定用例来更充分地利用 GPT-3。 (我们在第六章中更多地讨论了关于 PALMS 的内容。) 对 GPT-3 进行定制可以提高任何自然语言任务的性能,而这些任务正是符合您特定用例的。
让我们首先解释一下这是如何工作的。
OpenAI 在半监督方式下预训练了 GPT-3,使用了特别准备的数据集。当只给出几个示例的提示时,它通常能够直觉地了解您正在尝试执行的任务并生成一个合理的完成。这被称为少样本学习,正如您在第一章中所学到的。
用户现在可以根据自己的数据对 GPT-3 进行微调,创建适合其项目的定制版本。定制使 GPT-3 对各种用例可靠,并使运行模型更便宜、更高效和更快速。微调是调整整个模型,使其每次表现都符合您的期望。您可以使用任何形状和大小的现有数据集,或根据用户反馈逐步添加数据。
模型的能力和知识将被狭窄化并集中在用于微调的数据集的内容和语义上。这反过来将限制创造力和主题选择的范围,这对于诸如分类内部文件之类的下游任务或涉及内部行话的任何用例都是有利的。它通过将 GPT-3 的注意力集中在微调数据上并限制其知识库来实现。
一旦模型被微调,您就不再需要在提示中提供示例了。这样可以节省成本,减少响应时间,并提高输出的质量和可靠性。定制 GPT-3 似乎比通过提示设计所能实现的结果更好,因为在此过程中您可以提供更多示例。
使用不到一百个示例,您就可以开始看到微调 GPT-3 的好处,随着您添加更多数据,性能将继续提高。在 PALMS 研究论文中,OpenAI 展示了如何使用不到一百个示例对 GPT-3 的性能进行改进。OpenAI 还发现,示例数量加倍通常会线性提高质量。
基于定制 GPT-3 模型的应用
定制 GPT-3 改善了输出的可靠性,提供了更一致的结果,您可以依赖它来进行生产用例。现有的 OpenAI API 客户发现,定制 GPT-3 可以显着减少不可靠输出的频率,并且有一个日益增长的客户群可以通过其性能数据为此作证。让我们来看看定制了 GPT-3 的四家公司。
Keeper Tax 帮助独立承包商和自由职业者处理税务。它使用各种模型来提取文本和分类交易,然后识别易于忽视的税收减免,以帮助客户直接从应用程序申报税款。通过定制 GPT-3,Keeper Tax 的准确率从 85% 提高到了 93%。并且,由于每周向模型添加 500 个新的训练示例,这一持续改进正在导致准确率每周提高约 1%。
Viable 帮助公司从客户反馈中获得见解。通过定制 GPT-3,Viable 能够将大量的非结构化数据转化为可读的自然语言报告,并提高报告的可靠性。因此,总结客户反馈的准确性提高了从 66%到 90%。想要深入了解 Viable 的旅程,请参考我们在第四章中与 Viable 首席执行官的访谈。
Sana Labs 是人工智能在学习领域开发和应用的全球领导者。该公司的平台利用最新的机器学习突破,为企业提供个性化学习体验。通过使用自己的数据定制 GPT-3,Sana 的问题和内容生成从语法上正确但泛泛的响应变为高度准确的响应。这带来了 60%的改进,为他们的用户提供了更个性化的体验。
Elicit 是一款 AI 研究助手,可以直接回答研究问题,利用学术论文的发现。该助手从大量研究论文中找到最相关的摘要,然后应用 GPT-3 生成论文对问题的主张。定制版本的 GPT-3 优于提示设计,在三个方面取得了改进:结果更容易理解 24%,准确性提高 17%,整体效果提高 33%。
如何为您的应用程序定制 GPT-3
要开始定制 GPT-3,你只需在 OpenAI 命令行工具中运行一个命令,并提供一个文件。你定制的版本将开始训练,然后立即在 OpenAI API 中可用。
在非常高层次上,为你的应用程序定制 GPT-3 涉及以下三个步骤:
-
准备新的训练数据并上传至 OpenAI 服务器
-
用新的训练数据微调现有模型
-
使用微调后的模型
准备并上传训练数据
训练数据是模型接受的微调输入。你的训练数据必须是一个 JSONL 文档,其中每一行是一个与训练示例相对应的提示-完成对。对于模型微调,你可以提供任意数量的示例。强烈建议你创建一个以价值为目标的数据集(我们将在第六章中定义和讨论),以提供高质量且广泛表达的数据给模型。微调通过提供更多示例来改善性能,所以你提供的示例越多,结果就越好。
你的 JSONL 文档应如下所示:
{"prompt": "prompt text", "completion": "ideal generated text"}
{"prompt": "prompt text", "completion": "ideal generated text"}
{"prompt": "prompt text", "completion": "ideal generated text"}
...
在提示文本中应包括你想完成的确切提示文本,而理想生成的文本应包括你想要 GPT-3 生成的期望完成文本的示例。
你可以使用 OpenAI 的 CLI 数据准备工具轻松地将数据转换成这种文件格式。CLI 数据准备工具接受不同格式的文件;唯一要求是它们包含提示和完成列/键。你可以传递 CSV、TSV、XLSX、JSON 或 JSONL 文件,该工具将将输出保存到一个准备进行微调的 JSONL 文件中。要执行此操作,请使用以下命令:
openai tools fine_tunes.prepare_data -f LOCAL_FILE
其中LOCAL_FILE是你准备用于转换的文件。
训练一个新的微调模型
一旦按上述方法准备好训练数据,你就可以借助 OpenAI CLI 开始微调作业。为此,你需要以下命令:
openai api fine_tunes.create -t TRAIN_FILE_ID_OR_PATH -m BASE_MODEL
其中BASE_MODEL是你正在使用的基础模型名称(Ada、Babbage、Curie 或 Davinci)。运行此命令会执行几件事:
-
使用文件端点上传文件(如在本章中讨论的)
-
使用从命令中获取的请求配置微调模型
-
流式传输事件日志,直到完成微调作业
日志流式传输有助于实时了解正在发生的情况,并在发生任何事件/故障时做出响应。流式传输可能需要从几分钟到几个小时的时间,具体取决于队列中作业数量和数据集大小。
使用微调的模型
一旦模型成功微调,你就可以开始使用它了!你现在可以将这个模型指定为完成端点的参数,并使用 Playground 向其发出请求。
提示
微调作业完成后,可能需要几分钟的时间才能使你的模型准备好处理请求。如果对模型进行完成请求超时,很可能是因为你的模型仍在加载中。如果发生这种情况,请在几分钟后重试。
你可以通过使用以下命令将模型名称作为完成请求的模型参数来开始发送请求:
openai api completions.create -m FINE_TUNED_MODEL -p YOUR_PROMPT
其中FINE_TUNED_MODEL是你的模型名称,YOUR_PROMPT是你想在此请求中完成的提示。
你可以继续在这些请求中使用在本章中讨论的所有完成端点参数,如温度、频率惩罚、存在惩罚等,对新微调的模型进行请求。
注意
这些请求未指定引擎。这是故意设计的,OpenAI 计划在将来对其他 API 端点进行标准化。
获取更多信息,请参考 OpenAI 的fine-tuning documentation。
令牌
在深入研究不同提示如何消耗令牌之前,让我们更仔细地看看什么是令牌。
我们告诉过你,令牌是单词或字符的数值表示。使用令牌作为标准度量,GPT-3 可以处理从几个单词到整个文档的训练提示。
对于常规英文文本,1 个令牌大约包含 4 个字符。这大致相当于三分之四个单词,因此一百个令牌大约会有大约 75 个单词。作为参考,莎士比亚的作品约有 900,000 个单词,这大致相当于 120 万个令牌。
为了保持 API 调用的延迟,OpenAI 对提示和完成设置了 2,048 个令牌(大约 1,500 个单词)的限制。
为了进一步了解在 GPT-3 的背景下如何计算和消耗令牌,并保持 API 设定的限制之内,让我们逐步了解您可以衡量令牌计数的方式。
在 Playground 中,当您将文本输入界面时,您可以看到右下角页脚实时更新令牌计数。点击生成按钮后,它将显示由文本提示消耗的令牌数量。您可以使用它来监控每次与 Playground 交互时的令牌消耗情况(参见 图 2-10)。
图 2-10. Playground 中的令牌计数
衡量令牌消耗的另一种方法是使用 GPT-3 Tokenizer 工具 (图 2-11),该工具允许您可视化从字符到令牌的形成过程。您可以通过一个简单的文本框与 Tokenizer 交互,在其中键入提示文本,Tokenizer 会显示令牌和字符计数以及详细的可视化。
图 2-11. OpenAI 的 Tokenizer 工具
要将令牌计数指标集成到您对不同端点的 API 调用中,您可以通过 API 请求补丁 logprobs 和 echo 属性,以获取所消耗的完整令牌列表。
在下一节中,我们将介绍基于不同执行引擎定价令牌的方式。
定价
在上一节中,我们谈到了令牌,这是 OpenAI 用来确定 API 调用定价的最小可互换单元。令牌比测量训练提示中使用的单词或句子的数量具有更大的灵活性,由于令牌的粒度,它们可以很容易地被处理和用于衡量各种训练提示的定价。
每次你从 Playground 或以编程方式调用 API,API 在幕后计算用于训练提示和生成完成的令牌数量,并根据使用的总令牌数量收取每次调用的费用。
OpenAI 通常每 1,000 个令牌收取固定费用,费用取决于 API 调用中使用的执行引擎。Davinci 是最强大且最昂贵的,而 Curie、Babbage 和 Ada 则更便宜且更快。
表 2-2 显示了本章撰写时(2021 年 12 月)各种 API 引擎的定价。
表 2-2. 模型定价
Model | Price per 1,000 tokens |
---|---|
Davinci(最强大) | $0.0600 |
Curie | $0.0060 |
巴贝奇 | $0.0012 |
艾达(最快) | $0.0008 |
该公司采用“按使用量付费”的云定价模式。有关更新的定价,请查看在线定价表。
OpenAI 提供了一个报告仪表板,以监控每日累积的 token 使用情况,而不是监视每个 API 调用的 token。根据你的使用情况,它可能会类似于图 2-12。
图 2-12. API 使用仪表板
在图 2-12 中,你可以看到一个条形图显示了每日 token 的消耗量。该仪表板帮助你监控组织的 token 使用情况和成本,以便你可以调节 API 使用情况,并保持在预算范围内。还有一个选项可以监控累积使用量,并获取每个 API 调用的 token 计数的细分。这应该为你提供足够的灵活性,以制定围绕 token 消耗和定价的政策。现在你已经了解了 Playground 和 API 的方方面面,我们将看一下 GPT-3 在典型语言建模任务上的表现。
提示
刚开始接触 GPT-3 的初学者可能会发现很难理解 token 的消耗。许多用户输入的提示文本过长,导致信用额度的过度使用,随后产生意外费用。为了避免这种情况,在最初的几天里,使用 API 使用仪表板观察 token 消耗量,并了解提示文本和完成的长度如何影响 token 使用情况。这可以帮助防止信用额度的不受控制使用,并保持一切在预算范围内。
GPT-3 在传统自然语言处理任务上的表现
GPT-3 是自然语言处理领域的一个高度先进和复杂的继任者,采用核心自然语言处理方法和深度神经网络构建和训练。对于任何基于人工智能的建模方法,模型性能是通过以下方式评估的:首先,你使用训练数据为特定任务(如分类、问答、文本生成等)训练模型;然后,使用测试数据(新的、之前未见的数据)验证模型性能。
类似地,有一套用于评估自然语言处理模型性能并制定相对模型排名或比较的标准自然语言处理基准。这种比较,或相对排名,使你可以为特定的自然语言处理任务(业务问题)选择最佳模型。
在本节中,我们将讨论 GPT-3 在一些标准自然语言处理任务中的表现,如图 2-13 中所示,并将其与类似模型在相应自然语言处理任务中的表现进行比较。
图 2-13. 传统自然语言处理任务
文本分类
文本分类是将文本分类到组织好的群组中的过程。通过使用自然语言处理,文本分类可以自动分析文本,然后根据其上下文分配一组预定义的标签或类别。
文本分类涉及分析提供的文本并为其分配标签、分数或其他属性来描述它。一些常见的文本分类示例包括情感分析、主题标记和意图检测。您可以使用多种方法让 GTP-3 对文本进行分类,从零样本分类(不给模型任何示例)到单样本和少样本分类(向模型展示一些示例)。
零样本分类
现代人工智能长期以来一直致力于开发能够对它们从未见过的数据执行预测功能的模型。这个重要的研究领域被称为零样本学习。同样,零样本分类是一种分类任务,其中模型在对一段文本进行分类时不需要在标记数据上进行先前训练或微调。GPT-3 目前在对未见过的数据产生的结果上要么优于,要么与针对特定目的进行微调的最先进的 AI 模型相媲美。要使用 GPT-3 执行零样本分类,我们必须为其提供兼容的提示。以下是一个零样本分类的示例,目标是执行事实核查分析,以确定推文中包含的信息是否正确或不正确。图 2-14 显示了一个基于零样本示例的信息正确性分类结果,相当令人印象深刻。
图 2-14. 零样本分类示例
这是我们的提示:
Analyze the tweet in terms of information correctness.
Tweet: "More than 50% of global scientists don't believe in climate change."
Analysis:
和输出结果:
The tweet is incorrect.
单样本和少样本分类
文本分类的另一种方法是通过对单个或少数训练示例对 AI 模型进行微调,分别称为单样本或少样本文本分类。当您提供如何对文本进行分类的示例时,模型可以根据这些示例学习有关对象类别的信息。这是零样本分类的超集,它允许您通过向模型提供三到四个多样化的示例来对文本进行分类。这对于需要一定程度的上下文设置的下游用例特别有用。
让我们来看一个少样本分类的例子。我们要求模型执行推文情感分析分类,并给出三个推文示例来说明每个可能的标签:积极的、中性的和消极的。正如你在图 2-15 中所看到的,配备了这样详细的上下文的模型,能够非常容易地对下一个推文进行情感分析。
注
当你重新创建书中的提示示例,或者创建自己的示例时,请确保你的提示中有足够的行间距。段落之后的额外一行可能会导致非常不同的结果,所以你需要尝试一下,看看哪种效果最好。
图 2-15. 少样本分类示例
这是我们的提示:
Analyze the tweet in terms of its sentiment. Depending on the sentiment, classify
it as positive, neutral, or negative.
Tweet: "I'm seriously worried that super intelligent AI will be disappointed in
humans."
Sentiment analysis(positive, neutral, negative): negative
Tweet: "I cannot wait for super intelligent AI to emerge and deepen our
understanding of the Universe."
Sentiment analysis(positive, neutral, negative): positive
Tweet: "I think it is neither super likely nor super unlikely that the super
intelligent AI will emerge one day."
Sentiment analysis(positive, neutral, negative): neutral
Tweet: "Super intelligent AI is going to be the most exciting discovery in human
history."
Sentiment analysis(positive, neutral, negative):
以下是输出:
positive
批量分类
在了解了 GPT-3 的少量样本分类后,让我们深入了解批量分类,它使您能够在单个 API 调用中对输入样本进行批量分类,而不是每次只对一个示例进行分类。它适用于您想要一次性分类多个示例的应用程序,就像我们检查的推文情感分析任务一样,但是分析一系列推文。
与少量样本分类类似,您希望提供足够的上下文以使模型实现期望的结果,但以批量配置格式提供。在这里,我们使用批量配置格式中的不同示例定义了不同类别的推文情感分类(图 2-16 和 2-17)。然后我们要求模型分析下一批推文。
图 2-16. 批量分类示例(第一部分)
图 2-17. 批量分类示例(第二部分)
这是我们的提示:
Analyze tweets in terms of their sentiment. Depending on their sentiment,
classify them as positive, neutral, or negative.
Tweet: "I’m seriously worried that super intelligent AI will be disappointed in
humans."
Sentiment analysis(positive, neutral, negative): negative
###
Tweet: "I cannot wait for super intelligent AI to emerge and deepen our
understanding of the Universe."
Sentiment analysis(positive, neutral, negative): positive
###
Tweet: "I think it is neither super likely nor super unlikely that the super
intelligent AI will emerge one day."
Sentiment analysis(positive, neutral, negative): neutral
###
Tweet: "Super intelligent AI is going to be the most exciting discovery in human
history."
Sentiment analysis(positive, neutral, negative): positive
###
Tweet:
1\. "I'm seriously worried that super intelligent AI will be disappointed in
humans."
2\. "I cannot wait for super intelligent AI to emerge and deepen our understanding
of the Universe."
3\. "I think it is neither super likely nor super unlikely that the super
intelligent AI will emerge one day."
4\. "Super intelligent AI is going to be the most exciting discovery in human
history."
5\. "This is the latest report on the state of the AI"
Tweet sentiment:
1\. negative
2\. positive
3\. neutral
4\. positive
5\. neutral
Tweet:
1\. "I can't stand bad techno music"
2\. "This is a tweet"
3\. "I can't wait for going to the Moon!!!"
4\. "AI is super cute ❤️"
5\. "Got VERY ANGRY now!!! "
Tweet sentiment:
1.
以下是输出:
1. negative
2\. neutral
3\. positive
4\. positive
5\. negative
如您所见,模型重新创建了批量情感分析格式并成功对推文进行了分类。现在让我们看看它在命名实体识别任务中的表现。
命名实体识别
命名实体识别(NER)是一项信息提取任务,旨在将未结构化文本中提及的命名实体定位并分类到预定义类别中,如人名、组织、地点、时间表达式、数量、货币价值、百分比等。
NER 有助于使响应更加个性化和相关,但当前最先进的方法在进行预测之前需要大量的数据进行训练。另一方面,GPT-3 可以在没有人提供任何训练示例的情况下,直接识别出人物、地点和组织等通用实体。
在以下示例中,我们使用了此书编写时处于测试版状态的 davinci-instruct-series 模型版本,该模型收集提示以训练和改进未来的 OpenAI API 模型。我们给它一个简单的任务:从示例电子邮件中提取联系信息。它在第一次尝试时成功完成了任务(图 2-18)。
图 2-18. NER 示例
这是我们的输入:
Extract the name and mailing address from this email:
Shubham,
It was great to talk to you the other day!
I'm SO looking forward to start working on our book.
Here's my address 1307 Roosevelt Street, San Francisco CA 94107
Best,
Sandra Kublik
Name and mailing address:
以下是输出:
Sandra Kublik
1307 Roosevelt Street, San Francisco CA 94107
文本摘要
文本摘要是一种生成长度文本的简洁准确摘要的技术,重点放在传达有用信息的部分上,而不失去整体意义。基于 GPT-3 的文本摘要旨在将冗长的 tl;dr^(2) 文本转换为它们的简化版本。这样的任务通常很难且成本高昂地手动完成。而有了 GPT-3,只需要一个输入和几秒钟的时间!
NLP 模型可以被训练以理解文档,并识别传达重要事实和信息的部分,然后生成摘要文本。然而,这样的模型在它们能够学习上下文并开始总结未见输入之前,需要大量的训练样本。
GPT-3 的抽象总结是解决信息提取问题的关键。通过生成摘要而不仅仅是提取关键信息,GPT-3 可以提供对文本的更全面和准确的理解。它采用零样本或少样本方法进行文本摘要,因此适用于各种用例。使用 GPT-3,您可以根据用例的不同方式进行文本摘要:基本摘要、一行摘要或年级摘要。让我们快速浏览一下这些方法。
大多数情况下,该模型能够以评论摘要的形式生成体面的结果,但有时会根据先前的上下文输出无关的结果。为了避免获得不想要的结果问题,您可以将“最佳”的参数设置为 3,这将始终给您 API 生成的三个最佳结果中的最佳结果。在图 2-19 所示的示例中,经过几次尝试和微小参数调整后,我们获得了体面的结果。
图 2-19. 文本摘要示例
这是我们的提示:
The problem is that when it works, it works, but when it doesn't, it really
doesn't. Luckily, the game's low points like the horrible binary stealth system
and the bugs and lack of QoL are either fixable or vastly outweighed by the good
bits, and the overall tally still ends up being much higher than the average of
many other games out there. That's helped a lot by the moment-to-moment gameplay,
which pays off just as much as the story beats; the movement system lets you
climb almost any short object, vehicles are weighty to drive, and have fantastic
interior and exterior designs, and guns feel properly loud and heavy. Its story
and narrative kept me glued to the screen, and everything – from sex scenes
and romance options to Keanu Reeves trying to kill you or help you throughout
the game – are remarkably well done. Cyberpunk 2077 is a game crafted with love,
and it shows.
tl;dr:
输出结果:
Cyberpunk 2077 is a game crafted with love, and it shows. The story is great,
the gameplay is great, the worldbuilding is great. It's not perfect by any means,
but it's still one of the best games I've played in years.
The Good:
- Great story and characters
- Amazing worldbuilding
- Excellent gunplay and movement system
The Bad:
- Binary stealth system (sometimes you're seen no matter what) - Bugs
由于许多人每天花费数小时阅读和撰写电子邮件,将它们进行摘要是 GPT-3 的一种广泛期望的用例。让我们看看 GPT-3 如何将三段邮件摘要为一行简洁的句子(参见图 2-20)。
图 2-20. 电子邮件摘要示例
为了达到期望的结果,我们粘贴了完整的电子邮件,然后简单地在末尾添加了“一句话摘要:”。我们还包括了一个“.”停止序列,告诉模型在生成摘要后应该停止其摘要生成。
我们的提示:
Hey Greg,
We are Sandra and Shubham. We are the co-authors of a GPT-3 based book that
aims to be a go-to manual for API users. It will provide the readers with the
knowledge to get started with GPT-3 as well as the context of the growing
ecosystem surrounding it. The book will be released by O'Reilly publishing
house by early 2022.
We'd like to connect and explore the possibility of collaboration with OpenAI
to evangelize access to API for people from all backgrounds and enable them to
build exciting new solutions using GPT-3\. We would appreciate your input to
ensure we accurately represent OpenAI's stance on GPT-3 and inform our readers
on the upcoming advancements/features of the API.
It will be great if we can catch up sometime this week to discuss it further?
Best,
S&S
one-sentence summary:
输出结果:
We're writing a book on GPT-3 and would like to connect with OpenAI to get a
better understanding of the API and the future developments.
文本生成
在引入 GPT-3 之前,人们普遍认为 AI 模型能够与人类进行短暂的对话,回答特定问题或处理特定任务。然而,这些模型还不够复杂,无法处理复杂的文本生成任务,一旦遇到复杂或抽象的内容,它们就开始失去对话的脉络。
在自然语言生成的复杂世界中,GPT-3 已经动摇了语言模型仅限于琐碎任务的观念。文本生成是 GPT-3 的最大优势。它能够生成几乎与人类写作的文本难以区分的文本内容。GPT-3 受到训练数据集中数十亿字词的训练,以响应各种提示生成文本。根据 OpenAI 的说法,它每天生成平均 45 亿字,根据 OpenAI 的说法。
在接下来的两个示例中,我们尝试使用 GPT-3 为个人生产力应用创业公司和社交媒体帖子创建内容。我们只给模型提供了最少的上下文,它在第一次尝试时就生成了图 2-21 和 2-22 中的许多响应。
文章生成
图 2-21. 文章生成示例
我们的提示:
Here are the top 5 tips for personal productivity.
输出结果如下:
1\. Develop a routine
Work can be overwhelming. You don't need to remember every little detail.
By having a routine, you will be able to work more efficiently.
2\. Avoid multitasking
If you are multitasking, you are bound to miss something. It is better to
work on one task at a time.
3\. Take breaks
It is true that if you do not take breaks, you will be more productive. However,
if you take breaks too often you will get tired and stressed. If you work more
effectively, you will shorten the time needed to complete a task.
4\. Learn to delegate
If you have a lot of work to do, you should not do everything on your own.
Delegate some of the work to others.
5\. Prioritize
Prioritize what you have to do and do the most important tasks first. Don't
worry about the small things.
社交媒体帖子生成
图 2-22. 社交媒体帖子生成示例
这是我们的提示:
Write a social media post for Facebook, Twitter, and Instagram about launching
a new beta version of the personal productivity app.
Facebook post:
输出结果如下:
"After extensive user testing, we are happy to announce that our latest update is
available for download! Our team has worked hard to create the best version of
our app yet. Download it now for free at www.app.com."
Twitter post:
"We're rolling out an updated version of your favorite productivity app! Now
available on iOS and Android. #productivity #beta"
Instagram post:
"We just released a new beta version of your favorite productivity app! Download
it today for free on iOS and Android. #productivity #beta"
结论
在本章中,我们介绍了 OpenAI Playground,提示工程以及 OpenAI API 的不同组件,接着是覆盖主要 NLP 任务的 Playground 示例。到目前为止,你应该已经了解了 API 是如何与不同组件配合工作的,以及如何使用 Playground 作为设计和尝试不同训练提示的基础。
在下一章中,我们将指导您如何使用 GPT-3 与不同的编程语言结合使用 API 来将其整合到您的产品中或从头开始构建全新的应用程序。
^(1) 对于两百多个文档,OpenAI 提供了beta API。
^(2) 一个长期存在的互联网缩写,意思是“太长,没看”。
第三章:使用 GPT-3 进行编程
几乎所有 GPT-3 的 NLP 功能都是使用 Python 编程语言创建的。但为了实现更广泛的可访问性,API 内置支持所有主要的编程语言,因此用户可以使用他们选择的编程语言构建基于 GPT-3 的应用程序。
在本节中,我们将通过复制一个示例来说明这是如何工作的,该示例涉及三种常见的编程语言:Python、Go 和 Java。
提醒一下:在每个特定语言的部分中,我们假设你对所讨论的编程语言有基本的了解。如果没有,你可以安全地跳过该部分。
使用 Python 的 OpenAI API
Python 是数据科学和机器学习任务中最流行的语言。与传统的数据科学编程语言(如 R 和 Stata)相比,Python 的优势在于其可扩展性和与数据库的良好集成。它被广泛使用,并有一个蓬勃发展的开发者社区,使其生态系统保持更新。Python 容易学习,并且带有诸如 NumPy 和 pandas 等有用的数据科学库。
你可以使用一个叫做 Chronology 的库将 GPT-3 与 Python 配对,该库提供了一个简单直观的接口。Chronology 可以减轻每次编写所有代码的单调工作。它的特点包括以下内容:
-
它异步调用 OpenAI API,允许你同时生成多个提示完成。
-
你可以轻松创建和修改训练提示;例如,修改一个不同示例中使用的训练提示相对比较简单。
-
它允许你通过将一个提示的输出插入到另一个提示中来链接提示。
Chronology 托管在 PyPI 上,并支持 Python 3.6 及以上版本。要安装该库,请运行以下命令:
pip install chronological
在通过 PyPI 安装 Python 库之后,让我们看一下如何通过 GPT-3 来总结一个给定文本文档的二年级阅读水平的示例。我们将向你展示如何调用 API,将训练提示作为请求发送,并将总结完成作为输出。我们已经在 GitHub 存储库 中为你发布了代码。
在此示例中,我们将使用以下训练提示:
My second-grader asked me what this passage means:
"""
Olive oil is a liquid fat obtained from olives (the fruit of *Olea europaea*;
family Oleaceae)...
"""
I rephrased it for him, in plain language a second-grader can understand:
"""
首先,导入以下依赖项:
# Importing Dependencies
from chronological import read_prompt, cleaned_completion, main
现在我们可以创建一个函数,该函数读取训练提示并提供完成输出。我们将此函数异步化,这允许我们进行并行函数调用。我们将使用以下 API 参数配置:
-
最大标记数=100
-
执行引擎=“Davinci”
-
温度=0.5
-
顶部-p=1
-
频率惩罚=0.2
-
停止序列=[“\n\n”]
# Takes in the training prompt and returns the completed response
async def summarization_example():
# Takes in a text file(summarize_for_a_2nd_grader) as the input prompt
prompt_summarize = read_prompt('summarize_for_a_2nd_grader')
# Calling the completion method along with the specific GPT-3 parameters
completion_summarize = await cleaned_completion(prompt_summarize,
max_tokens=100, engine="davinci", temperature=0.5, top_p=1,
frequency_penalty=0.2, stop=["\n\n"])
# Return the completion response
return completion_summarize
现在我们可以创建一个异步工作流,使用库提供的main
函数调用该工作流,并在控制台中打印输出:
# Designing the end-to-end async workflow, capable of running multiple prompts
# in parallel
async def workflow():
# Making async call to the summarization function
text_summ_example = await summarization_example()
# Printing the result in console
print('-------------------------')
print('Basic Example Response: {0}'.format(text_summ_example))
print('-------------------------')
# invoke Chronology by using the main function to run the async workflow
main(workflow)
将其保存为名为text_summarization.py的 Python 脚本,并从终端运行以生成输出。您可以从根目录运行以下命令:
python text_summarization.py
执行脚本后,您的控制台应打印出以下提示的摘要:
-------------------------
Basic Example Response: Olive oil is a liquid fat that comes from olives.
Olives grow on a tree called an olive tree. The olive tree is the most common
tree in the Mediterranean. People use the oil to cook with, to put on their
salads, and as a fuel for lamps.
-------------------------
如果您对 Python 不熟悉并且想要在不编写代码的情况下链式连接不同的提示,您可以使用基于Chronology 库构建的无代码界面来通过拖放创建提示工作流程。请查看我们的 GitHub存储库以了解更多您可以如何使用 Python 编程与 GPT-3 进行交互的示例。
使用 Go 调用 OpenAI API
Go 是一种开源编程语言,结合了其他编程语言的最佳特性,将解释的、动态类型的语言的编程便利性与静态类型的、编译的语言的效率和安全性结合在一起。开发人员通常称其为“21 世纪的 C 语言”。
Go 是构建需要高安全性、高速度和高模块化的项目的首选语言。这使得它成为金融科技行业许多项目的有吸引力的选择。Go 的主要特点如下:
-
使用便捷
-
最先进的生产力
-
高效的静态类型化
-
网络高效性能
-
充分利用多核处理能力
如果您完全不熟悉 Go 并想试试,您可以查看文档开始使用。
安装完成并且了解了 Go 编程的基础知识后,您可以按照以下步骤使用用于 GPT-3 的 Go API 包装器。要了解更多关于创建 Go 模块的信息,请参阅本教程。
首先,您将创建一个模块来跟踪和导入代码依赖项。使用以下命令创建并初始化gogpt
模块:
go mod init gogpt
创建gogpt
模块后,让我们将其指向此 GitHub 存储库以下载使用 API 的必要依赖项和包。使用以下命令:
go get github.com/sashabaranov/go-gpt3
go get: added github.com/sashabaranov/go-gpt3 v0.0.0-20210606183212-2be4a268a894
我们将使用与上一节相同的文本摘要示例。(您可以在以下存储库中找到所有代码。)
让我们首先导入必要的依赖和包:
# Calling the package main
package main
# Importing Dependencies
import (
"fmt"
"io/ioutil"
"context"
gogpt "github.com/sashabaranov/go-gpt3"
)
Go 编程将源文件组织成称为包的系统目录,这使得在 Go 应用程序之间重用代码变得更容易。在代码的第一行中,我们调用main
包,告诉 Go 编译器该包应该编译为可执行程序,而不是共享库。
注意
在 Go 语言中,每当你构建可重用的代码片段时,你会开发一个作为共享库的包。但是当你开发可执行程序时,你将使用 main
包来使包成为可执行程序。因为我们将在该包中调用主函数,main
将被设置为我们可执行程序的入口点。
现在,你将创建一个 main
函数,它将承载读取训练提示和提供完成输出的整个逻辑。使用以下配置作为 API 参数:
-
最大标记数=100
-
执行引擎=“Davinci”
-
温度=0.5
-
Top-p=1
-
频率惩罚=0.2
-
停止序列=[“\n\n”]
func main() {
c := gogpt.NewClient("OPENAI-API-KEY")
ctx := context.Background()
prompt, err := ioutil.ReadFile("prompts/summarize_for_a_2nd_grader.txt")
req := gogpt.CompletionRequest{
MaxTokens: 100,
Temperature: 0.5,
TopP: 1.0,
Stop: []string{"\n\n"},
FrequencyPenalty: 0.2,
Prompt: string(prompt),
}
resp, err := c.CreateCompletion(ctx, "davinci", req)
if err != nil {
return
}
fmt.Println("-------------------------")
fmt.Println(resp.Choices[0].Text)
fmt.Println("-------------------------")
}
该代码执行以下任务:
-
通过提供 API 令牌设置一个新的 API 客户端,然后将其留在后台运行。
-
以文本文件形式读取 " " 作为提示,从 prompts 文件夹中读取。
-
通过提供训练提示和指定 API 参数值(如温度、Top P、停止序列等)来创建完成请求。
-
调用
create completion
函数,并向其提供 API 客户端、完成请求和执行引擎。 -
以完成的形式生成响应,该响应朝向控制台的末尾打印。
然后,你可以将代码文件保存为 text_summarization.go 并从终端运行它以生成输出。使用以下命令从你的根文件夹运行该文件:
go run text_summarization.go
一旦你执行了该文件,你的控制台将打印出以下输出:
-------------------------
Olive oil is a liquid fat that comes from olives. Olives grow on a tree called an
olive tree. The olive tree is the most common tree in the Mediterranean. People
use the oil to cook with, to put on their salads, and as a fuel for lamps.
-------------------------
要了解如何使用 Go 编程与 GPT-3 进行交互的更多示例,请访问我们的 GitHub 存储库。
使用 Java 调用 OpenAI API
Java 是用于开发传统软件系统的最古老和最流行的编程语言之一;它还是一个带有运行时环境的平台。它是由 Sun Microsystems(现在是 Oracle 的子公司)于 1995 年开发的,截至今天,超过三十亿台设备都在运行它。它是一种通用的、基于类的、面向对象的编程语言,旨在具有较少的实现依赖性。其语法与 C 和 C++ 类似。三分之二的软件行业仍然将 Java 作为其核心编程语言。
让我们再次使用橄榄油文本摘要示例。与 Python 和 Go 一样,我们将向你展示如何调用 API、将训练提示作为请求发送,并使用 Java 获取摘要完成作为输出。
要在本地计算机上逐步浏览代码,请克隆我们的 GitHub 存储库。在克隆的存储库中转到 Programming_with_GPT-3 文件夹,然后打开 GPT-3_Java 文件夹。
首先,导入所有相关的依赖项:
package example;
// Importing Dependencies
import java.util.*;
import java.io.*;
import com.theokanning.openai.OpenAiService;
import com.theokanning.openai.completion.CompletionRequest;
import com.theokanning.openai.engine.Engine;
现在,你将创建一个名为 OpenAiApiExample
的类。你的所有代码都将成为它的一部分。在该类下,首先使用 API 令牌创建一个 OpenAiService
对象:
class OpenAiApiExample {
public static void main(String... args) throws FileNotFoundException {
String token = "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";
OpenAiService service = new OpenAiService(token);
现在 OpenAI API 的连接已经建立成一个service object的形式。从prompts文件夹中读取训练提示:
// Reading the training prompt from the prompts folder
File file = new File("D:\\GPT-3 Book\\Programming with GPT-3\\GPT-3
Java\\example\\src\\main\\java\\example\\prompts\\
summarize_for_a_2nd_grader.txt");
Scanner sc = new Scanner(file);
// we just need to use \\Z as delimiter
sc.useDelimiter("\\Z");
// pp is the string consisting of the training prompt
String pp = sc.next();
然后,您可以使用以下配置创建一个 API 参数的完成请求:
-
最大令牌数=100
-
执行引擎=“Davinci”
-
温度=0.5
-
Top-p=1
-
频率惩罚=0.2
-
停止序列=[“\n\n”]
// Creating a list of strings to used as stop sequence
List<String> li = new ArrayList<String>();
li.add("\n\n"''");
// Creating a completion request with the API parameters
CompletionRequest completionRequest = CompletionRequest.builder().prompt(pp)
.maxTokens(100).temperature(0.5).topP(1.0).frequencyPenalty(0.2).stop(li)
.echo(true).build();
// Using the service object to fetch the completion response
service.createCompletion("davinci",completionRequest).getChoices().forEach
(System.out::println);
将代码文件保存为text_summarization.java并从终端运行以生成输出。您可以使用以下命令从根文件夹运行文件:
./gradlew example:run
您的控制台应该打印与以前示例相同的摘要。有关如何使用 Java 与 GPT-3 进行交互的更多示例,请参阅我们的 GitHub 存储库。
GPT-3 沙盒由 Streamlit 提供支持
在这一节中,我们将带您了解 GPT-3 沙盒,这是我们创建的一个开源工具,提供样板代码,帮助您只需几行 Python 代码就能将您的想法变为现实。我们将向您展示如何使用它,以及如何根据您的特定应用进行自定义。
我们沙盒的目标是让您能够创建酷炫的 Web 应用程序,无论您的技术背景如何。它是建立在 Streamlit 框架之上的。
为了配合本书,我们还创建了一个视频系列,其中提供了逐步创建和部署 GPT-3 应用程序的说明,您可以通过扫描 图 3-1 中的 QR 码来访问。请在阅读本章时一并参考。
图 3-1. GPT-3 沙盒视频系列的 QR 码
我们在示例中使用 Visual Studio Code 作为 IDE,但您可以随意使用任何 IDE。在开始之前,您需要安装 IDE。请确保您正在运行 Python 版本为 3.7 或更高版本。您可以通过运行以下命令确认已安装的版本:
python --version
通过在您的 IDE 中打开新终端并使用以下命令克隆此存储库的代码:
git clone https://github.com/Shubhamsaboo/kairos_gpt3
在您克隆存储库之后,您 IDE 中的代码结构应该如 图 3-2 所示。
图 3-2. 沙盒文件目录结构
您所需要创建和部署 Web 应用程序的一切都已经在代码中存在。您只需要调整一些文件,以定制沙盒以适应您的特定用例。
创建一个Python 虚拟环境,命名为env。然后您可以安装所需的依赖项。
转到email_generation文件夹。你的路径应该像这样:
(env) kairos_gpt3\GPT-3 Sandbox\email_generation>
从那里,运行以下命令:
(env) kairos_gpt3\GPT-3 Sandbox\email_generation> pip install -r requirements.txt
现在您可以开始定制沙箱代码了。 您需要查看的第一个文件是training_data.py。 打开该文件并用您想要使用的训练提示替换默认提示。 您可以使用 GPT-3 Playground 尝试不同的训练提示(有关自定义沙箱的更多信息,请参阅第二章和我们的视频)。
您现在可以根据应用程序用例的要求调整 API 参数(最大标记数、执行引擎、温度、Top P、频率惩罚、停止序列)。 我们建议您在 Playground 中尝试不同的参数值以确定哪些值适用于您的用例。 一旦您获得满意的结果,那么您就可以在model_training_service.py文件中更改值。
就是这样! 您的基于 GPT-3 的 Web 应用程序现在已准备就绪。 您可以使用以下命令在本地运行它:
(env) kairos_gpt3\GPT-3 Sandbox\email_generation> streamlit run gpt_app.py
确保它正常工作,然后您可以使用 Streamlit 共享将应用程序部署到互联网,以向更广泛的受众展示它。 我们的视频提供了完整的部署演示。
注意
本应用程序遵循一个简单的工作流程,其中训练提示从 UI 接收单个输入并生成响应。 如果您的应用程序需要更复杂的工作流程,其中训练提示接受多个输入,请通过查看脚本app1.py、app2.py和gpt_app.py来自定义 UI 元素。 有关详细信息,请参阅Streamlit 文档。
在接下来的几章中,我们将探讨 GPT-3 的不同应用以及成功的企业是如何基于它构建的。
使用基于 GPT-3 的应用程序上线
您准备好将基于 GPT-3 的应用程序投入生产了吗?
在您开始之前,让我们讨论一些风险缓解措施。 在第六章中,您将了解一些 GPT-3 可能被用来造成伤害的方法。 为了防范这些恶意行为,OpenAI 已经制定了必须在您的应用程序上线之前遵循的准则和程序。 目前,您可以向五个人提供 API 而无需事先批准,但是如果需要更多,则需要申请预上线生产审查。 我们强烈建议您在申请之前阅读使用指南。
当你提交Pre-Launch Review Request时,OpenAI 团队会详细审查你的用例,并标记任何潜在违反 API 安全最佳实践的行为。如果你的请求被批准,OpenAI 将为你提供一个最大的消费限制,随着你建立记录,这个限制会随着时间增加。随着用户基础的增长,你可以提交Quota Increase Request。这样一来,你就可以自由地构建和部署你的应用程序,而 OpenAI 则会监控其对平台的潜在影响。
结论
在本章中,我们学习了如何使用 OpenAI API 来编程使用 Python、Go 和 Java 语言。我们还介绍了使用 Streamlit 创建的低代码沙盒环境,它将帮助你快速将你的想法变成应用程序。最后,我们查看了上线 GPT-3 应用程序的关键要求。这一章节为你提供了 API 的编程前景;未来我们将更深入地探讨 GPT-3 赋能的蓬勃生态系统。
第四章:GPT-3 作为下一代创业公司的发射台
在发布 GPT-3 之前,大多数人与人工智能的互动局限于某些特定任务,比如要求 Alexa 播放你喜欢的歌曲或使用 Google 翻译与不同语言交流。研究人员已成功开发出能够执行日常任务的人工智能,但到目前为止,人工智能尚未能够像人类一样在没有清晰、明确定义的指令的情况下发挥抽象任务方面的创造潜力。
随着 LLM 时代即将来临,我们正在目睹一个重大的范式转变。LLM 向我们展示了,通过增加模型的规模,它们可以执行类似于人类的创造性和复杂的任务。现在最大的问题是:人工智能能够执行创造性活动吗?
人工智能的创造潜力一直是一个令人兴奋的研究领域,尽管大部分隐藏在像 Google 和 Facebook 这样的公司的紧密研发墙后。GPT-3 正在改变我们与人工智能的互动方式,并赋予人们建立下一代应用的能力,这些应用在其发布之前似乎是一个遥不可及的想法。IBM 研究的多媒体和视觉经理约翰·史密斯指出:“对于人工智能来说,随机提出新颖的东西很容易。但要提出新颖、意外且有用的东西却很难。”而 Somatic 的 CEO 杰森·托伊则问道:“我们能否将人类认为美丽和富有创意的东西放入算法中?”^(1)
作为一种服务的模型
在本章中,我们将向您展示 GPT-3 如何通过为创意企业家提供正确的技术,激发他们的想象力,推动下一波创业浪潮。我们还将探讨人工智能研究在多个领域的商业化进展。我们将与支持这些倡议的风险投资家之一交谈,以了解蓬勃发展的 GPT-3 经济的财务方面。
OpenAI API 的创建故事与本章中许多创业公司的故事类似。我们采访了 OpenAI 的彼得·韦林德。他告诉我们的是一个大胆实验、快速迭代和利用智能设计实现规模经济的故事(以尽可能低的成本为条件提供大规模的强大模型)。
Welinder 概括了 OpenAI 的使命,提出了三个关键点:“开发通用人工智能,确保其安全,然后最后将其部署到世界上,以使其最大程度地造福所有人类。”因此,公司正在致力于开发可以应用于越来越广泛需求的人工智能。
希望尽快且安全地实现通用人工智能,OpenAI 决定押宝的技术之一是大型语言模型,具体是 GPT-3。Welinder 提到尝试 GPT-3 时说:“这是我们第一次感觉到,‘实际上,这似乎相当有用,它在许多学术基准任务上取得了最先进的结果等等。’”
对于可能性感到兴奋的 Welinder 和四位同事进行了讨论,讨论如何最好地利用这个算法:建立一个翻译引擎?一个写作助手?一个客户服务应用?然后 Welinder 说,“为什么不直接将这项技术提供为 API,让任何开发人员在其基础上构建自己的业务呢?”
API 的方法与 OpenAI 的目标和使命相一致,最大程度地促进了技术的采用和影响,赋予社区成员发明应用程序的能力,这些应用程序 OpenAI 团队无法预测。这也使产品开发交给了全球技术开发人员,释放出 OpenAI 团队专注于其真正擅长的事情:开发健壮、开创性的模型。
到目前为止,研究人员一直专注于设计可扩展、高效的训练系统,以充分利用 GPU 的效率。但是很少关注在实际数据上运行这些模型并为实际应用得到一些结果。因此,OpenAI 团队决定加倍努力提升核心 API 体验,专注于快速推理和低延迟等方面。
在计划推出 API beta 版的六个月前,据 Welinder 称,研究人员将延迟时间减少了约十倍,同时将吞吐量增加了数百倍:“我们投入了大量工程工作,确保这些模型的 GPU 尽可能高效,以及以非常低的延迟调用它们,并使其可扩展。”通过 API 使用模型而不需要自己的 GPU,使其成本效益高,并且对普通开发人员来说易于访问,可以尝试各种用例和尝试新事物。非常低的延迟也很重要,以便轻松进行迭代。“你不想投入某些东西,然后等待几分钟才能得到响应,这在 API 的最早阶段是这样的情况。而现在,你可以实时看到模型输出的内容,”Welinder 说。
OpenAI 认为模型会不断增长,这会使开发者难以部署它们;团队希望消除这一障碍。“因为你需要如此多的 GPU 和 CPU 来应对一个使用案例,这样做会花费你太多成本。你自己部署这个模型是没有经济意义的,” Welinder 说道。相反,公司决定通过 API 与开发者分享模型。“成千上万的开发者使用相同的模型,这就是你可以实现规模经济的方式,” Welinder 补充道。“这降低了每个人访问这些模型的价格,并进一步扩大了分发范围,让更多人可以尝试这些模型。”
将 OpenAI API 私人测试版发布带来了很多惊喜。之前备受关注的模型 GPT-2 很少有真实世界的应用案例,所以团队希望 GPT-3 能够更有用。事实证明确实如此,并且非常迅速。
另一个惊喜,Welinder 说,“我们平台上很多人不是程序员。他们是各种类型的作者、创作者,是设计师和产品经理等。”在某种程度上,GPT-3 改变了成为开发者的意义:突然之间,建立人工智能应用程序,你不需要知道如何编程。你只需要擅长使用提示来描述你想让人工智能做什么(如第二章中所讨论的)。
Welinder 和他的团队发现,“很多擅长的人根本没有机器学习背景”,而那些有机器学习背景的人则必须放弃以往对许多问题的思考方式才能使用 GPT-3。许多用户构建了基于 GPT-3 的应用程序而不需要编码。OpenAI 团队,无意中,降低了创建应用程序的障碍:这是迈向普及人工智能的第一步。“核心战略是使 API 对尽可能多的人可用,”Welinder 说:“确保使用我们的技术的门槛低是我们使命的核心。这就是我们建立这个 API 的原因。” GPT-3 的另一个意外用途是编码。模型的编码潜力的早期迹象促使 OpenAI 加倍努力设计编码用例。他们的努力导致了 Codex,在 2021 年中期发布。^(2)
除了惊人多样的用例,API 还孕育了一个全新的创业生态系统:“在发布 API 几个月后,就有几家公司完全建立在 OpenAI API 之上。其中许多公司现在已经以相当高的估值融资,”Welinder 表示。
OpenAI 的核心原则之一是与客户密切合作。Welinder 表示:“每当我们有新的产品功能时,我们都会尝试找到我们知道会发现这些功能有用的客户,并创建直接的沟通渠道,在那里我们提供他们早期访问权限。”例如,在更广泛地在 API 中发布该功能之前,OpenAI 与几个客户合作对搜索功能进行了优化。
OpenAI 主要关注确保 AI 的安全和负责任使用。除了许多积极的结果外,随着 AI 变得更加普及,公司也看到了滥用的潜力不断增长。他们选择在私人测试版中推出 API 的主要原因之一是了解人们如何使用模型并检查其滥用的潜力。他们尽可能多地检查不良模型行为的实例,并利用所学知识来指导他们的研究和模型训练。
Welinder 从 API 驱动的项目的广度和创造力中获得了灵感。“未来十年将是令人兴奋的,因为人们将在这项技术基础上构建的所有东西。我认为通过共同努力,我们可以创建一些真正良好的防范措施,以确保这些技术、这些即将构建的应用对我们的社会将会非常非常积极。”
新创业生态系统:案例研究
在 OpenAI 发布 API 不久之后,初创公司的景观充满了使用它来解决问题的公司。这些企业家是最先进的自然语言处理产品的先驱,并且他们的经历对于计划基于 OpenAI API 的未来商业应用的人尤为有启发性。本章的其余部分通过对一些以 GPT-3 为核心的顶尖初创公司领导人的采访,展示了这个充满活力的景观。他们与我们分享了他们迄今在创造性艺术、数据分析、聊天机器人、文案撰写和开发者工具等领域所学到的知识。
GPT-3 的创造性应用:Fable Studio
GPT-3 最令人兴奋的能力之一是讲故事。您可以给模型一个主题,并要求它在零-shot 情境下撰写故事。
这些可能性使作家们扩展了他们的想象力,并产生了非凡的作品。例如,由 Jennifer Tang 执导并与 Chinonyerem Odimba 和 Nina Segal 共同开发的戏剧 AI,描绘了人类与计算机思维之间独特的合作关系,借助 GPT-3 的帮助。作家 K Allado-McDowell 将 GPT-3 视为与其共同撰写书籍 Pharmako-AI (Ignota Books) 的合作者,Allado-McDowell 表示,“重新构想了面临多重危机的世界的控制论,对我们如何看待自己、自然和 21 世纪的技术产生了深远的影响。”
我们与 Fable Studio 联合创始人兼首席执行官 Edward Saatchi,以及 Fable Studio 首席技术官 Frank Carey 坐下来,了解他们在使用 GPT-3 创造新型互动故事类型的过程。Fable 将 Neil Gaiman 和 Dave McKean 的儿童书 The Wolves in the Walls 改编成了一部获得艾美奖的虚拟现实(VR)电影体验。Lucy,电影的主角,可以通过 GPT-3 生成的对话与人进行自然交流。Lucy 甚至于 2021 年亮相于圣丹斯电影节。
Saatchi 和 Carey 注意到他们的观众正在与露西建立情感联系。这促使他们专注于使用 AI 创建虚拟存在,以及一种将 AI 和叙事编织在一起的新类型的叙事和娱乐。正如 YouTuber Bakz Awan 所说,“我们将拥有全新类型的电影和体裁:我们将拥有交互式、综合体验。”
Carey 解释说,观众通常认为 AI 承担了角色的角色,就像演员一样:一个 AI 对应一个角色。相反,Fable 的 AI 是一个讲故事者,它拥有各种各样的角色。Carey 相信可以开发出一个与最优秀的人类作家一样熟练和有创造力的 AI 讲故事者。
虽然露西的对话大多是通过文字和视频聊天进行的,但 Fable 还在尝试将 GPT-3 应用于 3D 模拟世界,以获得沉浸式虚拟现实体验。团队使用 AI 生成音频和手势,并同步唇语动作。他们使用 GPT-3 生成了角色与观众互动的大部分内容。其中一些内容可以预先撰写,但大部分必须即兴创作。露西的合作者们广泛使用了 GPT-3,在她的圣丹斯出现期间以及在电影创作过程中都是如此。露西还出现在 Twitch(一种交互式直播平台,她似乎在播放游戏或讲故事)。在这两种情况下,Carey 说,“超过 80%的内容是使用 GPT-3 生成的。”
这与团队早期的纯文本实验形成了鲜明对比,这些实验在很大程度上是由人为撰写的,并且遵循了更线性的叙事。Fable Studio 团队通常不会使用 GPT-3 实时处理观众的不可预测的回应;他们处理这些的技术早于 GPT-3。但是,他们有时会将 GPT-3 用作写作伙伴或观众的替代者,以考虑观众可能给出的潜在回应。
Carey 解释道,GPT-3 对于人类作者来说也是一个有用的工具:“对于即兴内容,我们正在使用 GPT-3 进行测试,这样你就可以将 GPT 视为人类,你就像在扮演角色一样。与 GPT-3 来回交流有助于你想出,比如说,在这种情况下,某人会问什么?接下来会有什么?这有助于作者尽可能多地涵盖对话的结果。”这有助于作者涵盖尽可能多的对话结果。“有时它曾是一个写作伙伴,有时它是一些能填补正在发生的事情周围空白的东西,”Saatchi 说。“所以我们可能会想:这个角色这周会发生什么?下周这个角色会发生什么?GPT-3 [填补了]其中一些空白。”
Fable 团队在 2021 年圣丹斯电影节上充分利用了 GPT-3 的实验,在那里 Lucy 与节日参与者实时合作创作了她自己的短片 德古拉:血色冷汤[³],而 Fable Studio 和参与者则在策划她产生的想法,与参与者交流,并将观众的想法反馈到 GPT-3 中。
用 GPT-3 给一个一致的角色赋能是一个特殊的挑战。Saatchi 解释说,GPT-3 非常适用于从角色转向参与者的用例,比如疗法会话,以及对于那些对它们有“非常丰富的关于它们的知识库,比如名人或者像耶稣、圣诞老人或者德古拉这样的原型角色。但显然,它的使用范围会受到已经写入的信息的限制,”他指出,任何与使用 GPT-3 动力驱动角色进行广泛互动的人很快就会达到 GPT-3 的限制。“它试图给你提出的故事找到一个好的答案。但如果你在提示中讲述一个荒诞的故事,它也会提出荒诞的答案。对吧?所以它不是一个讲真话的人。我会说它天生就是一个讲故事的人;它只是试图在语言中找到模式。”关于 GPT-3,许多人没有意识到的一点是,它的底线任务是讲故事,而不是“真相”,Carey 说。
“仅仅使用 GPT-3 生成一堆随机情景是一回事,但确保它是以那个角色的语调发言是另一回事,” Carey 补充道。“因此,我们有一些技巧用来创建那些提示,以便角色对 GPT-3 有明确的定义。” 他承认团队在确保 GPT-3 理解角色的语音并保持在角色可能的回应范围内方面付出了额外的努力。他们还必须避免让参与者影响角色,因为 GPT-3 可以捕捉到微妙的信号。Carey 解释说,如果 Lucy 与成年人互动,“它只会配合气氛,但如果 Lucy 是一个八岁的孩子,它可能会从参与者那里捕捉到更多的成年人气息,并将其反馈给他们。但我们实际上希望 [Lucy] 以八岁孩子般的语气说话。”
说服 OpenAI 允许 Fable 利用 GPT-3 创建虚拟人物需要一些谨慎。“我们非常有兴趣让我们的角色作为角色与人交谈,”Carey 说。“你可以想象,这可能是他们的一个问题领域,对吧?[它]肯定有可能被某人假装成人类而被恶意使用。”Fable Studio 和 OpenAI 团队花了一些时间解决创建逼真角色和模仿人类之间的区别,然后 OpenAI 批准了 Fable 的用例。
OpenAI 还有另一个要求:在任何虚拟实体在观众面前假装“真实”进行叙述实验时,Fable 团队必须在过程中保持人类参与其中。根据 Carey 的说法,让 GPT-3 在面向数千人的体验中发挥作用是具有挑战性的。尽管如此,他仍然认为大型语言模型将会是一个福音,“即使用于预先撰写内容或在更宽容的领域中‘实时’使用且没有限制。”
Carey 认为,GPT-3 作者最好将其作为协作工具交到擅长讲故事艺术的人手中,这样可以获得更好的结果,而不是期望 GPT-3 完成所有工作。
谈及成本时,他认为故事讲述用例面临的挑战是,每次 API 请求都要保持 GPT-3 与发展中的故事一致,必须“提供所有细节并生成一些补充内容。所以仅仅生成几行,你就被收取了整个 token 集的费用。这可能是一个挑战。”
Fable Studio 如何应对定价问题?工作室成功地大部分避开了这个问题,主要是通过预生成进行实验,“你预生成了一堆选项,然后可以使用搜索找到正确的选项来回复,” Carey 说。
他们还找到了降低 API 用户数量的方法:与其让一个庞大的观众通过人工智能与 Lucy 互动,“我们有点转向了一种模式,即 Lucy 实际上是在进行一对一的对话,但是在 Twitch 直播中。” 观众通过 Twitch 观看而不是发起 API 调用,这缓解了带宽问题,限制了 Lucy 在任何给定时间与人互动的人数,并扩大了观众群体。
Saatchi 提到了一个传闻,即 GPT-4 正在探索对虚拟空间的空间理解,他认为这比仅限于语言的聊天机器人具有更多潜力。他建议探索这种用例的人们专注于在虚拟世界中创建角色。Saatchi 指出,Replika 是一个创建了虚拟 AI 朋友角色的公司,现在正在探索进入元宇宙,其中虚拟实体将拥有自己的公寓,可以相遇并与其他人类用户以及最终与人类用户进行交互。“重点是要创造一个感觉活生生的角色,而 GPT-3 只是众多工具中的一种。为这些角色提供对他们正在导航的空间的真正理解可能会为这些角色带来学习的机会。”
未来会有什么?Carey 觉得未来版本的 GPT-3 在构建元宇宙方面有一席之地,元宇宙是一个平行的数字现实,人类可以像在真实世界中一样自由地交互和进行活动。他设想它能够生成想法,并让人参与其中以进行策划。
Saatchi 认为,将语言减弱为唯一的交互模式具有创造更有趣和复杂的与 AI 互动的潜力。“我确实认为 3D 空间为我们提供了让 AI 具有空间理解的机会,”他继续说道。Saatchi 所展望的元宇宙赋予了 AI 走动和探索的能力,同时也给了人类成为循环的一部分并帮助训练虚拟存在的机会。他总结道我们需要激进的新思维,并且元宇宙提供了在 3D 空间中放置 AI 角色和“允许它们与人类一起过模拟生活”的重大机会。
GPT-3 的数据分析应用:Viable
创业公司Viable的故事是一个很好的例子,说明从开始着手一个商业理念到实际找到产品市场契合度和客户群体的过程有多大变化。Viable 通过使用 GPT-3 总结客户反馈来帮助公司更好地了解他们的客户。
Viable 汇总了诸如调查、帮助台票、实时聊天记录和客户评论等反馈。然后,它识别主题、情绪和情感,从这些结果中提取见解,并在几秒钟内提供摘要。例如,如果问到“我们的客户对结账体验感到沮丧的是什么?”Viable 可能会回答:“客户对结账流程感到沮丧,因为加载时间太长。他们还希望能够在结账时编辑地址并保存多种支付方式。”
Viable 最初的商业模式涉及帮助早期初创公司通过调查和产品路线图找到产品市场契合度。丹尼尔·埃里克森说,请求开始涌入来自更大公司的请求,要求支持分析大量的文本,如“支持票、社交媒体、应用商店评论和调查回复”改变了一切。埃里克森是 Viable 的创始人兼 CEO,也是 OpenAI API 的早期采用者。他解释说:“我实际上花了大约一个月的时间进行实验,简直就是将我们的数据放入 Playground 中,尝试不同的提示和类似的事物。最终,我得出了结论,[GPT-3] 可以驱动一个非常强大的问答系统。”
Erickson 和他的同事们开始使用 OpenAI API 与大型数据集进行交互并生成见解。他们最初使用了另一个自然语言处理模型,取得了平平的结果,但当他们开始使用 GPT-3 时,团队看到“在各方面至少有 10% 的增长。当我们说从 80% 提升到 90% 时,对我们来说是一个相当大的提升。”
基于这一成功,他们将 GPT-3 与其他模型和系统结合起来,创建了一个问答功能,允许用户用简单的英语提问并获得答案。Viable 将问题转换为一个复杂的查询,可以从数据库中提取所有相关反馈。然后,它通过另一系列的摘要和分析模型运行数据,生成精炼的答案。
此外,Viable 的系统每周为客户提供“一个由 12 段组成的摘要……概述了他们的主要投诉、主要赞美、主要请求和主要问题。”正如你可能期望的那样,作为客户反馈专家,Viable 在每个软件生成的答案旁边都有赞和踩按钮。他们将这些反馈用于重新训练模型。
人类也是这个过程的一部分:Viable 有一个标注团队,他们负责构建训练数据集,包括内部模型和 GPT-3 微调的数据集。他们使用当前版本的微调模型生成输出,然后由人类评估其质量。如果输出不合理或不准确,他们会重新写。一旦他们有了满意的输出列表,他们就会将该列表反馈到下一个训练数据集的迭代中。
Erickson 指出 API 是一个巨大的优势,因为它将托管、调试、扩展和优化留给了 OpenAI:“对于几乎与我们的技术无关的任何事情,我更愿意购买而不是构建。即使对我们的技术至关重要,使用 GPT-3 也是有意义的。”因此,他们的理想解决方案是将 GPT-3 用于其流程的所有元素。但由于成本问题,他们不得不优化其使用:“我们有一些公司向我们提供数十万个数据点,每个数据点长度从五到一千个单词不等。”将 GPT-3 用于一切可能会很昂贵。
相反,Viable 主要使用内部模型来构建数据结构,这些模型是建立在 BERT 和 ALBERT 之上的,并使用 GPT-3 的输出进行训练。这些模型现在在主题提取、情感分析和许多其他任务方面达到或超过了 GPT-3 的能力。Viable 还切换到了基于使用量的价格模型,该模型建立在 OpenAI 的 API 价格之上。
Erickson 坚称 GPT-3 在准确性和可用性方面给 Viable 带来了竞争优势。我们已经提到了 Viable 令人印象深刻的 10% 的准确度提升。但可用性如何呢?Viable 的大多数竞争对手都构建了专门为专业数据分析师设计的工具。Viable 觉得这个受众太狭窄了:“我们不想构建只有分析师才能使用的软件,因为我们觉得那样会限制价值。我们想做的是帮助团队使用定性数据做出更好的决策。”
相反,Viable 的软件本身就是“分析师”。用户可以通过自然语言迭代更快,这要归功于一个反馈循环,允许他们用自然语言提问关于他们的数据的问题,并获得快速准确的回答。
Erickson 分享了 Viable 的一些下一步计划:它将很快引入量化数据和分析产品分析。最终,Erickson 想要给用户提供进行全面客户洞察分析的能力,并提出诸如“有多少客户正在使用功能 X?”和“使用功能 X 的客户中,他们认为应该如何改进?”等问题。
最终,Erickson 总结道:“我们销售的是生成的见解。因此,我们使这些见解越加深入和强大,以及我们越快地传递这些见解,我们就创造了越多的价值。”
GPT-3 的聊天机器人应用:Quickchat
GPT-3,作为一种非常擅长语言交互的技术,是增强现有聊天机器人体验的明显选择。虽然许多应用程序通过 AI 聊天机器人角色来娱乐用户,比如哲学家 AI和Talk Kanye,但有两家公司特别利用这一能力在其业务应用中:Quickchat 和 Replika。Quickchat 以其 AI 聊天机器人角色 Emerson AI 而闻名,可通过 Telegram Messenger 和 Quickchat 移动应用访问。Emerson AI 拥有广泛的世界知识,包括对比 GPT-3 用于训练的更多近期信息的访问;支持多种语言;能够进行连贯的对话;而且很有趣。
Quickchat 的联合创始人 Piotr Grudzień和 Dominik Posmyk 对 GPT-3 从一开始就充满了兴奋,并且对在新产品中利用它充满了想法。在他们早期对 OpenAI API 进行的实验中,他们一直在思考“机器和人之间的界面的演变”这个概念。Grudzień解释说,由于人与计算机之间的交互不断发展,自然语言将是合乎逻辑的下一步:毕竟,人们更喜欢通过对话进行交流。他们得出结论,GPT-3 似乎有潜力实现与计算机进行类似人类的聊天体验。
格鲁吉涅说,创始人中没有一个人曾经构建过传统的聊天机器人应用程序。以“初学者的心态”对待这项任务帮助他们保持清新,并对解决问题持开放态度。与其他聊天机器人公司不同,他们并没有开始时就有成为最佳客户支持或营销工具的野心。他们最初思考的是:“如何让一个人以令人敬畏的方式与机器交谈,并且是他们尝试过的最好的事情?”他们想要制作一个不仅完成简单功能(如收集客户数据和提供答案),而且还能准备回答非脚本化的客户问题或进行愉快的闲聊的聊天机器人。“而不是说‘我不知道’,”格鲁吉涅补充道,它可以“借助对话 API 并继续对话。”
波斯米克补充道:“我们的使命是赋予人们人工智能,而不是取代他们。我们相信,在未来的十年里,人工智能将加速教育、法律、[和]医疗等关键行业的数字化,并提高我们在工作和[日常生活中]的生产力。”为了展示这个遥远的使命,他们创建了 Emerson AI,一款由 GPT-3 提供支持的智能通用聊天机器人应用程序。
尽管 Emerson AI 拥有日益壮大的用户社区,但其真正目的是展示由 GPT-3 提供支持的聊天机器人的能力,并鼓励用户与 Quickchat 合作为其公司实施这样的角色。 Quickchat 的产品提供是一款通用的对话人工智能,可以谈论任何主题。客户,主要是成立已久的公司,可以通过添加特定于其产品(或任何他们想要的主题)的额外信息来定制聊天机器人。Quickchat 已经看到了多样的应用,例如自动化典型的 FAQ 客户支持问题解决以及实施一个 AI 角色来帮助用户搜索内部公司知识库。
与典型的聊天机器人服务提供商不同,Quickchat 不会构建任何对话树或刚性场景,也不需要教导聊天机器人以特定方式回答问题。相反,格鲁吉涅解释说,客户遵循一个简单的流程:“您复制粘贴包含您希望您的 AI 使用的所有信息的文本 [然后] 点击重新训练按钮;[它] 需要几秒钟来吸收知识,就这样。”现在经过数据训练的聊天机器人已经准备好进行测试对话了。
谈到开源模型和 OpenAI API 之间的权衡,Grudzień分享道,“OpenAI API 很好用,因为你不需要担心基础架构,延迟或模型训练。它只是调用一个 API 并得到一个答案。它非常可靠。”但是,他认为你为质量付出了相当高的代价。相比之下,开源模型似乎是一个很好的免费选择。实际上,“你确实需要支付云计算的成本。它需要 GPU 和设置 GPU 以使这些模型快速工作,然后对你自己的模型进行微调,” Grudzień承认,这并不是一个琐碎的过程。
像 Viable 的 Erickson 一样,Grudzień和 Posmyk 努力在每一个 API 调用中提供价值。但他们也希望随着越来越多的竞争性模型的发布,OpenAI 的 API 定价会“下降或者会达到某个水平,仅仅是因为竞争的压力。”
Quickchat 学到了什么?首先,要建立一个盈利的业务,需要的不仅仅是炒作。像推出 GPT-3 那样的大型媒体轰动可以为激动人心的爱好者提供初步的涌入,"但是人们会感到厌倦,等待下一个大事件。唯一能生存下来的产品是那些真正解决了人们关心的问题的产品," Grudzień说。“没有人会仅仅因为它是 GPT-3 就使用你的产品。它需要提供一些价值,无论是有用的还是有趣的,或者解决一些问题。GPT-3 不会为你做到这一点。所以你需要把它当作又一个工具来对待。”
另一个关键的教训是制定可靠的性能指标。“每当你构建一个机器学习产品时,评估都是棘手的,” Grudzień说。在他看来,由于 GPT-3 是强大的,并且在难以量化的自然语言领域运作,评估其输出质量是复杂且繁琐的。正如突破性的东西一样令人兴奋,他说,“用户可能会根据你最差的性能来评判你,最好是根据你的平均性能。”因此,Quickchat 优化了用户满意度。对于公司来说,设计一个能捕捉与用户满意度和高留存率相关的变量的度量标准至关重要,这两者直接转化为更高的收入。
另一个挑战,也许出乎意料的是 GPT-3 对创造力的嗅觉。“即使你将温度设定得非常低,你给它提供的提示它仍然会使用非常小的提示,然后基于它拥有的广泛知识生成一些东西,” Grudzień解释道。这使得它很容易生成诸如诗歌、营销文案或幻想故事等创意文本。但大多数聊天机器人都是用来解决客户问题的。“它需要有可预测的、重复的性能,同时还需要有对话性和在某种程度上的创造性,但不要推得太远。”
大型语言模型有时会输出“奇怪的”、“空洞的”或者“不那么好的”文本,因此需要人类干预。“如果你开始衡量它是否满足了某些条件或者完成了任务,那么它会被证明非常有创意,但在十次尝试中,它只成功了六次——对于有付费客户的实际业务来说,这就相当于零。” 因此,要实现成功的业务应用,你需要许多内部系统和模型来限制创意并提高可靠性。“为了为我们的客户创建一个 99% 时间正常工作的工具,我们开发了许多防御机制,”格鲁吉尼说。
这些天,Quickchat 致力于与客户深入合作,确保他们的 API 性能使他们在使用案例中取得成功。格鲁吉尼最兴奋的是看到客户构建的东西:“我们真的非常希望看到我们的聊天引擎在成千上万种不同的方式中被用于不同的产品中。”
GPT-3 的营销应用:Copysmith
GPT-3 能消除写作困境吗?YouTuber 亚尼克·基尔彻认为可以:“如果你遇到写作困难,只需向模型询问,它会提供数百个想法作为倾听板。” 让我们来看看一个这样的工具:Copysmith。
GPT-3 最受欢迎的应用之一是即时生成创意内容。Copysmith 是市场上领先的内容创作工具之一。“Copysmith……通过强大的人工智能,使用户能够在网络上创建和部署内容的速度提高一百倍,”联合创始人兼首席技术官安娜·王说道。它利用 GPT-3 在电子商务和营销领域进行文案撰写,以实现高质量内容的快速生成、协作和发布。王和首席执行官谢贡·奥图拉纳分享了两姐妹如何将他们的小型电子商务店转型为成功的科技公司——而 GPT-3 在其中发挥了关键作用。
2019 年 6 月,安娜·王和她的姐姐茉莉花·王共同创立了一个基于 Shopify 的精品店。但她们缺乏营销经验,“生意彻底垮了,”安娜·王说。当姐妹俩在 2020 年了解到 OpenAI API 时,王说:“我们开始探索它用于写作诗歌、模仿书籍和电影中的人物等创意追求。有一天我们意识到,如果我们在尝试建立电子商务店时有了这个工具,我们就能写出更好的行动号召和产品描述,提升我们的营销水平,让其起步。”
受启发,他们于 2020 年 10 月推出了 Copysmith 并受到热烈欢迎。在王的话中,“一切都从那里开始。我们开始与用户交流,并根据反馈迭代产品。” 她指出,GPT-3 使得你可以在没有任何先前知识的情况下迅速进行迭代,而其他开源模型,比如 BERT 和 RoBERTa,需要针对每个下游任务进行大量微调。她补充说:“它在执行任务方面极其灵活”,还说“它是目前最强大的模型。” 此外,GPT-3 对开发人员和用户来说“非常友好”,其简单的“留言输入,留言输出”接口允许你使用一个简单的 API 执行各种任务。” 它的另一个优点是 API 调用的简单性,与承载专有模型的努力相比要简单得多。
关于基于 GPT-3 构建产品的挑战,Otulana 表示:“通常情况下,你受限于 OpenAI 的限制。因此,要克服这一点,你必须为 API 加入自己的创业元素,以创建出与众不同的东西。另一个限制是稍微失去控制,你的进展实质上受到 OpenAI 进展的限制。”
王对想要使用 GPT-3 的产品设计师有两条建议。首先,她说:“确保你正在解决一个真正的问题……考虑你的用户,因为使用 GPT-3 的一个容易出现的问题是陷入只在安全准则的限制内构建东西的思维定式,而不允许自己有创意。”
王建议说:“第二,要非常密切地关注你输入到模型中的内容。小心标点符号、语法和提示的措辞。我向你保证,你会对模型输出有更好的体验。”
GPT-3 的编码应用:Stenography
随着 GPT-3 及其后代模型 Codex 展现出与编程和自然语言交互的能力,新的潜在用例正在堆积起来。
OpenAI 社区大使 Bram Adams 以他与 GPT-3 和 Codex 算法进行创造性实验而闻名,在 2021 年底推出了一个产品:Stenography,利用 GPT-3 和 Codex 来自动化写代码文档这一讨厌的任务。Stenography 立刻取得成功,在热门产品发布门户 Product Hunt 上当日成为第一产品。
Adams 在缩小想法范围之前尝试了 API 的几个潜在用例,其中一个成为了他的新业务。“我认为很多这些实验都是我无意识地对 GPT-3 这样的语言模型能处理什么进行边缘测试。” Adams 的搜索始于这样一个想法:“如果我可以让计算机做任何事情,我会怎么做?”他开始探索,“触摸 OpenAI API 的边缘,看看它能走多远。” 他开发了一个生成 Instagram 诗歌的机器人;尝试了一个自我播客日记项目,用户可以与自己的数字版本交谈;基于用户偏好,在 Spotify 上构建音乐播放列表的项目;以及在满足好奇心的过程中创建了许多其他项目。由于这种好奇心,“我很早就擅长理解 GPT-3 的不同引擎。”
那么为什么选择隐写术呢?“我从外界获得了一个相当好的信号,表明这对很多人可能非常有帮助。” 虽然 Adams 喜欢精心编写的代码的优雅之处,但大多数 GitHub 用户只是下载已发布的代码并使用它:“没有人真的会欣赏你在代码库中付出的美感。” 他还注意到,GitHub 上很棒的程序如果没有很好的文档说明往往不会得到应有的关注:“readme [文件] 是每个人都会看到的第一件事。他们会立即向下滚动查看。” 隐写术是一种思考文档如何发展以减少对开发人员来说变得不那么烦人的尝试:“这很难,因为特别是文档,你必须证明你的做法。所以你说,‘我使用这个库来做这件事。然后我决定使用这个东西,然后我添加了这个函数来做这个事情。’”
Adams 将文档视为人们与团队其他成员、未来的自己或者只是偶然发现该项目的感兴趣的人交流的一种方式。其目标是让项目对他人易于理解。“我对 GPT-3 能否创建易于理解的评论的想法很感兴趣。” 他尝试了 GPT-3 和 Codex,并对两种模型的解释水平印象深刻。他接下来问的问题是:“如何使这对开发人员来说真的变得简单和愉快?”
那么隐写术是如何工作的,其组件如何利用 OpenAI API?Adams 表示,从高层次来看,有两个主要的过程——解析和解释——每个过程都需要不同的策略。“对于解析过程,我花了很多时间理解代码的复杂性,因为你的代码中并不是每一行都值得记录。” 一些代码可能有明显的目的,没有操作价值,或者不再有用。
此外,“大”代码块,超过 800 行,对模型来说太棘手了。 “你必须将逻辑拆分成许多不同的步骤,才能准确地说出这个东西是干什么的。一旦我理解了这一点,我就开始思考,‘我该如何利用解析来找到足够复杂但又不太复杂的块?’” 由于每个人的代码编写方式都不同,所以问题在于试图连接到抽象语法树,并尽力利用你所拥有的最好的东西。这成为了解析层的主要架构挑战。
至于解释层,“这更像是让 GPT-3 和 Codex 说出你想要它们说的话的一个功能,” Adams 解释道。解决这个问题的方法是找到创造性的方式来理解你代码的受众,并让 GPT-3 向他们表达。这个层面“可以尝试解答任何问题,但可能不会像使用计算器那样百分之百准确。如果你输入两加二等于四,偶尔会得到五,但你不需要编写所有的乘法、除法和减法函数。这些是免费的。” 这就是概率系统的取舍:有时候它们有效,有时候不行,但它们总会返回 一个 答案。Adams 建议保持足够灵活,以便在必要时调整你的策略。
Adams 强调在开始使用 OpenAI API 前真正理解问题的重要性。“在我的办公时间里,人们会来找我,他们会遇到这些巨大的问题。他们会说,‘我怎样才能用一行提示建造一艘火箭?’ 我会说,‘嗯,火箭有很多部件。GPT-3 不是万能药。它是一台非常强大的机器,但只有当你知道你在用它做什么时才有效果。’” 他将 GPT-3 比作 JavaScript、Python 和 C 这样的编程语言:“它们很吸引人,但前提是你要理解递归和 for
循环以及 while
循环,以及哪些工具能帮助你解决你特定的问题。” 对于 Adams 来说,这意味着要问很多“技术元问题”,比如“有了 AI 文档,会帮助到什么程度?” 和 “文档到底是什么?” 处理这些问题是他面临的最大挑战。
“我认为很多人会立刻求助达芬奇来解决问题。但如果你能用一个较小的引擎解决问题,比如 Ada、Babbage 或者 Curie,你实际上会比仅仅试图用达芬奇的整个 AI 来解决问题更深入地了解问题。” 他声称。
当涉及到使用 OpenAI API 构建和扩展产品时,他建议使用“小引擎或低温度”,因为你无法预测最终提示会是什么样(或者它是否会随时间而演变)、你试图做什么以及最终用户是谁,但是通过使用较小的引擎和较低的温度,你将更快地找到对真正困难的问题的答案。”
另一个挑战是从他自己的独立实验转变为一个应用程序,考虑到用户可能面临的所有不同条件和工作方式。现在,他正在致力于“找到所有不同的边缘情况”,以更好地了解 API 的设计层必须有多快,它必须以多频繁地响应特定请求,以及它如何与不同的语言交互。
对于速记术的下一步是什么?现在亚当斯已经建立了一个他非常满意的产品,他计划在 2022 年专注于销售和与用户群体交流。“速记术不会像以前那样多地关注建设,而是更多地关注真正完善产品并让其为人们所熟知。”
投资者对 GPT-3 初创企业生态系统的看法
为了了解支持基于 GPT-3 的公司的投资者的观点,我们与 Wing Venture Capital 的 Jake Flomenberg 进行了交流,该公司是一家著名的全球风险投资公司,也是几家以 GPT-3 为动力的初创企业,包括 CopyAI 和 Simplified 的主要投资者。
如同任何市场观察者可能想象的那样,风投资本家正在关注 GPT-3 等新兴人工智能技术。Flomenberg 总结了其吸引力:GPT-3 是“我们以前从未见过的任何其他 NLP 模型。它是朝着构建更通用的人工智能迈出的实质性一步。”他认为未开发的潜力是巨大的,并且商业世界仍然“低估了并因此未充分利用 LLMs 的能力。”
那么潜在投资者应该如何评估这么新颖和不同的东西呢?Flomenberg 说:“我们看重对问题、领域和技术的深入理解的初创企业,以及展示产品与市场之间良好契合度的初创企业。”“评估建立在 GPT-3 上的东西的微妙之处在于,询问,秘密酱是什么?公司是否在技术上对某事有深入的了解?公司是在使用 GPT-3 解决了一个真正的问题,还是只是利用炒作将其产品推向市场?为什么现在?为什么这个团队是最适合执行这个想法的?这个想法在现实世界中是可防御的吗?”如果一个初创企业无法为自己的存在辩护,那对投资者来说是一个巨大的警告信号。
投资者们也在密切关注 OpenAI 及其 API,因为基于 GPT-3 的企业完全依赖于其能力。Flomenberg 将 OpenAI 的尽职调查审查过程视为这种基于信任的关系的重要因素:“通过了生产审查并受到 OpenAI 关注的初创企业自动成为投资的热门对象。”
投资者在做出投资决策时通常会深入了解创始人的背景和专业知识。然而,GPT-3 不同寻常,因为它允许来自任何背景,而不仅仅是程序员的人,构建尖端的自然语言处理产品。弗洛门伯格强调了市场的重要性:“通常情况下,对于一家深科技初创公司,我们寻找对技术和人工智能领域有着深刻理解的创始人。但是对于基于 GPT-3 的初创公司,我们更关注市场是否 resonates with the founders’ vision 以及他们是否能够识别和解决最终用户的需求。” 他引用 CopyAI 作为 “建立在 GPT-3 之上的产品导向增长模式的典型例子。他们与用户之间建立了非凡的共鸣,并深入了解了技术,为业务带来了深度和价值。” 他说,成功的初创公司 “将 AI 保持在内部”,更专注于通过使用适当的工具解决用户的问题并满足他们的需求。
结论
看到这些用例以及许多其他用例如此迅速地以及如此成功地构建在 GPT-3 之上,令人惊叹。到 2021 年末,即写作本章时,开放 AI 社区中已经有几家初创公司筹集了大量资金,并且正在考虑快速扩张计划。这股市场潮流似乎也唤醒了更大型企业的胃口。越来越多的企业开始考虑在其组织内实施实验性的 GPT-3 项目。在 第五章 中,我们将研究这个由像 GitHub Copilot 和特别是新的 Microsoft Azure OpenAI Service 这样的大规模产品组成的市场细分,该服务旨在满足大型组织的需求。
^(1) 请参阅 IBM 网站上的文章 “AI 创造力的追求”。
^(2) 简要解释,请查看 OpenAI 的 这篇博文;深入了解,请参阅开发团队的 研究论文。
^(3) 您可以在 Vimeo 上观看 德古拉 on Vimeo。
^(4) Metaverse 在这个语境中指的是一个未来主义概念,即由填满了社交连接的虚拟头像的 3D 虚拟世界网络。这个更广泛的概念独立于马克·扎克伯格关于元宇宙的愿景。
第五章:企业的 GPT-3
当新的创新或技术转变发生时,大型企业通常是最后采用的。它们的等级结构由各种专制级别组成,而法律批准和文书工作的标准流程通常限制了试验自由,使得企业难以成为早期采用者。但是对于 GPT-3 来说似乎并非如此。一旦 API 发布,企业就开始尝试使用它。然而,它们遇到了一个重大障碍:数据隐私。
在其最简单的形式中,语言模型所做的就是预测下一个单词,给定一系列先前的单词。正如你在第二章中学到的那样,OpenAI 已经设计了几种技术,将语言模型(如 GPT-3)的功能从简单的下一个单词预测转变为更有用的 NLP 任务,如回答问题、摘要文件和生成特定上下文的文本。通常,通过微调语言模型或使其模仿特定行为来实现最佳结果,方法是使用领域特定数据提供几个示例来对其进行条件化。您可以使用训练提示提供示例,但更健壮的解决方案是使用微调 API 创建定制训练模型。
OpenAI 以开放式 API 的形式提供 GPT-3,用户提供输入数据,API 返回输出数据。对于打算使用 GPT-3 的企业来说,正确保护、处理和处理用户数据是一个关键问题。OpenAI 的 Welinder 指出,尽管企业领导人对 GPT-3 表达了各种关注,“SOC2 合规性、地理围栏和能够在私人网络内运行 API 的能力是其中最大的关注点。”
OpenAI 有关模型安全性和滥用的措施旨在涵盖数据隐私和安全的各种问题。例如,Stenography 的创始人 Bram Adams 告诉我们关于 OpenAI API 的隐私和安全方面。“目前,Stenography 是一个直通 API——就像一条收费公路。这样人们将会把他们的代码传递过去,而不会在任何地方保存或记录。”在这些防护栏之外,Stenography 是OpenAI 使用条款的一个超集。
我们与几家公司的代表谈过,了解了阻止他们在生产中使用 OpenAI API 的原因。大多数人都强调了两个常见的关注点:
-
OpenAI 提供的 GPT-3 API 端点不应保留或保存作为模型微调/训练过程的一部分提供给它的任何训练数据的任何部分。
-
在将其数据发送到 OpenAI API 之前,公司希望确保第三方无法通过向 API 提供任何输入来提取或访问数据。
OpenAI 回应了客户关于数据处理和隐私的担忧和问题,提供了安全审查、企业合同、数据处理协议、第三方安全认证工作等。一些客户和 OpenAI 讨论的问题包括客户的数据是否可以用于改善 OpenAI 模型,这可能会提高客户期望用例的性能,但会引发有关数据隐私和内部合规义务的担忧;关于客户数据的存储和保留限制;以及关于数据安全处理和处理的义务。
本章的其余部分将深入探讨三个案例研究,展示了像 GitHub、Microsoft 和 Algolia 这样的全球企业如何处理这些问题,并且如何规模化使用 GPT-3。您还将了解到 OpenAI 如何通过与 Microsoft Azure OpenAI 服务的合作来适应企业级产品的需求。
案例研究:GitHub Copilot
让我们从 GitHub Copilot 开始这段旅程,这是 2021 年最热门的产品之一。GitHub Copilot(图 5-1)是一款首创的 AI 协作编程工具,可帮助用户更快地编写代码,减少工作量。GitHub Next 副总裁 Oege de Moor 表示,该产品的使命是“触及所有开发者,最终目标是使编程变得无障碍”。自动化琐碎任务,如编写冗余代码和编写单元测试用例,使开发者能够“专注于工作的真正创造性部分,即决定软件实际应该做什么”,以及“更多地思考产品概念,而不是陷在代码中难以解脱”。
正如 Awan 告诉我们的:“我很兴奋能够在更多的副业项目上工作,因为我知道我将得到 GitHub Copilot 的帮助。现在我几乎就像有了一个联合创始人。Codex 和 Copilot 大约写了我的代码的 2 到 10%,类似这样。所以它已经让我加速了 2 到 10%。而且所有这些都是呈指数增长的。那么明年 GPT-3 会是什么样子?明年 Codex 会是什么样子?我可能会加速 30%。”
让我们深入了解 Copilot 的内部工作原理。
图 5-1。GitHub Copilot
工作原理
GitHub Copilot 根据您正在处理的代码提取上下文,基于诸如文档字符串、注释和函数名称等内容。然后,它会在编辑器内自动建议下一行,甚至整个函数,以生成样板代码并建议匹配代码实现的测试用例。它通过使用用户代码编辑器的插件与广泛的框架和编程语言一起工作,使其几乎与语言无关,同时轻量且易于使用。
OpenAI 研究科学家哈里·爱德华兹指出,Copilot 对于在新语言或框架中工作的程序员也是一个有用的工具:“试图通过搜索一切来编写不熟悉的语言的代码,就像只带着一本短语书在陌生的国家里导航。使用 GitHub Copilot 就像雇佣了一名翻译。”
GitHub Copilot 由 OpenAI 的 Codex 提供支持,这是 GPT-3 模型的后裔,正如我们在 Chapter 4 中所述,它专门设计用于解释和编写代码。“GitHub 是超过 7300 万开发者的家园,[包括] 包含了社区集体知识的大量公开数据,”德莫尔说。这意味着 Codex 有数十亿行可供训练的公开可用代码。它理解编程语言和人类语言。
Codex 依靠支持性评论或简单英语指令来生成相关代码,如 Figure 5-2 所示。Copilot 编辑器扩展智能地选择要发送到 GitHub Copilot 服务的上下文,后者运行 OpenAI 的 Codex 模型来合成建议。尽管 Copilot 生成代码,用户仍然有掌控权:你可以浏览建议的选项,选择接受或拒绝,以及手动编辑建议的代码。GitHub Copilot 会根据你所做的编辑进行调整,并匹配你的编码风格。德莫尔解释说:“它将自然语言与源代码链接起来,这样你就可以在两个方向上使用它。你可以使用源代码生成注释,也可以使用注释生成源代码,使其具有极大的功能。”
和当你将神经网络扩展到一个显著规模时结果会消失。通过传统的深度学习,一直以来都是规模小,参数较少的模型是一种规范,以避免消失梯度问题,并在模型训练过程中引入复杂性。自从成立以来,“简单模型是最好的模型”的奥卡姆剃刀在人工智能社区中一直是神圣不可侵犯的原则。这个原则一直是训练新模型的参考中心,这阻碍了人们对规模进行实验的积极性。
2020 年,当 OpenAI 推出其标志性语言模型 GPT-3 时,扩展的潜力开始受到关注,人们对人工智能社区的普遍观念开始发生变化。人们开始意识到“规模的赠予”可以产生更广义的人工智能,其中像 GPT-3 这样的单一模型可以执行一系列任务。
托管和管理像 GPT-3 这样的模型需要在许多不同层面上的精湛技术,包括模型架构的优化、其部署以及公众如何访问它。德·莫尔告诉我们:“当我们推出 Copilot 时,它在最初阶段使用的是 OpenAI API 基础设施,然后在推出后,我们迎来了大量的回应,有那么多人注册并想要使用这个产品。”
尽管 API 能够处理大量的请求,但实际的请求数量及其频率仍然让 OpenAI 团队感到惊讶。德·莫尔和他的团队“意识到需要一个更高效、更大的基础设施来进行部署,幸运的是,微软 Azure OpenAI 正好在那个时候浮出水面”,使他们能够进行所需的 Azure 部署基础设施转换。
当我们询问关于构建和扩展 Copilot 的经验时,德·莫尔分享道:“早期我们曾有一个误导性的信念,即准确性是唯一最重要的事情,但在产品发展的过程中,我们意识到实际上是强大的人工智能模型和无瑕的用户体验之间存在着权衡。” Copilot 团队很快意识到,速度与建议准确性之间存在权衡,就像任何足够规模的深度学习模型一样。
一般来说,深度学习模型的层数越多,它的准确性就越高。然而,更多的层也意味着运行速度会变慢。Copilot 团队不得不在两者之间找到平衡,正如德·莫尔所解释的那样:“我们的用例要求模型以闪电般的速度提供响应,并提供多个备选建议;如果速度不够快,用户很容易就会超过模型并自己编写代码。因此,我们发现一个略微弱一些的模型,可以快速给出响应,同时保持结果的质量”是答案。
对 GitHub Copilot 的快速用户采用和兴趣让团队中的每个人都感到惊讶,但事情并没有结束。由于产品的实用性和代码建议的质量,团队看到使用 Copilot 生成的代码量呈指数增长,平均“35%的新编写代码是由 Copilot 提出的。随着我们在模型能力和建议速度之间找到正确平衡的不断接近,这个数字将继续增加。” 德摩尔说。
被问及作为向 Copilot 提交请求的一部分提交的代码的数据安全性和隐私方面时,德摩尔告诉我们,“Copilot 的架构是设计成这样的,当用户将代码输入 Copilot 时,不会有任何代码泄露给其他用户的可能性。GitHub Copilot 是一个代码合成器,而不是一个搜索引擎:它建议的绝大部分代码都是独一无二的生成的,从未被见过。我们发现,大约有 0.1% 的时间,建议可能包含一些直接来自训练集的代码片段。”
GitHub Copilot 的下一步是什么?
德摩尔认为 Copilot 在代码审查和编写方面有很大潜力。他说:“想象一下自动化的代码审查器,它自动查看您的更改并提出建议,使您的代码更好、更高效。如今 GitHub 的代码审查过程由人工审阅者进行,我们也正在探索 Copilot 审查的想法。”
探索中的另一个功能是代码解释。德摩尔解释说,用户可以选择一段代码片段,“Copilot 可以用简单的英语解释它。” 这有潜力作为一个有用的学习工具。此外,德摩尔表示,Copilot 希望提供帮助工具,用于“将代码从一种编程语言翻译成另一种编程语言”。
Copilot 为开发人员以及任何想要发挥创造力并构建一款软件来实现其想法的人打开了无限的机会世界。在 GitHub Copilot 和 OpenAI 的 Codex 出现之前,生成生产级代码、AI 辅助代码审查以及将代码从一种语言翻译成另一种语言等功能一直是遥不可及的梦想。LLM 的出现与无代码和低代码平台的结合将使人们能够释放创造力,构建有趣而意想不到的应用。
案例研究:Algolia Answers
Algolia 是一家知名的搜索解决方案提供商,客户跨越了财富 500 强公司到新一代的初创企业。它提供了一个符号化、基于关键字的搜索 API,可以与任何现有产品或应用程序集成。在 2020 年,Algolia 与 OpenAI 合作,将 GPT-3 与其已有的搜索技术连接起来。下一代产品是 Algolia Answers,它使客户能够构建智能的、基于语义的、单一的搜索终端,用于搜索查询。“我们构建的是其他公司使用的技术,”Algolia 的产品经理 Dustin Coates 说。
Coates 说,他的团队所说的 智能搜索 是指“您搜索一些东西,然后立即得到响应—不仅是得到记录,而是得到文章—而是得到实际回答问题的内容。”简而言之,它是“一个搜索体验,人们不必准确输入单词。”
评估自然语言处理选项
Algolia 成立了一个专门的团队来处理这个领域。当 OpenAI 联系他们询问 Algolia 是否对 GPT-3 感兴趣时,Coates 的团队将其与竞争技术进行了比较。Algolia 机器学习工程师 Claire Helme-Guizon,也是原始 Algolia Answers 团队的成员,解释说:“我们研究了类似 BERT 的模型,以优化速度,DistilBERT,以及像 RoBERTa 这样更稳定的模型,以及 GPT-3 的不同变体,如 DaVinci、Ada 等。”他们创建了一个评分系统来比较不同模型的质量,并了解它们的优势和劣势。他们发现,Coates 说,GPT-3 在搜索结果质量方面“表现得非常好。”速度和成本是弱点,但 API 最终是一个决定性因素,因为它允许 Algolia 在不必维护其基础架构的情况下使用该模型。Algolia 询问了现有客户是否可能对这样的搜索体验感兴趣,回应非常积极。
即使拥有这样的结果质量,Algolia 仍然有很多问题:它对客户会如何运作?架构是否可扩展?财务上可行吗?为了回答这些问题,Coates 解释说:“我们设计了具有较长文本内容的特定用例”,比如发布和帮助台。
对于一些使用案例,仅依靠 GPT-3 获得搜索结果已经足够,但对于其他复杂的使用案例,可能需要将 GPT-3 与其他模型集成。由于 GPT-3 是根据某个时间点之前的数据进行训练的,因此在涉及新鲜度、流行度或个性化结果的使用案例方面会遇到困难。在结果质量方面,Algolia 团队面临的挑战在于,由 GPT-3 生成的语义相似度分数并不是他们客户关心的唯一指标。他们需要以某种方式将相似度分数与其他指标结合起来,以确保客户获得满意的结果。因此,他们引入了其他开源模型,以与 GPT-3 结合展示最佳结果。
数据隐私
引入这项新技术时 Algolia 面临的最大挑战之一是法律问题。Coates 表示:“在整个项目中,通过法律、安全和采购可能是我们做的最困难的事情之一,因为你正在发送这些客户数据并为这个 ML 模型提供数据。我们如何删除这些数据?我们如何确保其符合 GDPR?^([1)我们如何处理所有这些事情?我们如何知道 OpenAI 不会拿取这些数据并将其馈送到其他所有模型中去?因此,有很多问题需要回答,也有很多协议需要制定。”
成本
到目前为止,我们见过的大多数 GPT-3 使用案例都是面向消费者的业务(B2C)产品,但对于像 Algolia 这样的企业对企业(B2B)公司来说,游戏规则是不同的。他们不仅需要 OpenAI 的定价适合他们,而且还需要优化他们的定价以适应客户,这样他们“才能盈利并且客户仍然对我们正在构建的内容感兴趣。”
在搜索解决方案业务中,成功是以吞吐量为基础衡量的。因此,自然而然地应该考虑质量、成本和速度之间的权衡。Coates 表示:“即使在我们知道成本之前,Ada 对我们来说也是正确的模型,因为速度很快。但是即使,比方说,Davinci 足够快,我们可能仍然会选择 Ada,只是因为成本措施。”
Helme-Guizon 指出,影响成本的因素包括“token 的数量以及您发送的文件数量和长度”。Algolia 的方法是构建“尽可能小的上下文窗口”,即一次发送到 API 的数据量,“在质量上仍然足够相关”。
那么他们是如何解决这个问题的呢?Coates 解释道:“我们在 OpenAI 公布价格之前就开始了合作,我们已经走得足够远,并且从我们在其他地方所见到的东西来看,质量是足够好的,而不知道价格是多少。所以我们有了一段相当多的失眠夜晚,不知道价格是多少。然后一旦我们知道价格,[就是]想出如何降低成本。因为当我们第一次看到价格时,我们不确定我们是否能够使其发挥作用。”
他们确实在优化他们的使用情况下的价格方面投入了大量工作,因为根据 Coates 的说法,价格将是每个试图在 GPT-3 基础上构建业务的人的“一个普遍性挑战”。因此,在产品开发的早期阶段就开始考虑价格优化是非常推荐的。
速度和延迟
速度对于 Algolia 来说尤为重要;该公司承诺为客户提供毫秒级延迟的闪电般快速搜索能力。当团队评估了 OpenAI 的提议时,他们对结果的质量感到满意,但 GPT-3 的延迟是无法接受的。“在我们传统的搜索中,结果往返时间少于 50 毫秒,” Coates 说。“我们正在跨越数亿个文档进行搜索,而且必须是实时的。当我们早期与 OpenAI 合作时,每个查询都需要几分钟。”
Algolia 确实决定尝试使用 GPT-3,并开始了 Algolia Answers 的初始实验阶段和 beta 推出。然而,降低延迟和货币成本需要大量的努力。“我们最初的总延迟约为 300 毫秒,有时达到 400 毫秒,” Coates 回忆道,“我们不得不将其降低到 50 到 100 毫秒的范围内,以便我们的客户可以使用它。”最终,Algolia 提出了语义高亮,这是一种利用在 GPT-3 之上训练的问答模型执行小型搜索并找出正确答案的技术。将 GPT-3 与其他开源模型结合使用导致了总体延迟的降低。他们的结果质量更好,Helme-Guizon 补充道,因为“模型被训练来找到答案,而不仅仅是相关的单词。”
Algolia Answers 架构的一个关键方面,Helme-Guizon 表示,是阅读器检索架构,在其中,AI 阅读器“浏览子文档并阅读它们,使用 Ada 理解它们,并根据查询为我们提供语义值的置信度评分。”尽管这是“一个很好的第一解决方案,”她补充道,但它面临着许多挑战,“特别是延迟,因为您有一个依赖性,您无法异步地处理第一批和第二批。”
GPT-3 使用从预测中得出的嵌入来计算余弦相似度,这是一种用于确定两个文档相似程度的数学指标,而不考虑它们的大小。Coates 总结了这些挑战:首先,“你不能发送太多的文档,否则响应会太慢,或者成本会在经济上太高。”第二个是“放置一个足够广泛的网,以获取所有相关文档,同时保持时间和成本的控制。”
所学到的经验
那么,如果 Algolia Answers 今天不得不从零开始,它会有什么不同的做法呢?“有时候与 GPT-3 一起工作会让人感到不知所措,” Coates 说道。“我们会在产品开发的早期阶段提出一些首要问题,比如,‘我们是否愿意在语义理解上受到打击,因为我们为其他方面的提升付出了如此巨大的代价?’我认为我们会更多地考虑延迟和不同排名因素的交汇。”他补充说,他可以看到这个项目“回归到基于 BERT 的模型。我们可能会说,原始质量并不像我们从 GPT-3 中得到的那样。这是无可否认的。但我认为,尽管我们对技术产生了浓厚的兴趣,但我们发现了一些我们没有解决的客户问题,技术必须追随客户问题的步伐,而不是反过来。”
那么 Algolia 对搜索未来的看法是什么呢?“我们不认为任何人真正解决了文本相关性和语义相关性的融合问题。这是一个非常困难的问题,因为有时候情况可能是文本相关的,但实际上并不能回答问题,” Coates 说道。他设想着“更传统的、文本基础、更可理解和可解释的一面,与这些更先进的语言模型相结合”。
案例研究:微软 Azure OpenAI 服务
Algolia 在 OpenAI API 上已经成熟了,但很快公司希望在欧洲扩大业务,这意味着它需要 GDPR 的合规性。它开始与微软合作,后者正在推出其 Azure OpenAI 服务。在下一个案例研究中,我们将看看那项服务。
注定要成为的伙伴关系
微软和 OpenAI 在 2019 年宣布了一项合作伙伴关系,其目标是让微软 Azure 客户访问 GPT-3 的能力。这个合作伙伴关系基于共同的愿景,即希望确保 AI 和 AGI 的安全部署。微软向 OpenAI 投资了十亿美元,资助了 API 的推出,该 API 运行在 Azure 上。这一合作伙伴关系的最终目标是向更多人提供访问大型语言模型的机会。
Dominic Divakaruni,Azure OpenAI 服务负责人和主要产品经理,表示他一直把这次合作看作是一种天作之合的伙伴关系,指出微软 CEO 萨提亚·纳德拉和 OpenAI CEO Sam Altman 经常谈论确保人工智能的好处能够被广泛获取和分配。两家公司都关注人工智能创新中的安全性。
Divakaruni 表示,目标是“充分利用彼此的优势”,特别是 OpenAI 在用户体验和建模方面取得的进展以及微软在企业、大型销售团队和云基础设施方面的现有关系。考虑到其客户群体,微软 Azure 团队了解企业云客户在合规性、认证、网络安全等方面的基本要求。
对于微软来说,对 GPT-3 的兴趣主要在于它开创了新局面,并且在 LLM 类别中首先可用。微软投资的另一个关键因素是,它获得了独家使用 OpenAI 的知识产权资产的能力。虽然存在 GPT-3 的替代方案,但 Divakaruni 表示 OpenAI API 的集中化是独一无二的。他指出,用于文本分析或翻译等服务的模型需要云提供商做“相当多的工作”才能适应 API 服务。然而,OpenAI 提供的是“用于各种任务的相同 API”,而不是“为特定任务创建的定制 API”。
一个 Azure 本地化的 OpenAI API
OpenAI 知道扩展云基础设施至关重要。从 OpenAI API 的起源开始,一直都有在 Azure 中有一个 API 实例的想法,以便能够触及更多的客户。Divakaruni 提到 OpenAI API 和 Azure OpenAI 服务平台之间的相似性比差异性更多。从技术角度来看,目标非常相似:为人们提供相同的 API 和相同模型的访问权限。Azure OpenAI 服务的形态将更加 Azure 本地化,但微软希望能够匹配 OpenAI 客户的开发者体验,尤其是一些客户从 OpenAI API 迁移到 Azure OpenAI 服务时。
在编写本书时,我们已经捕捉到 Azure OpenAI 服务团队正在启动平台,还有许多问题需要解决,然后才能广泛向客户发布。OpenAI 服务现在正在为其服务添加越来越多的模型;其目标是最终在可用模型方面达到或只落后于 OpenAI API 几个月。
资源管理
两种服务之间的一个区别在于它们如何处理资源管理。资源是通过服务可管理的项目(无论是 OpenAI API 还是 Microsoft Azure)。在 OpenAI 的上下文中,资源的示例可能是一个 API 账户或与账户关联的积分池。Azure 提供了更复杂的资源集,如虚拟机、存储账户、数据库、虚拟网络、订阅和管理组。
虽然 OpenAI 为每个组织提供单个 API 账户,在 Azure 中公司可以创建多个不同的资源,可以跟踪、监视和分配给不同的成本中心。“它通常只是 Azure 的另一个资源,”微软 Azure OpenAI 服务的高级项目经理 Christopher Hoder 说,这使得它易于开箱即用。
Azure 内的资源管理是一种部署和管理功能,使客户能够在 Azure 账户中创建、更新和删除资源。它带有访问控制、锁定和标记等功能,用于在部署后保护和组织客户资源。
Azure 有几个资源管理层,允许公司和组织更好地管理定价和资源,Hoder 说。在高层次上,有一个组织的 Azure 账户,而在该账户内,有多个 Azure 订阅。在其中,有资源组,然后是资源本身。“所有这些都可以进行监控、分段和访问控制,”Hoder 补充说,这在大规模部署时尤其重要。
安全性和数据隐私
尽管微软迄今未公开多少关于其安全性的信息,但 Divakaruni 告诉我们,公司专注于三个主要点:内容过滤器、滥用监控和以安全为先的方法。团队正在致力于更多强制安全性的元素,并计划利用客户反馈了解在它们正式推出之前哪些元素对用户最有意义。
团队还在努力编写文档,详细说明隐私政策如何实施,将与客户分享,以确保微软在保护客户数据的同时履行负责任使用人工智能的义务。“许多来找我们的客户对目前 OpenAI 的实施方式有所顾虑,因为它更加开放,我们正在解决[这些顾虑],”Divakaruni 说。
内容过滤器已经以 PII(个人可识别信息)过滤器的形式引入,它可以阻止性和其他类型的内容,其范围仍在确定中。“在这里的理念是为客户提供正确的旋钮,以调整和迭代适用于他们特定领域的内容,”Divakaruni 说。
微软的企业客户在安全性方面要求严格。Azure OpenAI API Service 团队正在利用其为 Bing 和 Office 等其他产品所做的工作。微软在模型开发和突破方面有着悠久的历史。 “Office 已经提供了语言产品一段时间了。因此,在这个领域我们有非常丰富的内容审核能力…我们有一个专门的科学团队致力于构建适合这些模型的过滤器。” Divakaruni 说。
OpenAI API 的用户经常请求 地理围栏,这是一种在真实地理区域周围设定虚拟边界的技术,创建分隔区域以保持数据在特定位置。如果数据移动到指定半径外,它可以在启用地理的电话或其他便携式电子设备上触发操作。例如,它可以在一个人进入或离开地理围栏时通知管理员,然后以推送通知或电子邮件的形式向用户的移动设备生成警报。地理围栏使企业能够准确跟踪、营销和有效地通知管理员。Azure 的地理围栏功能仍在不断完善中,但 Divakaruni 表示它已经在试验性基础上为一些特定客户实施,例如 GitHub Copilot。
企业级的模型即服务
Azure OpenAI Service 已经与许多大型企业客户在平台上展开合作,但微软尚未准备公开讨论它们,引用隐私问题和公众舆论的敏感性。它现在可以提及的是一些内部服务的例子。GitHub Copilot 最初在 OpenAI API 上启动,但现在,主要出于规模原因,已经转移到 Azure OpenAI Service 上。在 Azure 上运行的其他内部服务的例子包括 Dynamics 365 客户服务、Power Apps、ML to code 和 Power BI 服务。
Divakaruni 表示,他们看到了金融服务行业和传统企业对提升客户体验的极大兴趣。 “有大量的文本信息需要处理,分析师需要摘要并快速地确定对他们来说相关和有意义的文本。我认为客户服务行业也是一个巨大的未开发领域。有大量的信息被锁定在音频中,可以转录,以及在呼叫中心信息中,这些信息可能为试图改善客户体验的公司提供有意义的洞察。” 他们看到的另一组使用案例是公司通过训练 GPT-3 来加速他们的内部 API 和软件开发工具的开发人员生产率,从而使这些工具对其员工更易于访问。
Divakaruni 指出,许多其核心优势不在于人工智能或机器学习的企业希望以能够为其业务流程增加有意义价值或增强客户体验的方式应用人工智能。他们利用微软的实地优势来帮助他们构建解决方案。Azure OpenAI 服务团队完全预计其复杂的模型即服务方法将成为主流,Hoder 表示。他指出,微软通过将其嵌入到诸如 Office 和 Dynamics 之类的消费者应用程序中来提供其即用即用的体验。需要更独特或定制支持的客户会向下一层转向像 Power 平台这样的服务,该平台面向业务用户和开发人员,提供无代码或低代码的方式来定制机器学习和人工智能。“如果你再往下走一点,再定制一点,再侧重于开发人员一点,你就会到达认知服务。这确实是我们通过基于 REST API 的服务提供人工智能能力的模型。现在我们正在引入一个更精细的层次,即 OpenAI 服务……然后在底层,我们有专注于数据科学的工具与 Azure 机器学习,” Hoder 解释道。
微软看到了对 Azure OpenAI 服务的大量客户需求,但也可以证明其迄今为止在其他服务方面的成功,例如语音识别服务和表单识别器。“我们看到了对于能够拍摄图像,以结构化方式提取信息,并从 PDF 中提取表格和其他信息以进行自动数据摄入,然后结合分析和搜索功能的需求。”Hoder 说。(例如,参见这个案例研究,了解客户如何使用基于微软 REST API 的人工智能/机器学习服务。)
其他微软人工智能和机器学习服务
Azure OpenAI 服务会影响微软产品线中的其他人工智能/机器学习服务,如 Azure Machine Learning Studio 吗?Divakaruni 告诉我们市场上两者都有位置:“绝对不是一家独大。市场上需要多种提供特定客户需求的解决方案。”客户的需求可能有很大不同。他们可能需要生成然后标记与其特定用例相关的数据。他们可以使用 Azure ML Studio 或 SageMaker 等平台从头开始构建模型,然后为此目的训练一个精简的、较小的模型。
当然,这是大多数人无法接触到的一个小众领域。Hoder 指出,将数据科学能力带给客户“扩大了接入范围;使之民主化。”Divakaruni 同意:“你将越来越多地看到一个趋势,即更大、更复杂的模型通过服务来暴露,而不是由人们自己构建。” 为什么?“根本事实是,训练这些模型需要大量的计算和大量的数据。能够开发这些模型的公司可惜是少数。但是我们有能力,就应该让它们为世界所用。”
一般来说,那些能够承担昂贵资源的公司的数据科学团队更倾向于为其特定用例构建自己的知识产权,使用像 Azure Machine Learning Studio 这样的低级 ML 平台。 Divakaruni 认为,这种需求不太可能消失。
企业建议
调查 Azure OpenAI 服务的企业,Divakaruni 说,可以像调查任何其他云服务一样进行:您首先从对您最有意义的地方开始,然后查看各种技术是否满足您的需求。“虽然技术很酷,当然有一个哇因素,但你仍然必须从‘这对我作为一个企业,对我的团队最有用在哪里?’开始,然后寻找一套技术来解决这个问题。”
下一步是研究如何从实验进入生产阶段:“您需要构建的其他东西是什么?” Divakaruni 将这一步称为“应用程序粘合剂,某人需要在周围注入,确保这些模型实际上能够行为正常,并且可以在实时应用场景中使用。”这是一项非常重要的任务,但企业需要考虑这一点,以了解基于 GPT-3 的应用程序将需要什么样的投资。 Divakaruni 建议问:“当您进行自动化时,这个模型是否真的产生了相关的东西?当它实际上内置到一个应用程序中时,这个功能的使用——它是否在做它应该做的事情?”
使用 OpenAI 还是 Azure OpenAI 服务:您应该使用哪个?
对于有兴趣探索 GPT-3 的公司来说,问题是:OpenAI API 还是 Azure OpenAI 服务?Divakaruni 认为,OpenAI API 版本更适合那些正在探索各种选择但没有任何具体项目实施想法的公司。在访问方面,OpenAI 显然走得更远,其游乐场使个人用户和公司更容易进行实验。 OpenAI API 还允许访问最新的实验模型和扩展 API 功能的 API 端点。
另一方面,Azure OpenAI 服务针对的是具有生产用例的用户群体,这些用户从 OpenAI API “毕业”,或者需要满足不同的合规和隐私规定。两个组织鼓励客户进行实验和验证其用例,然后使用 OpenAI API 确定它们。如果该平台满足其需求,微软鼓励客户继续使用它,但当他们的生产需求变得更加成熟,开始需要更多的合规性时,他们应考虑过渡到 Azure。
结论
在本章中,您了解了企业如何大规模使用基于 GPT-3 的产品,以及新的微软 Azure OpenAI 服务如何为有意成为 GPT-3 生态系统的一部分的企业铺平道路。我们深入探讨了扩展基于 GPT-3 的产品的微妙之处,并分享了一些来自大规模、企业级产品旅程的建议。在第六章中,我们将讨论围绕 OpenAI API 和 LLMs 的一些争议和挑战。
^(1) 欧盟的《通用数据保护条例》要求公司不得隐藏在难以理解的条款和条件背后。GDPR 要求公司明确定义其数据隐私政策,并使其易于访问。
标签:文本,GPT3,模型,API,构建,使用,GPT,OpenAI,自然语言 From: https://www.cnblogs.com/apachecn/p/18177026