admin 管理员组文章数量: 887021
原文:Modern Generative AI with ChatGPT and OpenAI Models
译者:飞龙
协议:CC BY-NC-SA 4.0
序言
本书以介绍生成式 AI 领域开始,重点是使用机器学习算法创建新的独特数据或内容。它涵盖了生成式 AI 模型的基础知识,并解释了这些模型如何训练以生成新数据。
之后,它着重于 ChatGPT 如何提升生产力和增强创造力的具体用例。它还探讨了如何通过改进提示设计和利用零、一、和少次学习能力来充分利用 ChatGPT 互动。
本书随后对之前按领域聚类的用例进行了详细介绍:营销人员、研究人员和开发人员/数据科学家。每个领域将涵盖四个具体的用例,您可以轻松地自行复制。
然后,从个别用例开始,本书转向利用 Azure 基础设施上可用的 OpenAI 模型 API 的企业级场景。本书还将重点关注现有客户故事的端到端场景,以及负责任的 AI 影响。
最后,本书将回顾迄今讨论的主要要点,并反思生成式 AI 领域接下来的发展方向。
通过本书,您将掌握深入研究生成式 AI 领域并开始在自己的项目中使用 ChatGPT 和 OpenAI 模型 API 的知识。
本书适合谁
本书面向广泛的读者群体。它适用于对使用 ChatGPT 和 OpenAI 提高日常生产力以及深入了解 ChatGPT 背后的技术和模型架构感兴趣的一般用户。它也适用于希望深入了解 ChatGPT 和 OpenAI 模型在现实世界应用中的商业用户,并了解它们如何赋能其组织。本书还适用于希望深入了解 ChatGPT 和 OpenAI 模型如何提升其 ML 模型和代码的数据科学家和开发人员,以及希望深入了解其领域中 OpenAI 和 ChatGPT 用例的营销人员和研究人员。
由于本书提供了 OpenAI 模型背后的技术和生成式 AI 主要概念的理论概述,因此阅读本书并无特殊要求。如果您还对实施实际用例感兴趣,我们提供了端到端的解决方案和相关 Python 代码,以及逐步实施说明。
本书涵盖了什么内容
第一章,生成式 AI 简介,提供了生成式 AI 领域的概述,重点是使用机器学习算法创建新的独特数据或内容。它涵盖了生成式 AI 模型的基础知识,并解释了这些模型如何训练以生成新数据。该章节还着重介绍了生成式 AI 在各个领域的应用,如图像合成、文本生成和音乐创作,突出了生成式 AI 在革新各行业中的潜力。
第二章,OpenAI 和 ChatGPT – 超越市场炒作,概述了 OpenAI 及其最显著的发展 ChatGPT,重点介绍其历史、技术和能力。本章还关注了 ChatGPT 如何在各行业和应用中使用,以改善沟通和自动化流程,最终如何影响技术领域及其他领域。
第三章,熟悉 ChatGPT,指导您如何设置 ChatGPT 账户并开始使用该服务。还将介绍如何与 Web UI 交互,如何根据主题组织聊天,以及如何构建对话。
第四章,理解提示设计,着重介绍了提示设计的重要性作为提高模型准确性的技术。实际上,提示对模型生成的输出有很大影响。一个设计良好的提示可以帮助引导模型生成相关和准确的输出,而一个设计不当的提示可能是无关或令人困惑的。最后,还重要的是在提示中实施道德考虑,以防止模型生成有害内容。
第五章,ChatGPT 提升日常工作效率,介绍了 ChatGPT 可以为普通用户在日常生活中做的主要活动,提高用户的生产力。本章将重点介绍写作辅助、决策制定、创意灵感等具体示例,让您可以自己尝试。
第六章,与 ChatGPT 共同开发未来,着重介绍了开发人员如何利用 ChatGPT。本章将重点关注 ChatGPT 在这一领域可以解决的主要用例,包括代码审查和优化、文档生成和代码生成。本章将提供示例,并让您尝试自己的提示。
第七章,ChatGPT 精通营销,着重介绍了营销人员如何利用 ChatGPT。本章将重点关注 ChatGPT 在这一领域可以解决的主要用例,包括 A/B 测试、关键词定位建议和社交媒体情感分析。本章将提供示例,并让您尝试自己的提示。
第八章,ChatGPT 改变研究方式,着重介绍了研究人员如何利用 ChatGPT。本章将重点关注 ChatGPT 在这一领域可以解决的主要用例,包括文献综述、实验设计和参考文献生成。本章将提供示例,并让您尝试自己的提示。
第九章,OpenAI 和 ChatGPT 企业版 – 介绍 Azure OpenAI,着重介绍了 OpenAI 模型在企业级应用中的应用,介绍了 Azure OpenAI 服务。我们将概述 Azure OpenAI 服务的模型 API 以及如何将其嵌入自定义代码中。我们还将关注模型参数、配置和微调。最后,我们将对负责任人工智能的主题进行一些考虑,以确保您的人工智能系统符合道德标准。
第十章,企业的热门用例,以当前市场上企业正在开发的使用 Azure OpenAI 的最热门用例概述开始。我们将探讨项目的具体示例,如智能搜索引擎、人工智能助手和报告生成器。最后,我们将专注于特定行业的端到端生产项目。
第十一章,结语和最终思考,以对前几章中探讨的最热门用例进行简短回顾开始。然后,我们将转向一些关于生成式人工智能对行业和日常生活影响的考虑。我们还将了解道德考虑和负责任人工智能在项目设计阶段的作用。本章将以一些关于生成式人工智能未来发展的最终思考结束,GPT-4 即将推出。
要充分利用本书
这里是您需要准备的清单:
书中涵盖的软件/硬件 | 系统要求 |
---|---|
Python 3.7.1 或更高版本 | Windows、macOS 或 Linux |
Streamlit | Windows、macOS 或 Linux |
LangChain | Windows、macOS 或 Linux |
OpenAI 模型 API | OpenAI 账户 |
Azure OpenAI 服务 | 已启用 Azure OpenAI 的 Azure 订阅 |
与往常一样,您可以在书的 GitHub 存储库中找到所有章节中使用的提示:github/PacktPublishing/Modern-Generative-AI-with-ChatGPT-and-OpenAI-Models/tree/main/Chapter%204%20-%20Prompt%20design
如果您使用本书的数字版本,我们建议您自己输入代码或从书的 GitHub 存储库中访问代码(链接在下一节中提供)。这样做将有助于避免与复制粘贴代码相关的任何潜在错误。
下载示例代码文件
您可以从 GitHub 下载本书的示例代码文件:github/PacktPublishing/Modern-Generative-AI-with-ChatGPT-and-OpenAI-Models
。如果代码有更新,将在 GitHub 存储库中更新。
我们还提供来自我们丰富书籍和视频目录的其他代码包,可在github/PacktPublishing/
上找到。快来看看吧!
下载彩色图片
我们还提供一份 PDF 文件,其中包含本书中使用的屏幕截图和图表的彩色图片。您可以在此处下载:packt.link/YFTZk
。
使用的约定
本书中使用了许多文本约定。
文本中的代码
:表示文本中的代码词、数据库表名、文件夹名、文件名、文件扩展名、路径名、虚拟 URL、用户输入和 Twitter 句柄。这里有一个例子:“将下载的WebStorm-10*.dmg
磁盘映像文件挂载为系统中的另一个磁盘。”
代码块设置如下:
query = st.text_area("Ask a question about the document")
if query:
docs = faiss_index.similarity_search(query, k=1)
button = st.button("Submit")
if button:
st.write(get_answer(faiss_index, query))
任何命令���输入或输出都将如下所示:
pip install --upgrade openai
粗体:表示新术语、重要单词或屏幕上看到的单词。例如,菜单或对话框中的单词以粗体显示。这里有一个例子:“您可以选择通过选择本地文件或Azure blob 或其他共享 网络位置来上传文件。”
提示或重要说明
显示如此。
第一部分:生成式人工智能和 GPT 模型的基础知识
在本书的第一部分中,介绍了生成式人工智能和 GPT 模型的基础知识,包括 OpenAI 及其旗舰模型系列 GPT 的简要发展历史。
本部分以生成式人工智能领域的概述开始,为您提供关于这一 AI 研究领域的基础知识,包括其历史和最新发展。您还将熟悉生成式人工智能的应用,从文本生成到音乐创作。
第一部分介绍了将生成式人工智能的力量带给大众的公司:OpenAI。您将熟悉 OpenAI 最受欢迎发布的技术背后的技术——ChatGPT,并了解从人工神经网络(ANNs)起步,发展到大型语言模型(LLMs)的研究历程。
本部分包括以下章节:
-
第一章,生成式人工智能简介
-
第二章,OpenAI 和 ChatGPT 超越市场炒作
一、生成式人工智能简介
你好!欢迎来到ChatGPT 和 OpenAI 模型的现代生成式人工智能!在本书中,我们将探索生成式人工智能(AI)及其开创性应用的迷人世界。生成式人工智能已经改变了我们与机器互动的方式,使计算机能够在没有明确人类指导的情况下创建、预测和学习。通过 ChatGPT 和 OpenAI,我们见证了自然语言处理、图像和视频合成等领域的前所未有的进步。无论您是一个好奇的初学者还是一个经验丰富的从业者,本指南将为您提供了解和掌握生成式人工智能激动人心的领域所需的知识和技能。让我们开始并从我们所处的背景的一些定义开始。
本章概述了生成式人工智能领域,该领域利用机器学习(ML)算法创建新的独特数据或内容。
它专注于将生成式人工智能应用于各个领域,如图像合成、文本生成和音乐创作,突出了生成式人工智能革新各行业的潜力。这个生成式人工智能的介绍将为您提供这项技术所处的背景,以及将其置于人工智能、机器学习和深度学习(DL)的广阔世界中的知识。然后,我们将深入探讨生成式人工智能的主要应用领域,提供具体示例和最新发展,以便您熟悉它可能对企业和社会产生的影响。
此外,了解研究生成式人工智能的当前最新技术发展历程将帮助您更好地理解最近发展和最新模型的基础。
我们将涵盖以下主题:
-
理解生成式人工智能
-
探索生成式人工智能的领域
-
生成式人工智能研究的历史和当前状态
通过本章结束时,您将熟悉生成式人工智能这个激动人心的世界,它的应用、背后的研究历史以及当前的发展,这些发展可能对企业产生影响,目前也正在产生影响。
介绍生成式人工智能
AI 在近年来取得了显著进展,其中一个发展迅速的领域是生成式人工智能。生成式人工智能是人工智能和深度学习的一个子领域,专注于利用机器学习技术在现有数据上训练的算法和模型生成新内容,如图像、文本、音乐和视频。
为了更好地理解人工智能、机器学习、深度学习和生成式人工智能之间的关系,请将人工智能视为基础,而机器学习、深度学习和生成式人工智能代表着越来越专业化和专注的研究和应用领域:
-
人工智能代表着创造能够执行任务、展示人类智能和能力并能够与生态系统互动的系统的广泛领域。
-
机器学习是一个专注于创建算法和模型的分支,使这些系统能够通过时间和训练学习和改进自己。机器学习模型从现有数据中学习,并在其成长过程中自动更新其参数。
-
深度学习(DL)是机器学习(ML)的一个子分支,因为它包含深度学习模型。这些深度模型被称为神经网络,特别适用于计算机视觉或自然语言处理(NLP)等领域。当我们谈论机器学习和深度学习模型时,我们通常指的是判别模型,其目的是在数据之上进行预测或推断模式。
-
最后,我们来到生成式人工智能,这是深度学习的进一步子���支,它不使用深度神经网络来对现有数据进行聚类、分类或预测:它使用这些强大的神经网络模型来生成全新的内容,从图像到自然语言,从音乐到视频。
以下图显示了这些研究领域之间的关系:
图 1.1 – 人工智能、机器学习、深度学习和生成式人工智能之间的关系
生成式人工智能模型可以在大量数据上进行训练,然后可以使用该数据中的模式从头开始生成新的示例。这种生成过程与判别模型不同,后者被训练用于预测给定示例的类别或标签。
生成式人工智能领域
近年来,生成式人工智能取得了重大进展,并将其应用扩展到了各种领域,如艺术、音乐、时尚、建筑等等。在其中一些领域,它确实正在改变我们创造、设计和理解周围世界的方式。在其他领域,它正在改进并使现有的流程和操作更加高效。
生成式人工智能应用于许多领域的事实也意味着其模型可以处理不同类型的数据,从自然语言到音频或图像。让我们了解生成式人工智能模型如何处理不同类型的数据和领域。
文本生成
生成式人工智能(generative AI)最伟大的应用之一——也是我们在本书中将要重点介绍的——是其能够以自然语言生成新内容的能力。事实上,生成式人工智能算法可以用于生成新的文本,如文章、诗歌和产品描述。
例如,OpenAI 开发的 GPT-3 等语言模型可以在大量文本数据上进行训练,然后用于生成新的、连贯且语法正确的文本,包括不同语言(输入和输出),以及从文本中提取关键词、主题或完整摘要等相关特征。
这是一个使用 GPT-3 的示例:
图 1.2 – ChatGPT 响应用户提示的示例,并添加参考资料
接下来,我们将继续讨论图像生成。
图像生成
在图像合成中,最早且最知名的生成式 AI 示例之一是 2014 年 I. Goodfellow 等人发表的论文中介绍的生成对抗网络(GAN)架构,生成对抗网络。GAN 的目的是生成与真实图像难以区分的逼真图像。这种能力有一些有趣的商业应用,如为训练计算机视觉模型生成合成数据集,生成逼真的产品图像,以及为虚拟现实和增强现实应用生成逼真图像。
这里是一些由 AI 完全生成的不存在的人脸的例子:
图 1.3 – GAN StyleGAN2 生成的虚构面孔,网址为 https://this-person-does-not-exist/en
然后,在 2021 年,OpenAI 在这一领域推出了一种新的生成式 AI 模型,DALL-E。与 GAN 不同,DALL-E 模型旨在根据自然语言描述生成图像(GAN 以随机噪声向量作为输入),可以生成各种图像,这些图像可能看起来不太真实,但仍描绘出所需的概念。
DALL-E 在广告、产品设计、时尚等创意产业中具有巨大潜力,可以创造独特和创意的图像。
在这里,你可以看到 DALL-E 生成四幅图像的例子,从一个自然语言请求开始:
图 1.4 – DALL-E 生成的图像,以自然语言提示作为输入
请注意,文本和图像生成可以结合起来产生全新的材料。近年来,广泛使用这种组合的新 AI 工具已经出现。
一个例子是 Tome AI,一种生成式叙事格式,除了其能力外,还能从头开始创建幻灯片,利用诸如 DALL-E 和 GPT-3 的模型。
图 1.5 – 一份关于生成式 AI 的演示,完全由 Tome 生成,使用自然语言输入
正如你所看到的,前述的 AI 工具完全能够根据我在自然语言中的简短输入创建一份草稿演示。
音乐生成
生成音乐的生成式人工智能的最初方法可以追溯到 50 年代,在算法作曲领域的研究中,这种技术使用算法生成音乐作品。事实上,1957 年,Lejaren Hiller 和 Leonard Isaacson 创作了《Illiac Suite for String Quartet》(www.youtube/watch?v=n0njBFLQSk8
),这是由 AI 完全创作的第一首音乐作品。从那时起,生成音乐的生成式人工智能领域一直是持续研究的课题。在近年的发展中,新的架构和框架已经在普通大众中广泛传播,例如谷歌在 2016 年推出的 WaveNet 架构,能够生成高质量的音频样本,或者由谷歌开发的 Magenta 项目,该项目使用循环神经网络(RNNs)和其他机器学习技术来生成音乐和其他形式的艺术。然后,在 2020 年,OpenAI 还宣布了 Jukebox,这是一个能够生成音乐的神经网络,可以根据音乐和声音风格、流派、参考艺术家等进行输出定制。
这些以及其他框架成为许多生成音乐 AI 作曲助手的基础。一个例子是由索尼 CSL 研究开发的 Flow Machines。这个生成式人工智能系统在大量音乐作品数据库上进行训练,以在各种风格中创作新音乐。法国作曲家 Benoît Carré使用它创作了一张名为Hello World的专辑(www.helloworldalbum/
),其中与几位人类音乐家合作。
在这里,你可以看到一个完全由 Magenta 项目中的 Music Transformer 模型生成的曲目的示例:
图 1.6 – Music Transformer 允许用户听取由 AI 生成的音乐表演
另一个音乐领域内生成式人工智能的令人难以置信的应用是语音合成。事实上,可以找到许多能够根据文本输入以知名歌手的声音创建音频的 AI 工具。
例如,如果你一直想知道如果 Kanye West 演唱你的歌曲会是什么样子,那么现在你可以通过诸如 FakeYou (fakeyou/
)、Deep Fake Text to Speech 或 UberDuck.ai (uberduck.ai/
)等工具实现你的梦想。
图 1.7 – 使用 UberDuck.ai 进行文本转语音合成
我必须说,结果真的令人印象深刻。如果你想玩得开心,你也可以尝试你所有最喜爱的卡通人物的声音,比如小熊维尼…
接下来,我们将看到用于视频的生成式人工智能。
视频生成
视频生成的生成式人工智能与图像生成有着类似的发展时间线。事实上,在视频生成领域的关键发展之一就是 GANs 的发展。由于它们在生成逼真图像方面的准确性,研究人员开始将这些技术应用于视频生成。基于 GAN 的视频生成的最显著例子之一是 DeepMind 的Motion to Video,它可以从单个图像和一系列动作生成高质量的视频。另一个很好的例子是 NVIDIA 的Video-to-Video Synthesis(Vid2Vid)DL 框架,它使用 GANs 从输入视频中合成高质量的视频。
Vid2Vid 系统可以生成时间上连贯的视频,这意味着它们在时间上保持平滑和逼真的运动。这项技术可以用于执行各种视频合成任务,例如:
-
将一个领域的视频转换为另一个领域(例如,将白天视频转换为夜晚视频或将素描转换为逼真图像)
-
修改现有视频(例如,更改视频中物体的风格或外观)
-
从静态图像创建新视频(例如,将一系列静止图像制作成动画)
在 2022 年 9 月,Meta 的研究人员宣布了Make-A-Video(makeavideo.studio/
)的普遍可用性,这是一个新的人工智能系统,允许用户将他们的自然语言提示转换为视频片段。在这样的技术背后,你可以认出我们迄今为止提到的许多其他领域的模型 - 用于提示的语言理解,图像和运动生成与图像生成,以及由 AI 作曲家制作的背景音乐。
总的来说,生成式人工智能多年来已经影响了许多领域,并且一些人工智能工具已经持续支持艺术家、组织和一般用户。未来看起来非常有前途;然而,在跳入当今市场上最终模型之前,我们首先需要更深入地了解生成式人工智能的根源、其研究历史以及最终导致当前 OpenAI 模型的最新发展。
研究的历史和当前状态
在前几节中,我们概述了生成式人工智能领域中最新和尖端的技术,这些技术都是近年来开发的。然而,这一领域的研究可以追溯到几十年前。
我们可以将生成 AI 领域的研究始于 20 世纪 60 年代,当时 Joseph Weizenbaum 开发了聊天机器人 ELIZA,这是 NLP 系统的最早例子之一。它是一个简单的基于规则的交互系统,旨在通过基于文本输入的响应来娱乐用户,并为 NLP 和生成 AI 的进一步发展铺平了道路。然而,我们知道现代生成 AI 是 DL 的一个子领域,尽管最早的人工神经网络(ANNs)最早是在 20 世纪 40 年代引入的,研究人员面临着一些挑战,包括有限的计算能力和对大脑生物学基础的理解不足。因此,直到 20 世纪 80 年代,随着新硬件和神经科学的发展,反向传播算法的出现促进了 ANNs 的训练阶段。事实上,在反向传播算法出现之前,训练神经网络是困难的,因为无法有效地计算与每个神经元相关的参数或权重的误差梯度,而反向传播使得自动化训练过程成为可能,并实现了 ANNs 的应用。
然后,到了 21 世纪初和 2010 年代,计算能力的进步,加上大量可用于训练的数据,使得 DL 更加实用和普及,随之而来的是研究的提升。
2013 年,Kingma 和 Welling 在他们的论文自动编码变分贝叶斯中引入了一种新的模型架构,称为变分自编码器(VAEs)。VAEs 是基于变分推断概念的生成模型。它们通过将数据编码为称为潜在空间(具有编码器组件)的低维空间,然后将其解码回原始数据空间(具有解码器组件)的方式提供了一种学习的方法。
VAE 的关键创新在于引入了潜在空间的概率解释。与学习输入到潜在空间的确定性映射不同,编码器将输入映射到潜在空间上的概率分布。这使得 VAE 能够通过从潜在空间中采样并将样本解码到输入空间中来生成新样本。
举个例子,假设我们想训练一个 VAE,它可以生成看起来像真实的猫和狗的新图片。
为了实现这一点,VAE 首先接收一张猫或狗的图片,并将其压缩成一组较小的数字进入潜在空间,这些数字代表图片的最重要特征。这些数字被称为潜在变量。
然后,VAE 获取这些潜在变量,并使用它们创建一幅看起来像真实猫或狗图片的新图片。这幅新图片可能与原始图片有些差异,但它应该看起来像属于同一组图片。
随着时间的推移,通过将生成的图片与真实图片进行比较并调整其潜在变量使生成的图片看起来更像真实图片,VAE 变得更擅长创建逼真的图片。
VAE 为生成式人工智能领域的快速发展铺平了道路。事实上,仅仅 1 年后,Ian Goodfellow 提出了 GAN。与 VAE 架构不同,GAN 由两个神经网络组成 - 生成器和判别器 - 它们在一个零和博弈中相互对抗。
生成器创建假数据(在图像的情况下,它创建一幅新图像),旨在看起来像真实数据(例如,一幅猫的图像)。判别器接收真实数据和假数据,并试图区分它们 - 在我们的艺术赝品制作者示例中,它是评论家。
在训练过程中,生成器试图创建可以欺骗判别器认为它是真实的数据,而判别器则试图变得更擅长区分真实数据和假数据。这两部分一起进行训练,这个过程称为对抗训练。
随着时间的推移,生成器变得更擅长创建看起来像真实数据的假数据,而判别器则变得更擅长区分真实数据和假数据。最终,生成器变得如此擅长创建假数据,以至于连判别器也无法区分真假数据。
这里是 GAN 完全生成的人脸的一个例子:
图 1.8 - 逼真的 GAN 生成的人脸示例(摘自 2017 年《逐步增长的 GAN 用于提高质量、稳定性和变化性》:https://arxiv/pdf/1710.10196.pdf)
VAE 和 GAN 这两种模型旨在生成与原始样本无法区分的全新数据,并且它们的架构自提出以来已经得到改进,与 Van den Oord 及其团队提出的 PixelCNNs 和由 Google DeepMind 开发的 WaveNet 等新模型的发展并行,推动了音频和语音生成的进步。
2017 年另一个重要的里程碑是谷歌研究人员在一篇名为*– Attention Is All You Need的论文中引入了一种名为Transformer*的新架构。这在语言生成领域具有革命性意义,因为它允许并行处理同时保留有关语言上下文的记忆,超越了以 RNN 或长短期记忆(LSTM)框架为基础的语言模型的先前尝试。
变压器确实是谷歌于 2018 年推出的名为双向编码器表示来自变压器(BERT)的大规模语言模型的基础,并很快成为自然语言处理实验的基准。
变压器也是由 OpenAI 推出的所有生成式预训练(GPT)模型的基础,包括 ChatGPT 背后的 GPT-3 模型。
尽管在那些年里有大量的研究和成就,但直到 2022 年下半年,公众的注意力才开始转向生成式人工智能领域。
不是偶然的,2022 年被誉为生成式人工智能之年。这一年,强大的人工智能模型和工具开始在普通大众中广泛传播:基于扩散的图像服务(MidJourney、DALL-E 2 和 Stable Diffusion)、OpenAI 的 ChatGPT、文本到视频(Make-a-Video 和 Imagen Video)以及文本到 3D(DreamFusion、Magic3D 和 Get3D)工具都向个人用户提供,有时还是免费的。
这对两个主要原因产生了颠覆性影响:
-
一旦生成式人工智能模型普及到公众,每个个人用户或组织都有可能尝试并欣赏其潜力,即使不是数据科学家或机器学习工程师。
-
这些新模型的输出及其内在的创造力在客观上令人惊叹,而且常常令人担忧。对于个人和政府来说,迫切需要适应。
因此,在不久的将来,我们可能会目睹人工智能系统在个人使用和企业级项目中的采用率激增。
总结
在本章中,我们探索了生成式人工智能及其各种应用领域,包括图像生成、文本生成、音乐生成和视频生成的令人兴奋的世界。我们了解到 OpenAI 训练的 ChatGPT 和 DALL-E 等生成式人工智能模型如何使用深度学习技术学习大型数据集中的模式,并生成既新颖又连贯的新内容。我们还讨论了生成式人工智能的历史、起源以及当前的研究现状。
本章的目标是为生成式人工智能的基础知识提供坚实的基础,并激励您进一步探索这个迷人的领域。
在下一章中,我们将专注于当今市场上最具前景的技术之一,ChatGPT:我们将深入研究其背后的研究以及 OpenAI 的开发,其模型的架构,以及它目前可以解决的主要用例。
参考文献
-
arxiv/abs/1406.2661
-
www.youtube/watch?v=Iy9vRvyRf_E
-
arxiv/abs/1912.04958
-
这个人不存在: this-person-does-not-exist
-
arxiv/abs/1808.06601
-
www.microsoft/en-us/research/blog/a-deep-generative-model-trifecta-three-advances-that-work-towards-harnessing-large-scale-power/
-
tcwang0509.github.io/vid2vid/
二、OpenAI 和 ChatGPT – 超越市场炒作
本章概述了 OpenAI 及其最显著的发展—ChatGPT,重点介绍其历史、技术和能力。
总体目标是提供 ChatGPT 如何在各个行业和应用中使用以改善沟通和自动化流程的更深入了解,最终,这些应用如何影响技术领域及其他领域。
我们将涵盖以下主题:
-
什么是 OpenAI?
-
OpenAI 模型系列概述
-
ChatGPT 之路:背后模型的数学
-
ChatGPT:最先进技术
技术要求
为了能够测试本章中的示例,您需要以下内容:
-
一个 OpenAI 账户,用于访问 Playground 和 Models API(
openai/api/login20
) -
你喜欢的集成开发环境,比如 Jupyter 或 Visual Studio
-
已安装 Python 3.7.1+(
www.python/downloads
) -
pip
已安装(pip.pypa.io/en/stable/installation/
) -
OpenAI Python 库(
pypi/project/openai/
)
什么是 OpenAI?
OpenAI 是由埃隆·马斯克、山姆·奥尔特曼、格雷格·布罗克曼、伊利亚·苏茨克维尔、沃伊切赫·扎雷姆巴和约翰·舒尔曼于 2015 年创立的研究组织。正如 OpenAI 网页上所述,其使命是*“确保人工通用智能(AGI)造福全人类”。由于是通用*的,AGI 旨在具有学习和执行各种任务的能力,而无需特定任务的编程。
自 2015 年以来,OpenAI 将研究重点放在深度强化学习(DRL)上,这是机器学习(ML)的一个子集,将强化学习(RL)与深度神经网络结合起来。该领域的第一个贡献可以追溯到 2016 年,当时该公司发布了 OpenAI Gym,这是一个供研究人员开发和测试RL算法的工具包。
图 2.1 – Gym 文档的首页(https://www.gymlibrary.dev/)
OpenAI 继续在该领域进行研究和贡献,然而其最显著的成就与生成模型有关—生成式预训练 变换器(GPT)。
在他们的论文*“通过生成式预训练改进语言理解”*中介绍了模型架构,并将其命名为GPT-1,OpenAI 研究人员很快在 2019 年发布了其继任者,GPT-2。这个版本的 GPT 是在一个名为WebText的语料库上训练的,当时该语料库包含稍微超过 800 万个文档,总共 40 GB 的文本,这些文本来自 Reddit 提交的 URL,至少有 3 个赞。它有 12 亿个参数,是其前身的十倍。
在这里,您可以看到 HuggingFace 发布的 GPT-2 的 UI 的着陆页(transformer.huggingface.co/doc/distil-gpt2
):
图 2.2 – GPT-2 根据提示撰写段落。来源:https://transformer.huggingface.co/doc/distil-gpt2
然后,在 2020 年,OpenAI 首先宣布,然后发布了 GPT-3,其拥有 1750 亿个参数,显着改善了 GPT-2 的基准结果。
除了自然语言生成模型,OpenAI 还在图像生成领域取得了进展,发布了该领域的第一个模型,名为DALL-E,于 2021 年揭示。正如前一章所述,DALL-E 能够根据自然语言输入创建全新的图像,这由最新版本的 GPT-3 解释。
DALL-E 最近升级到其新版本 DALL-E 2,于 2022 年 4 月宣布。
在下图中,您可以看到以自然语言提示在舒适环境中生成一杯咖啡的逼真图片为例的 DALL-E 生成的图像:
图 2.3 – DALL-E 生成的图像,以自然语言提示为输入
您可以在 OpenAI DALL-E 实验室(labs.openai/
)尝试生成创意图片,您将获得有限的免费积分进行实验。
尽管 OpenAI 在许多生成 AI 领域进行了投资,但其在文本理解和生成方面的贡献卓越,这要归功于我们将在接下来的段落中探讨的基础 GPT 模型的发展。
OpenAI 模型系列概述
今天,OpenAI 提供一组预训练的、可供公众使用的模型。这有两个重要的含义:
-
强大的基础模型可以在不需要长时间和昂贵的训练的情况下使用
-
操纵这些模型并不需要成为数据科学家或 ML 工程师
用户可以在 OpenAI Playground 中测试 OpenAI 模型,这是一个友好的用户界面,您可以与模型进行交互,而无需编写任何代码。
在下面的截图中,您可以看到 OpenAI Playground 的着陆页:
图 2.4 – OpenAI Playground 位于 https://platform.openai/playground
正如您从图 2**.4中所看到的,Playground 提供了一个用户界面,用户可以在该界面的右侧选择模型开始与之交互。要开始与 Playground 交互,您只需在自然语言的输入空间中键入任何问题或指令。您也可以从 OpenAI 文档中提供的一些示例开始(platform.openai/examples
)。
在深入研究模型系列之前,让我们首先定义一些您将在本章中看到的行话:
-
标记:标记可以被视为 API 用于处理输入提示的单词片段或段。与完整单词不同,标记可能包含尾随空格甚至部分子单词。为了更好地理解标记的长度概念,有一些一般性指导原则需要牢记。例如,在英语中,一个标记大约相当于四个字符,或者三分之四个单词。
-
提示:在自然语言处理(NLP)和机器学习的背景下,提示是指作为输入提供给 AI 语言模型以生成响应或输出的文本片段。提示可以是一个问题、一个陈述或一个句子,用于为语言模型提供上下文和指导。
-
上下文:在 GPT 领域,上下文指的是用户提示之前的单词和句子。语言模型利用这个上下文来生成最可能的下一个单词或短语,基于训练数据中发现的模式和关系。
-
模型置信度:模型置信度指的是 AI 模型对特定预测或输出的确定性或概率水平。在 NLP 的背景下,模型置信度通常用于指示 AI 模型对其生成的响应与给定输入提示的正确性或相关性的信心程度。
上述定义将对理解如何使用 Azure OpenAI 模型系列以及如何配置其参数起到关键作用。
在 Playground 中,有两个主要的模型系列可以进行测试:
- GPT-3:一组能够理解和生成自然语言的模型。GPT-3 已经在大量文本语料库上进行了训练,可以执行各种自然语言任务,如语言翻译、摘要、问答等。这里是一个例子:
图 2.5 – 使用 GPT-3 进行摘要任务的示例
GPT-3.5: 这是在 GPT-3 基础上构建的新一代模型,旨在提高其自然语言理解和生成能力。GPT-3.5 模型可以执行复杂的自然语言任务,如撰写连贯的段落或文章,生成诗歌,甚至以自然语言创建计算机程序。GPT-3.5 是 ChatGPT 背后的模型,在其 API 上,它还可以通过专门的 UI 在 Playground 中消耗:
图 2.6 – 使用 GPT-3.5 进行交互的示例
- Codex: 一组能够理解和生成各种编程语言代码的模型。Codex 可以将自然语言提示转换为可运行的代码,使其成为软件开发的强大工具。以下是使用 Codex 的例子:
图 2.7 – 使用 Codex 生成代码的示例
注
在 2023 年 3 月,OpenAI 宣布 Codex 模型将从该日期起被弃用。原因是新的聊天模型(包括 ChatGPT 背后的模型 GPT-3.5-turbo)的不可思议的能力,这些模型还可以涵盖编码任务,并且其结果可以达到或甚至超过 Codex 模型的结果。
对于每个模型,你还可以调整一些可配置的参数。以下是一个列表:
-
温度(从 0 到 1):控制模型响应的随机性。低温度使你的模型更加确定性,意味着它会倾向于给出相同的输出作为同样的问题。例如,如果我多次问我的模型,“OpenAI 是什么?”并将温度设置为 0,它总是会给出相同的答案。另一方面,如果我使用温度设置为 1 的模型做同样的事情,它将试图通过措辞和风格在每次都修改它的答案。
-
最大长度(从 0 到 2048):控制模型对用户提示的响应的长度(以标记为单位)。
-
停止序列(用户输入): 这会使得回应在期望的地方结束,比如句子或列表的结尾。
-
顶部概率(从 0 到 1):控制模型在生成回应时将考虑哪些标记。将其设置为 0.9 将考虑所有可能标记中最有可能的前 90%。也许你会问,“为什么不将顶部概率设置为 1,这样就可以选择所有最有可能的标记?”答案是用户可能仍然希望在模型信心较低时保持多样性,即使在得分最高的标记中。
-
频率惩罚(从 0 到 1):控制生成的回应中相同标记的重复频率。惩罚越高,出现相同标记在回应中的概率就越低。该惩罚通过标记在文本中迄今为止出现的频率来比例减少概率(这是与下一个参数的关键区别)。
-
存在惩罚(范围从 0 到 2):这类似于上一个,但更严格。它减少了出现在文本中的任何一个标记的重复机会。由于比频率惩罚更严格,存在惩罚也增加了在回应中引入新主题的可能性。
-
最佳(范围从 0 到 20):这将生成多个回应,并仅显示所有标记的总概率最佳的回应。
-
回应前后文本(用户输入):这在模型回应之前和之后插入文本。这可以帮助模型准备回应。
除了在 Playground 中尝试 OpenAI 模型,您还可以在自定义代码中调用模型 API 并将模型嵌入到您的应用程序中。实际上,在 Playground 的右上角,您可以点击查看代码并导出如下所示的配置:
图 2.8 - 使用自然语言提示调用 GPT3 模型的 Python 代码
如您从前述屏幕截图中所见,该代码导出了您在 Playground 中设置的参数配置。
现在,您可以通过在终端中使用pip install openai
来安装 Python 中的 OpenAI 库来开始使用。为了使用模型,您需要生成一个 API 密钥。您可以在您的账户设置中找到您的 API 密钥(platform.openai/account/api-keys
),如下所示:
图 2.9 - 您 OpenAI 配置文件中帐户设置页面中的 API 密钥
使用 OpenAI API,您还可以尝试以下在 Playground 中不可用的其他模型系列:
- 审查:这是由 OpenAI 开发的经过调整的模型,可以检测潜在的敏感或不安全的文本内容。审查使用机器学习算法根据上下文和语言使用对文本进行分类为安全或不安全。此模型可用于在社交媒体平台、在线社区及其他许多领域自动化内容审查。有多个类别,如仇恨、仇恨/威胁、自残、性暴力、性暴力/未成年人、暴力、暴力/图形。
下面是审查 API 的示例代码:
import os
import openai
openai.api_key = os.getenv("OPENAI_API_KEY")
openai.Moderation.create(
input="I want to kill him",
)
其输出如下所示:
<OpenAIObject id=modr-6sHusuY9frxJdfqTBXHsOAfWhckrh at 0x218bd8482c0> JSON: {
"id": "modr-6sHusuY9frxJdfqTBXHsOAfWhckrh",
"model": "text-moderation-004",
"results": [
{
"categories": {
"hate": false,
"hate/threatening": false,
"self-harm": false,
"sexual": false,
"sexual/minors": false,
"violence": true,
"violence/graphic": false
},
"category_scores": {
"hate": 1.7164344171760604e-05,
"hate/threatening": 2.614225103059198e-08,
"self-harm": 2.5988580176772302e-08,
"sexual": 2.8184256279928377e-06,
"sexual/minors": 9.1383149936064e-09,
"violence": 0.9910049438476562,
"violence/graphic": 5.316753117767803e-07
},
"flagged": true
}
]
}
在这种情况下,审查 API 检测到暴力内容的证据。
- 嵌入:一些模型可以使用嵌入。这些嵌入涉及在多维空间中表示单词或句子。在这个空间中不同实例之间的数学距离表示它们在意义上的相似性。举个例子,想象单词 queen、woman、king 和 man。理想情况下,在我们的多维空间中,如果表示正确,我们希望实现以下内容:
图 2.10 – 单词之间的矢量方程示例
这意味着女人和男人之间的距离应该等于女王和国王之间的距离。这里是一个嵌入的例子:
import openai
embedding = openai.Embedding.create(
input="The cat is on the table",
model="text-embedding-ada-002")["data"][0][ "embedding"]
前面的方法创建了输入的向量表示。我们可以在这里查看输出的前 10 个向量。
embedding[1:10]
[-0.01369840931147337,
-0.007505378685891628,
-0.002576263388618827,
-0.014773285016417503,
0.019935185089707375,
-0.01802290789783001,
-0.01594814844429493,
-0.0010944041423499584,
-0.014323337003588676]
嵌入在智能搜索场景中可以极其有用。事实上,通过获取用户输入和用户想要搜索的文档的嵌入,可以计算距离度量(即余弦相似度)来衡量输入和文档之间的距离。通过这样做,我们可以检索与用户输入在数学距离上更接近的文档。
-
Whisper:这是一个语音识别模型,可以将音频转录为文本。Whisper 可以识别和转录各种语言和方言,准确率很高,是自动语音识别系统的有价值的工具。这里是一个例子:
# Note: you need to be using OpenAI Python v 0.27.0 for the code below to work
import openai
openai.api_key = os.getenv("OPENAI_API_KEY")
audio_file= open("/path/to/file/audio.mp3", "rb")
transcript = openai.Audio.transcribe("whisper-1", audio_file)
输出如下所示:
{"text": Yes, hi, I just noticed a dent on the side of my car and I have no idea how it got there. There were no witnesses around and I'm really frustrated.
….
}
所有先前的模型都是预先构建的,也就是说它们已经在一个庞大的知识库上进行了预训练。
然而,有一些方法可以使您的模型更加定制化,以适应您的用例。
第一种方法嵌入在模型设计的方式中,它涉及在few-learning 方法中为您的模型提供上下文(我们将在本书的后面重点介绍这种技术)。换句话说,您可以要求模型生成一篇文章,其模板和词汇回忆您已经写过的另一篇文章。为此,您可以向模型提供您的查询生成一篇文章和以前的文章作为参考或上下文,以便模型更好地为您的请求做好准备。
这里是一个例子:
图 2.11 – OpenAI Playground 中使用 few-shot learning 方法进行对话的示例
第二种方法更为复杂,被称为微调。微调是将预训练模型适应新任务的过程。
在微调中,预训练模型的参数被改变,要么通过调整现有参数,要么通过添加新参数,以更好地适应新任务的数据。这是通过在特定于新任务的较小标记数据集上训练模型来实现的。微调的关键思想是利用从预训练模型中学到的知识,并将其微调到新任务,而不是从头开始训练模型。请看下面的图:
图 2.12 – 模型微调
在前图中,你可以看到关于如何在 OpenAI 预构建模型上进行精调的模式图。其思想是你可以使用通用参数或权重的预训练模型。然后,你用自定义数据喂养你的模型,通常以键-值提示和完成的形式,如下所示:
{"prompt": "<prompt text>", "completion": "<ideal generated text>"}
{"prompt": "<prompt text>", "completion": "<ideal generated text>"}
{"prompt": "<prompt text>", "completion": "<ideal generated text>"}
...
训练完成后,你将会得到一个定制化模型,对于给定任务表现特别出色,例如,对公司文档进行分类。
精调的好处在于,你可以根据自己的用例定制预构建模型,无需从头开始重新训练,但是可以利用更小的训练数据集,因此训练时间和计算量更少。与此同时,模型保持其生成能力和通过原始训练学习的准确性,这是在大规模数据集上发生的。
在这一段中,我们对 OpenAI 提供给一般公众的模型进行了概述,从你可以直接在 Playground 中尝试的模型(GPT、Codex)到如嵌入等更复杂的模型。我们还了解到,除了使用预构建模型之外,你还可以通过精调进行定制化,提供一组示例供学习。
在接下来的章节中,我们将专注于这些惊人模型的背景,从它们背后的数学开始,然后深入探讨使 ChatGPT 成为可能的重大发现。
ChatGPT 之路:其背后的模型数学
自 2015 年成立以来,OpenAI 投资于研究和开发一类被称为生成式预训练变压器(GPT)的模型,并且它们作为 ChatGPT 背后的引擎已经引起了大家的关注。
GPT 模型属于变压器结构框架,此框架于 2017 年由 Google 研究员在一篇论文中介绍,Attention Is All You Need。
变压器架构是为了克服传统循环神经网络(RNNs)的局限性而引入的。RNNs 首次在 1980 年代由洛斯阿拉莫斯国家实验室的研究人员提出,但直到 1990 年代它们才引起了人们的关注。RNNs 背后的最初想法是处理顺序数据或时间序列数据,跨时间步保留信息。
确实,直到那一时刻,经典的人工神经网络(ANN)结构是前馈 ANN 的结构,其中每个隐藏层的输出是下一个隐藏层的输入,没有保留有关过去层的信息。
为了理解变压器背后的思想,我们需要从它的起源开始。因此,我们将深入探讨以下主题:
-
RNN 的结构
-
RNN 的主要局限性
-
如何通过引入新的架构元素(包括位置编码、自注意力和前馈层)克服这些局限性
-
我们如何达到 GPT 和 ChatGPT 的最先进技术
让我们从变压器的前身架构开始。
RNN 的结构
让我们想象我们想要预测房价。如果我们只有今天的价格,我们可以使用一个前馈架构,通过隐藏层(带有激活函数)对输入进行非线性转换,并得到明天价格的预测输出。具体如下:
图 2.13 – 具有隐藏层的前馈架构
然而,对于这种类型的数据,也很可能有更长的序列可用。例如,我们可能有未来 5 年的这栋房子的时间序列。当然,我们希望将我们拥有的额外信息嵌入到我们的模型中,以便我们的 RNN 能够保持过去输入的记忆,以正确解释当前输入并预测未来输出。
因此,回到我们的例子,想象我们不仅有今天的价格,还有昨天的价格**(t-1)和前一天的价格(t-2)**。这是我们如何计算的:
图 2.14 – RNN 示例
由于我们只关心明天的价格,让我们忽略t-1和t的中间最终输出。
图 2.15 – RNN 示例
如您所见,t-2的隐藏层输出作为t-1的隐藏层的(加权)输入,同时也接受t-1的输入。然后,t-1的隐藏层输出,已经保留了t-2和t-1输入的记忆,作为t的隐藏层的输入。因此,我们感兴趣的明天价格(yt+1)带有所有先前几天输入的记忆。
最后,如果我们想要缩小这张图片,我们可以将 RNN 看作如下:
图 2.16 – RNN 的包装形式示例
这意味着 RNN 层在时间步t-n的输出然后被产生并传递为下一个时间步的输入。RNN 层的隐藏状态也作为下一个时间步的输入传递,使网络能够在输入序列的不同部分之间保持和传播信息。
尽管 RNN 在人工神经网络领域是一项重大进展,但它们仍然存在一些限制,我们将在下一节中进行探讨。
RNN 的主要限制
如本节介绍所述,RNNs 存在三个主要限制:
-
梯度消失和爆炸:RNNs 存在梯度消失和爆炸的问题,这使得有效训练网络变得困难。这个问题发生在反向传播过程中梯度被多次相乘,导致梯度变得非常小或非常大。
-
有限的上下文:传统的 RNN 只能捕捉有限数量的上下文,因为它们一次处理输入序列的一个元素。这意味着它们无法有效处理长期依赖关系或输入序列中相距较远的元素之间的关系。
-
并行化困难:RNN 本质上是顺序的,这使得并行化它们的计算变得困难,因此它们无法充分利用今天的图形处理单元(GPU)。这可能导致它们在大规模数据集和设备上训练和部署变慢。
1997 年,Sepp Hochreiter 和 Jürgen Schmidhuber 在他们的论文《长短期记忆》中引入了一种新的架构,试图克服前两个限制(有限的上下文和梯度消失和梯度爆炸)。
LSTM 网络通过引入细胞状态的概念来克服有限上下文的问题,该状态与隐藏状态分开,能够长时间保持信息。细胞状态在网络中保持不变传递,使其能够存储从以前时间步丢失的信息。
此外,LSTM 网络通过使用精心设计的门控来控制信息在细胞内外的流动,从而克服了梯度消失和梯度爆炸的问题,这有助于防止梯度变得过小或过大。
然而,LSTM 网络仍然存在并行化不足的问题,因此训练时间较慢(甚至比 RNN 更复杂,因此更慢)。目标是拥有一个能够在顺序数据上实现并行化的模型。
为了克服这些限制,引入了一种新的框架。
克服限制 - 引入 transformers
Transformer 架构通过替换循环(使用自注意机制)来解决这些限制,允许并行计算并捕捉长期依赖关系。
图 2.7 - 来自原始论文“注意力就是你所需要的”的 Transformer 架构。Vaswani, A., Shazeer, N., Parmar, N., Uszkoreit, J., Jones, L., Gomez, A. N., Kaiser, L., & Polosukhin, I. (2017). Attention Is All You Need. ArXiv. https://doi/10.48550/arXiv.1706.03762
在上述图中(摘自原始论文),您可以看到有两个主要的构建模块:左侧是“编码器”,其任务是将输入表示为较低维空间;右侧是“解码器”,其任务是将编码器提供的较低维数据翻译回原始数据格式。
编码器和解码器共享三种主要类型的层,区分了 Transformer 架构:位置编码、自注意力和前馈。
让我们在以下部分了解每一个。
位置编码
编码器是将自然语言输入转换为数字向量的层。这得益于嵌入的过程,这是一种 NLP 技术,它用向量表示单词,使得一旦在向量空间中表示,向量之间的数学距离代表了它们所代表的单词之间的相似性。请看下图:
图 2.18 – 《注意力就是你所需要的》原始论文中的 Transformer 架构。Vaswani, A., Shazeer, N., Parmar, N., Uszkoreit, J., Jones, L., Gomez, A. N., Kaiser, L., & Polosukhin, I. (2017). Attention Is All You Need. ArXiv. https://doi/10.48550/arXiv.1706.03762
当我们谈论句子的含义时,我们都同意句子中单词的排列对于确定其含义是重要的。这就是为什么我们希望我们的编码器考虑到这种顺序,是位置的原因。
位置编码是一个固定的、可学习的向量,表示单词在序列中的位置。它被添加到单词的嵌入中,使得单词的最终表示包括其含义和位置。
自注意力
自注意力层负责确定生成输出时每个输入标记的重要性。它们回答了这个问题,“我应该关注输入的哪一部分?”
图 2.19 – 《注意力就是你所需要的》原始论文中的 Transformer 架构。Vaswani, A., Shazeer, N., Parmar, N., Uszkoreit, J., Jones, L., Gomez, A. N., Kaiser, L., & Polosukhin, I. (2017). Attention Is All You Need. ArXiv. https://doi/10.48550/arXiv.1706.03762
为了获得一个句子的自注意力向量,我们需要的元素是值,查询和键。这些矩阵用于计算输入序列中元素之间的注意力得分,并且是在训练过程中学习的三个权重矩阵(通常初始化为随机值)。
查询用于表示注意力机制的当前焦点,而键用于确定应该受到注意的输入部分,值用于计算上下文向量。然后这些矩阵相乘,并通过非线性变换传递(使用 softmax 函数)。自注意力层的输出以一种转换的、具有上下文意识的方式表示输入值,这使得 Transformer 可以根据手头任务关注输入的不同部分。这是如何描述矩阵相乘的过程:
图 2.20 - 查询,键和值矩阵相乘以获得上下文向量的表示
注意,在论文作者提出的架构中,“注意力就是你需要的”,注意力层被称为多头注意力。多头注意力实际上是一种机制,多个自注意力机制并行处理输入数据的不同部分,生成多个表示。这允许 Transformer 模型同时关注输入数据的不同部分并从多个角度汇总信息。
一旦注意力层的并行输出准备就绪,它们将被串联并通过前馈层进行处理。
前馈层
前馈层负责将自注意力层的输出转换为最终输出的合适表示。
图 2.21 - “注意力就是你需要的”原始论文中的 Transformer 架构。Vaswani, A., Shazeer, N., Parmar, N., Uszkoreit, J., Jones, L., Gomez, A. N., Kaiser, L., & Polosukhin, I. (2017). Attention Is All You Need. ArXiv. https://doi/10.48550/arXiv.1706.03762
前馈层是 Transformer 架构的主要构件,并包括两个主要元素:
-
全连接层(也称为密集层):这是一种每个神经元与前一层中的每个神经元相连接的层类型。换句话说,来自前一层的每个输入都连接到当前层中的每个神经元,并且当前层中的每个神经元都对下一层中所有神经元的输出有贡献。密集层中的每个神经元通过线性变换计算其输入的加权和。
-
激活函数:这是应用于全连接层输出的非线性函数。激活函数用于向神经元的输出引入非线性,这对于网络学习输入数据中的复杂模式和关系是必要的。在 GPT 的情况下,激活函数是 ReLU。
前馈层的输出然后被用作网络中下一层的输入。
在下图中,我们可以看到一个通用前馈层的示例,它以一个二维向量作为输入,在密集层中使用训练好的权重进行线性操作,然后使用 ReLU 激活函数对输出进行非线性转换:
图 2.22 - 具有二维输入的通用前馈层在密集层中和 ReLU 非线性激活函数中的模式图
最后一英里 - 解码结果
我们提到变压器由两个组件组成:编码器和解码器。尽管它们共享位置编码、自注意力和前馈层的核心元素,但解码器仍然必须执行一个额外的操作 - 将输入解码为原始数据格式。这个操作是通过一个线性层(一个将输入的维度调整为输出维度的前馈网络)和一个 softmax 函数(它将输入转换为概率向量)来完成的。
从该向量中,我们选择对应最高概率的单词,并将其用作模型的最佳输出。
上面解释的所有架构元素定义了变压器的框架。在下一节中,我们将看到这一创新框架如何为 GPT-3 和其他由 OpenAI 开发的强大语言模型铺平了道路。
GPT-3
现在我们来到了 ChatGPT 背后的 GPT-3 架构。它确实是基于变压器架构的模型,但有一个特殊之处:它只有解码器层。事实上,在他们的介绍性论文通过生成式预训练改进语言理解中,OpenAI 的研究人员采用了仅解码器的方法。
GPT-3 是巨大的。但具体有多大呢?
让我们从它训练的知识库开始。它旨在尽可能详尽地涵盖人类知识,因此由不同来源组成:
-
Common Crawl (
commoncrawl/
):一个在 8 年时间内收集的大规模网络数据语料库,几乎没有过滤 -
WebText2 (
openwebtext2.readthedocs.io/en/latest/background/
):一个包含来自 Reddit 帖子中链接的网页文本的集合,至少有 3 个赞 -
Books1 和 Books2:两个分别由互联网上可用的书籍组成的语料库
-
维基百科:一个包含来自流行在线百科全书维基百科英文版的文章的语料库
在这里你可以更好地了解:
图 2.23 – GPT-3 知识库
让我们考虑以下假设:
-
1 代币 ~= 4 个英文字符
-
1 代币 ~= ¾ 词
我们可以得出结论,GPT-3 已经在374 亿个单词上进行了训练!
这个知识库旨在在 96 个隐藏层中稀疏地训练 1750 亿个参数。为了让你了解 GPT-3 有多庞大,让我们将其与之前的版本 GPT-1 和 GPT-2 进行比较:
图 2.24 – GPT 模型随时间在参数数量上的演变
正如你所看到的,在自 2018 年 GPT-1 推出以来的几年里,GPT 模型的复杂性和深度呈指数级增长。
GPT 模型背后的发展速度令人惊叹,特别是如果我们考虑到这个模型的最新版本,也是首个向普通大众提供的版本:ChatGPT。
ChatGPT:最先进的技术
2022 年 11 月,OpenAI 宣布了其会话式人工智能系统 ChatGPT 的网络预览,向普通大众提供。这引起了来自专家、组织和普通大众的巨大热情,以至于在仅仅 5 天后,该服务就吸引了 100 万用户!
在写关于 ChatGPT 之前,我会让它自我介绍:
图 2.25 – ChatGPT 自我介绍
ChatGPT 是建立在一个先进的语言模型之上的,该模型利用了 GPT-3 的修改版本,专门为对话进行了微调。优化过程涉及到强化学习与人类反馈(RLHF),这是一种利用人类输入来训练模型展现出期望对话行为的技术。
我们可以将 RLHF 定义为一种机器学习方法,其中算法通过接收来自人类的反馈来学习执行任务。该算法经过训练,以做出最大化人类提供的奖励信号的决策,并且人类提供额外的反馈以改善算法的性能。当任务对于传统编程来说过于复杂或者期望的结果难以提前指定时,这种方法就很有用。
这里的相关区别是 ChatGPT 已经在人类的帮助下进行了训练,使其与其用户保持一致。通过整合 RLHF,ChatGPT 被设计为更好地理解并以一种自然而引人入胜的方式回应人类语言。
注意
相同的 RLHF 机制被用于我们可以将其视为 ChatGPT 前身的InstructGPT。在 OpenAI 的研究人员于 2022 年 1 月发表的相关论文中,InstructGPT 被介绍为一类比 GPT-3 更擅长遵循英语指示的模型。
ChatGPT 的知识截止日期是 2021 年,这意味着该模型了解到截止日期前可用的信息。然而,您仍然可以通过少量示例学习方法为模型提供上下文,尽管模型的回复仍然基于其知识库直到截止日期。
ChatGPT 正在彻底改变与人工智能的互动方式。ChatGPT 生成类人文本的能力使其成为广泛应用的热门选择,包括聊天机器人、客户服务和内容创作。此外,OpenAI 宣布 ChatGPT API 将很快发布,允许开发人员将 ChatGPT 直接集成到自定义应用程序中。
ChatGPT 的架构和训练方法的不断发展和改进承诺将进一步推动语言处理的边界。
总结
在本章中,我们回顾了 OpenAI 的历史、研究领域和最新发展,一直到 ChatGPT。我们深入研究了 OpenAI Playground 作为测试环境以及如何将 Models API 嵌入到您的代码中。然后,我们深入探讨了 GPT 模型家族背后的数学知识,以更清晰地了解 GPT-3 的运作原理,这是 ChatGPT 背后的模型。
通过深入理解 GPT 模型背后的数学,我们可以更好地理解这些模型的强大之处以及它们对个人和组织的多种影响。通过对 OpenAI Playground 和 Models API 的第一次了解,我们看到了测试或嵌入预训练模型的简易性:这里的改变游戏规则的因素是,您无需强大的硬件和数小时的时间来训练您的模型,因为它们已经可供您使用,如果需要,还可以定制一些示例。
在下一章中,我们也开始了本书的第二部分,我们将看到 ChatGPT 在各个领域内的应用,以及如何释放其潜力。您将学习如何通过正确设计提示来获取 ChatGPT 的最高价值,如何提高日常生产力,以及它如何成为开发人员、市场营销人员和研究人员的出色项目助手。
参考文献
-
Radford, A., & Narasimhan, K. (2018). 通过生成式预训练改善语言理解。
-
Vaswani, A., Shazeer, N., Parmar, N., Uszkoreit, J., Jones, L., Gomez, A. N., Kaiser, L., & Polosukhin, I. (2017). 注意力机制就是你所需要的. ArXiv.
doi/10.48550/arXiv.1706.03762
OpenAI. Fine-Tuning Guide. OpenAI 平台文档.platform.openai/docs/guides/fine-tuning
.
第二部分:ChatGPT 的实践
在本部分,我们将开始我们在 ChatGPT 为市场带来的新可能性的旅程。从日常生产率到领域特定的用例,您将熟悉 ChatGPT 的能力,以及它如何作为各种任务的推理引擎使用。
一旦我们探讨了技术前提条件,这一部分就会概述 ChatGPT 用户界面,包括聊天管理和问题修改。
然后它转向了 ChatGPT 最重要的元素之一,即如何充分利用 ChatGPT,在一般的大语言模型中,即提示设计的概念。在这里,您将熟悉让 ChatGPT 发挥其最佳作用的强大技术,包括最新的发展和关于诸如Reason and Act(ReAct)和Chain of Thoughts(CoT)等技术的研究论文。
本部分最后将重点放在如何在实际操作中使用 ChatGPT 的具体示例上,从日常生产力开始,逐步转向更多领域特定的学科,如营销,开发和研究。在这里,您不仅可以了解 ChatGPT 在这些领域可以覆盖的用例,还可以看到具体示例以自行复制。
本部分包括以下章节:
-
第三章,熟悉 ChatGPT
-
第四章,理解提示设计
-
第五章,提升日常工作效率与 ChatGPT
-
第六章,用 ChatGPT 开发未来
-
第七章,用 ChatGPT 掌握营销
-
第八章,用 ChatGPT 重新定义研究
三、熟悉 ChatGPT
本章让您设置 ChatGPT 账户并开始使用该服务。它还将介绍如何与 Web UI 交互,如何按主题组织聊天,以及如何构建对话。
在本章结束时,您将更好地了解 ChatGPT 是什么,它是如何工作的,以及如何有效地将其组织为日常助手。您还将了解其主要功能和局限性,以便知道如何负责任地使用它。
在本章中,我们将涵盖以下主题:
-
设置 ChatGPT 账户
-
熟悉 UI
-
组织聊天
设置 ChatGPT 账户
要开始使用 ChatGPT,您首先需要创建一个 OpenAI 账户。请按照这里的说明:
-
在这里导航至 OpenAI 网站:
openai
。 -
滚动到下方,点击ChatGPT,如下所示:
图 3.1 – OpenAI 登陆页面
- 然后您需要点击尝试 ChatGPT:
图 3.2 – ChatGPT 登陆页面
- 在下一页,您需要填写表格注册一个 OpenAI 账户。这是您可以用来访问 OpenAI Playground 并生成 API 密钥的同一个账户。
图 3.3 – ChatGPT 登陆页面,带有登录和注册选项
- 现在您可以开始使用 ChatGPT Web 应用程序了。找到 ChatGPT Web 应用程序后,点击启动。您将能够直接在 Web 浏览器中与 ChatGPT 交互并执行各种自然语言处理任务。
图 3.4 – ChatGPT Web 界面
太棒了!现在您可以开始使用 ChatGPT。但您也需要了解应用程序是什么样的。让我们接着了解一下。
熟悉 UI
ChatGPT 的 Web 界面非常直观易用。在开始编写提示之前,您可以轻松尝试服务提供的一些示例:
图 3.5 – ChatGPT 提供的示例提示
接下来,您还将了解 ChatGPT 的主要功能:
图 3.6 – ChatGPT 的功能
在功能中,强调了 ChatGPT 如何在整个对话中保持记忆。在上一章中,我们深入研究了 GPT 背后的数学,并看到了记忆保留组件的重要性:现在您可以欣赏到这种数学复杂性的实际运作。
ChatGPT 的这种能力也是少样本学习的一个例子,我们将在接下来的章节中更多地了解这个概念。
注意
ChatGPT 能够保持先前上下文的记忆,这要归功于其少样本学习能力。少样本学习是一种机器学习技术,使模型能够在非常有限的标记数据下学习新概念或任务,已成为人工智能领域的重要研究领域。
由于具有记忆保持和少样本学习等功能,ChatGPT 允许用户在对话过程中提供跟进或更正,而无需再次提供上下文。
这里有一个示例,展示了如何在与 ChatGPT 对话中对提示进行更正:
图 3.7 – ChatGPT 跟进评论和提示更正示例
最后,模型还提醒用户,除了其功能之外,它还经过训练,可以拒绝可能有害或冒犯性的不当请求。
在其主页上提供的最后一组信息与 ChatGPT 的限制相关:
图 3.8 – ChatGPT 限制
这些元素是一个重要的提醒,即如今,AI 工具仍需要人类监督。事实上,除了 2021 年至今之间的缺失信息外,ChatGPT 可能还会提供不准确甚至错误的信息。这就是为什么它仍然需要监督的原因。
值得一提的有趣现象是幻觉。幻觉指的是 AI 模型生成类似真实数据但实际上并非基于任何真实观察的虚假或想象数据的现象。以下是一个例子:
图 3.9 – ChatGPT 幻觉示例
图 3.9中的问题最初由道格拉斯·霍夫斯塔德和大卫·本德尔开发,旨在诱导 ChatGPT 产生幻觉性回应!
为了防止幻觉,应该牢记一些良好的做法:
-
具体明确:确保您的提示定义明确,清楚陈述您想要实现的目标。这将有助于模型生成更专注和相关的回应。例如,一个提示如告诉我关于世界的事情可能不会产生很好的结果。
-
提供充分的上下文:提供的上下文越多,模型就能更好地理解您的需求并生成相关的响应。
-
避免歧义:在您的提示中避免使用模糊或含糊不清的术语或短语,因为这可能会使模型难以理解您想要什么。
-
使用简洁的语言:尽可能简洁地表达您的提示,同时提供足够的信息让模型生成响应。这将有助于确保模型生成专注和简洁的回应。
-
注意训练数据:ChatGPT 已经在大量文本语料库上进行了训练,它可能生成基于该数据模式的有偏见或不准确的响应。请注意这一点,并考虑调整您的提示,如果您怀疑模型生成的响应不合适或准确。
正如我们将在下一章中看到的,这些提示设计考虑不仅有助于防止幻觉,还有助于从与 ChatGPT 的互动中获得最高价值和效用。
有了这一点,让我们现在看看聊天是如何管理的。
组织聊天
ChatGPT 展示的节省时间功能是具有多个开放线程或聊天的可能性。实际上,当您开始编写第一个提示时,ChatGPT 将自动启动一个新的聊天并以相关标题命名。请看以下截图的左上角:
图 3.10 – 在 ChatGPT 中创建新聊天
您始终可以决定从头开始新的聊天,但是,您可能希望继续几天前开始的对话。
想象一下,您已经要求 ChatGPT 解释线性回归的概念,然后开始了几个后续对话。这是它的显示方式:
图 3.11 – 具有上下文的现有聊天示例
在那个聊天中,ChatGPT 已经有了上下文,因此您可以继续对话而无需重复概念。请看这里:
图 3.12 – 同一上下文中的后续问题示例
通过这一点,我们了解了 ChatGPT 聊天是如何维护和组织的,这使得参考旧聊天变得容易。
摘要
在本章中,我们详细介绍了如何使用我们的帐户开始使用 ChatGPT 的具体步骤。我们还深入探讨了其能力和局限性,以及有关幻觉风险以及如何通过提示设计避免这种风险的一些考虑。我们还看到了应用程序中如何呈现聊天以及如何轻松地参考旧聊天。
在下一章中,我们将更多关注提示设计和工程,以便从与 ChatGPT 的对话中获得最高价值。
参考资料
-
openai/blog/chatgpt/
-
www.sify/ai-analytics/the-hilarious-and-horrifying-hallucinations-of-ai/
-
www.datanami/2023/01/17/hallucinations-plagiarism-and-chatgpt/
四、理解提示设计
在前几章中,我们多次提到“提示”这个术语,同时指的是 ChatGPT 和 OpenAI 模型中的用户输入。
本章更深入地探讨了提示设计和工程作为改善模型准确性的技术的重要性。提示对模型生成的输出产生重大影响:一个设计良好的提示可以帮助引导模型生成相关和准确的输出,而一个设计不良的提示可能导致无关或令人困惑的输出。最后,还重要的是将道德考虑因素纳入提示中,以防止模型生成有害内容。
在本章中,我们将讨论以下主题:
-
什么是提示,为什么它重要?
-
零、一和少次学习 - 变压器模型的典型特征
-
获得相关和一致结果的明确定义提示的原则
-
避免隐藏偏见的风险,并考虑 ChatGPT 中的道德考虑因素
在本章结束时,您将能够通过适当的提示设计从 ChatGPT 和 OpenAI 模型的交互中获得高质量的结果。
什么是提示,为什么它重要?
在生成式人工智能的背景下,提示是指用户提供给生成模型的输入。当我们谈论 ChatGPT 和 OpenAI 模型时,提示主要指的是自然语言中的一段文本,或者 - 正如我们在 Codex 模型中看到的那样 - 是编程语言中的一段文本。
提示是用户可以控制这些模型生成的输出的唯一方式。因此,毫无疑问地说,用于与 AI 系统进行对话的提示的质量对于确定其成功至关重要。
明确定义的提示是成功对话的秘诀,涵盖了感兴趣的主题;相反,定义不清晰的提示不仅会阻止对话对用户有用,还可能导致潜在的误导性内容。正如我们在上一章中看到的,ChatGPT 仍然存在一些限制,比如其知识库的 2021 年截止日期,以及生成式人工智能系统通常存在的另一个警告,比如幻觉现象。
比如,想象一下我们想要了解卷积神经网络(CNNs)。我们对人工神经网络(ANNs)一无所知,因此需要从一个简单的介绍开始。这个想法是,从第一个输出开始,我们可以深入研究相关元素。
让我们来看看 ChatGPT 中一个定义不清晰提示的结果:
图 4.1 - 一个定义不清晰提示的示例
结果是正确和准确的,但涉及了许多我们以前可能从未见过的技术概念。全连接层是什么?池化层是什么?这个答案假设我们有人工神经网络的先前知识。
让我们尝试为 ChatGPT 提供更多上下文,以获得对我们更有用的结果:
图 4.2 - 良好定义提示的示例
正如你所看到的,这个回答中的措辞比我寻找的那个更有可能。在介绍中,它不使用诸如多层感知器或全连接层之类的词语。它还提供了一个图像识别过程的示例,然后进一步详细说明,确保用简单的词语解释每一步。
我对这个回答感到非常满意,作为用户,我现在可以开始更详细地询问关于池化层的问题,例如。
因此,快速设计和工程正在变得越来越受到关注,并且作为一个独立的学科正在发展。
现在,让我们专注于如何通过利用其少量样本学习能力来改进 ChatGPT 的回应。
零、一和少量样本学习 - 典型的变压器模型
在前几章中,我们提到了 OpenAI 模型,因此也包括 ChatGPT,以预训练的格式呈现。它们经过大量数据的训练,并相应地配置了它们的(数十亿个)参数。
然而,这并不意味着这些模型不能再学习了。在第二章中,我们看到定制 OpenAI 模型并使其更能够解决特定任务的一种方法是通过微调。
定义
微调是将预训练模型适应新任务的过程。在微调中,预训练模型的参数被改变,要么通过调整现有参数,要么通过添加新参数使其适应新任务的数据。这是通过在特定于新任务的较小标记数据集上训练模型来完成的。微调的关键思想是利用从预训练模型中学到的知识,并将其微调到新任务,而不是从头开始训练模型。
微调是一个适当的训练过程,需要一个训练数据集、计算能力和一些训练时间(取决于数据量和计算实例)。
这就是为什么值得测试另一种方法,让我们的模型在特定任务上变得更加熟练:少量样本学习。
这个想法是让模型从简单的例子中学习,而不是整个数据集。这些例子是我们希望模型响应的方式的样本,以便模型不仅学习内容,还学习格式、风格和分类法来在其回应中使用。
此外,通过提示直接进行学习(正如我们将在接下来的场景中看到的那样),整个体验更少耗时且更易执行。
提供的示例数量决定了我们所指的样本学习的级别。换句话说,如果没有提供示例,则我们称之为零样本,如果提供了一个示例,则称为单样本,如果提供了 2-3 个以上的示例,则称为少样本。
让我们专注于每一个场景:
- 零样本学习。在这种学习中,模型被要求执行一个它没有见过训练示例的任务。模型必须依靠关于任务的先验知识或一般信息来完成任务。例如,零样本学习方法可能是要求模型生成一个描述,就像我在提示中定义的一样:
图 4.3 – 零样本学习示例
- 单样本学习:在这种类型的学习中,模型只提供每个新任务的单个示例。模型必须利用其先前的知识从这个单一示例中泛化,以执行任务。如果考虑前面的例子,我可以在要求其生成新的示例之前,向模型提供一个提示完成的示例:
图 4.4 – 单样本学习示例
请注意,我提供示例的方式类似于微调所使用的结构:
{"prompt": "<prompt text>", "completion": "<ideal generated text>"}
- 少样本学习:在这种学习中,模型只提供了每个新任务的少量示例(通常在 3 到 5 个之间)。模型必须利用其先前的知识从这些示例中泛化,以执行任务。让我们继续我们的例子并提供模型更多的示例:
图 4.5 – 少样本学习示例,提供了三个示例
少样本学习的好处在于,你还可以控制模型输出的呈现方式。你还可以为模型提供你希望输出看起来的模板。例如,考虑以下推文分类器:
图 4.6 – 推文分类器的少样本学习。这是修改自 https://learn.microsoft/en-us/azure/cognitive-services/openai/how-to/completions 的原始脚本
让我们看看前面的图。首先,我向 ChatGPT 提供了一些标记的推文示例。然后,我以不同的数据格式(列表格式)提供了相同的推文,以及相同格式的标签。最后,我以列表格式提供未标记的推文,以便模型返回标签列表。
输出格式并不是您可以教给您的模型的唯一内容。您还可以教它以特定的行话和分类法行事和言语,这可以帮助您以期望的措辞获得所需的结果:
图 4.7 – ChatGPT 充当面试官进行对话的例子
或者,想象一下,你想生成一个名为 Simpy 的聊天机器人,回复时非常滑稽和讽刺:
图 4.8 – 一个滑稽而讽刺的聊天机器人的例子,取笑我的请求
我们不得不说,通过最后一个例子,ChatGPT 做得很好。
少样本学习的可能性是无限的(通常比 Simpy 更有用)– 这只是一个测试和一点耐心来找到适当的提示设计的问题。
如前所述,重要的是要记住,这些学习形式与传统的监督学习以及微调是不同的。在少样本学习中,目标是使模型能够从非常少的示例中学习,并从这些示例中推广到新任务。
现在我们已经学会了让 ChatGPT 从示例中学习,让我们专注于如何正确定义我们的提示,使模型的响应尽可能准确。
为获得相关和一致结果而定义良好提示的原则
在控制模型输出时,我们之前看到了设计和工程化提示的重要性。以下是一些您可以使用的最佳实践来改进您的提示,以及一些应该避免的做法:
-
清晰性:使用简单的句子和指令,ChatGPT 可以轻松理解。
-
简洁性:偏爱简短的提示和简短的句子。通过将指令分成更小的句子并明确表达意图,可以实现这一点。
-
专注:将提示的焦点放在一个明确定义的主题上,这样您就不会冒险使输出过于普遍化。
-
一致性:在对话过程中保持一致的语气和语言,以确保对话连贯。
-
“充当…”:让 ChatGPT 充当某人或某物的技巧被证明是非常强大的。您可以通过简单要求他扮演您想要获取信息的人或系统,缩短您必须向模型提供的上下文。我们已经看到了面试候选人的例子,ChatGPT 充当了数据科学家职位的面试官。一个非常有趣的提示是要求 ChatGPT 充当控制台。以下是一个示例:
图 4.9 – ChatGPT 充当 Python 控制台的例子
请注意,控制台,就像真实的情况一样,也在报告我在for
循环中犯的错误,指出我遗漏了括号。
在下面的 GitHub 仓库中,你可以尝试一个不断增长的列表 Act as 提示:https://github/f/awesome-chatgpt-prompts。
考虑到前一段中详细阐述的少样本学习能力,有一些很好的提示可以帮助你在设计提示时充分利用这一特性。一个理想的对话如下所示:
- 从简明、清晰、有重点的提示开始。这将帮助你对你想讨论的主题有一个概览,同时为思考和特定元素的潜在扩展提供食粮。以下是一个示例:
图 4.10 – 一个清晰、有重点的提示,用于开始和 ChatGPT 的对话
- 一旦你在讨论中确定了相关元素,你可以要求 ChatGPT 更加聚焦地阐述这些元素:
图 4.11 – 在与 ChatGPT 对话中进行深入追问的示例
- 有时候,记得模型和你提问的上下文可能非常有用,尤其是如果问题可能适用于各种领域时。
图 4.12 – 在与 ChatGPT 对话中提醒上下文的示例
- 最后,永远记住我们在前几章提到的限制。ChatGPT 可能会提供部分或不正确的信息,所以始终检查是一个很好的做法。你可以尝试的一个好方法是要求模型提供关于其回应的文档,这样你就可以轻松找到它们的证据:
图 4.13 – ChatGPT 提供支持其先前回答的文档的示例
另一方面,在设计提示时,有一些事情是应该避免的:
-
信息过载:避免向 ChatGPT 提供过多的信息,因为这可能会降低响应的准确性。
-
开放式问题:避免向 ChatGPT 提出模糊、开放式的问题。像“你能告诉我一些关于世界的事情吗?”或“你能帮我复习考试吗?”这样的提示太泛泛了,会导致 ChatGPT 产生模糊、无用甚至幻觉般的回应。
-
缺乏约束:如果你期望一个特定结构的输出,请不要忘记告诉 ChatGPT!如果你思考一下 ChatGPT 起到面试官的早期示例,你会看到我在明确不要一次性生成所有问题时是多么严格。在得到结果之前尝试了好几次,因为 ChatGPT 被设计为产生连续的文本流。
注意
作为一般性考虑,我们仍然必须记住,ChatGPT 的知识库仅限于 2021 年,因此我们应避免询问发生在该日期之后的事实。您仍然可以提供背景信息;然而,所有的回答都会偏向于 2021 年之前的知识库。
此外,值得一提的是,在过去几个月中,已经有大量的研究和开发致力于对大型语言模型(LLMs)(不仅仅是生成式预训练变换器(GPT))的提示设计进行研究,因为一些特定技术的广泛使用,例如以下技术:
- 思维链(CoT):Google 研究员魏杰森等人提出了一种名为CoT 提示的新技术,以提高 LLM 的推理能力。该方法将复杂问题分解为较小、可管理的步骤,使语言模型能够解决传统提示方法无法处理的复杂推理任务。
例如,假设我们想训练一个语言模型来解决一个复杂的数学问题,比如计算代数表达式的值。我们可以使用 CoT 提示将问题分解为较小、可管理的步骤。
首先,我们可以提示模型识别表达式中的变量和常数。然后,我们可以提示模型应用运算顺序简化表达式。接下来,我们可以指导模型替换变量和常数的数值。最后,我们可以提示模型评估表达式以获得最终结果。
通过使用 CoT 提示,语言模型可以学会解决需要多步推理和解决问题能力的复杂数学问题。
-
主动提示:即使使用 CoT 推理提示已被证明有效,当前的 CoT 方法仍依赖于一组固定的人工注释示例,这些示例可能对不同任务不是最佳的。在他们的论文《使用思维链进行主动提示的大型语言模型》中,刁世哲等人提出了一种名为主动提示的新方法,通过从一组特定任务的查询中选择最重要和有帮助的问题来使 LLM 适应不同任务。以下方法涉及向 LLM 提出几个 CoT 示例的查询,并为一组训练问题生成k个可能的答案。然后根据k个答案之间的分歧计算不确定性度量。最不确定的问题被选中由人类进行注释,并使用新注释的示例来推断每个问题。
-
推理与行动(ReAct):这种方法基于人类智能无缝结合面向任务的行动和口头推理的能力。
例如,想象一个人试图组装一件家具,比如一本书架。在每个具体的动作之间,这个人可能会用语言来推理跟踪进度(“现在我连接上了侧板,我需要连接上架子”),处理异常情况,或者根据情况调整计划(“这些螺丝不合适,我需要找到不同尺寸”),并在需要外部信息时意识到(“我不确定这个部件应该怎么放,让我看看说明书”)。这个人还可能通过借助说明书、找到必要的工具,并正确摆放部件来支持推理和回答问题(“哪些螺丝应该放在哪里?”)。行动和推理之间的紧密协作使得这个人能够高效而有效地完成任务,即使他们以前从未组装过书架。
嗯,姚顺宇等人介绍的 ReAct 范式正是这样做的:它提示 LLMs 产生与手头任务相关的口头推理轨迹和行为,以无缝交错的方式。通过这样做,模型可以进行动态推理,为行动创建、调整和维护高级计划,同时与外部信息源(如维基百科)交互,以将附加洞察融入推理过程中(行动用于推理)。这种方法有助于更全面、更有效地利用语言模型解决复杂问题,使其能够以一种集成的方式进行推理和行动。
这些只是一些最新开发的技术的一部分:由于这是一个新兴的研究领域,我们可能会在接下来的几个月看到关于提示设计的大量实验和论文。
最后,重要的是要对 ChatGPT 的回复保持一些伦理考虑。我们将在下一节中介绍这些内容。
避免隐藏偏见的风险,并考虑 ChatGPT 中的伦理问题。
ChatGPT 已经使用了 Moderator API,因此它不会参与可能不安全的对话。Moderator API 是由基于以下类别的 GPT 模型执行的分类模型:暴力、自残、仇恨、骚扰和性。为此,OpenAI 使用匿名化数据和合成数据(以零-shot 形式)来创建合成数据。
Moderation API 是基于 OpenAI API 中可用的内容过滤模型的更复杂版本。我们在第一章中讨论过这个模型,在那里我们看到它对假阳性而不是假阴性非常保守。
然而,有一些我们可以称之为隐藏偏见的东西,它直接源于模型所训练的知识库。例如,关于 GPT-3 的主要训练数据,即Common Crawl,专家认为这主要是由来自西方国家的白人男性编写的。如果是这样,我们已经面临着模型的隐藏偏见,它将不可避免地模仿一类有限和不具代表性的人类。
在他们的论文《语言模型为少样本学习者》中,OpenAI 的研究人员汤姆·布朗等(https://arxiv/pdf/2005.1416)创建了一个实验设置来调查 GPT-3 中的种族偏见。模型受到包含种族类别的短语的提示,并为每个类别生成了 800 个样本。使用 Senti WordNet 根据词共现来衡量生成文本的情感,情感范围从-100 到 100(正分数表示积极词语,反之亦然)。
结果显示,与不同模型相关的每个种族类别的情绪不同,亚洲一直具有很高的情感,而黑人一直具有很低的情感。作者警告称,结果反映了实验设置,并且社会历史因素可能影响与不同人口统计数据相关联的情感。研究强调了在情感、实体和输入数据之间关系的更加复杂的分析的需要:
图 4.14—模型间的种族情绪
这种隐藏偏见可能产生不符合负责任人工智能原则的有害反应。
然而,值得注意的是 ChatGPT 以及所有 OpenAI 模型都在不断改进中。这也与 OpenAI 的 AI alignment(https://openai/alignment/)一致,其研究侧重于训练 AI 系统成为有益、真实和安全的。
例如,如果我们要求 ChatGPT 基于人的性别和种族进行猜测,它不会满足这个请求:
图 4.15—ChatGPT 随着时间的推移改善的示例,因为它给出了一个不带偏见的回答
总的来说,尽管在道德原则领域不断改进,但在使用 ChatGPT 时,我们应始终确保输出符合这些原则并且没有偏见。
ChatGPT 和 OpenAI 模型中的偏见和伦理概念在整个负责任人工智能的主题中具有更广泛的搭配,在本书的最后一章中我们将重点关注这一点。
总结
在本章中,我们深入探讨了提示设计和工程的概念,因为这是控制 ChatGPT 和 OpenAI 模型输出的最强大方式。我们学会了如何利用不同级别的 shot learning,使 ChatGPT 更加符合我们的目标:如果我们希望 AI 的回应具有特定的风格和格式,我们可以提供示例让它从中学习,就像我们在分析推文情绪时所看到的那样。我们还学会了如何撰写有效的提示,附有一些不错的例子 - 尤其是使用*Act as…*技巧 - 以及要避免的内容,比如开放式问题或信息过载。
在接下来的几章中,我们将介绍 ChatGPT 如何提高普通用户的日常生产力的具体示例,提供易于复制的提示和技巧。
从下一章开始,我们将深入探讨 ChatGPT 可以提高生产力并对我们今天的工作方式产生颠覆性影响的不同领域。
参考资料
-
arxiv/abs/2005.14165
-
dl.acm/doi/10.1145/3442188.3445922
-
openai/alignment/
-
twitter/spiantado/status/1599462375887114240?ref _src=twsrc%5Etfw%7Ctwcamp%5Etweetembed%7Ctwterm%5E1599462375887114240%7Ctwgr%5E1dc908b53fd4be487829472a6bc8590a9dc4aa2d%7Ctwcon%5Es1_&ref_url=https%3A%2F%2Fthestoryexchange%2Fchatgpt-and-the-hidden-bias-of-language-models%2F
五、通过 ChatGPT 提升日常工作效率
在本章中,我们将介绍 ChatGPT 可以为普通用户每天执行的主要活动,以提高他们的生产力。本章将重点介绍写作辅助、决策制定、信息检索等具体示例,并提供建议和提示,以便您自行实施。
在本章结束时,您将学会如何将 ChatGPT 用作以下活动的助推器:
-
诸如组织议程、备餐、购物等日常活动
-
生成全新的文本内容
-
提高您的写作技能并将相同内容适应不同的受众
-
检索文档和信息以进行研究和竞争情报
技术要求
对于本章,您将需要一个 ChatGPT 账户。您可以按照第四章中提供的说明免费创建一个。
ChatGPT 作为日常助手
ChatGPT 可以作为有价值的日常助手,帮助您管理任务并简化工作流程。它可以通过提供个性化的帮助来优化您的日常生活,从而节省时间并提高效率。
让我们从一个关于如何让我的一天更加高效的一般建议开始:
图 5.1 – ChatGPT 生成高效日常的示例
前述日常例行事项相当通用,因为它不专注于特定的活动列表(除了学习)。让我们挑战 ChatGPT 创建一个更注重任务的日常安排,包括我们在一天中必须进行的活动清单:
图 5.2 – ChatGPT 在我的活动之上生成的优化日常
正如您所看到的,在这里,ChatGPT 充当了待办事项列表制作人,为我管理时间并帮助我组织繁忙的一天。
ChatGPT 在组织我的一周中的另一个有趣用途是,我可以将其用作备餐助手:
图 5.3 – ChatGPT 生成的我工作周的备餐
除了备餐外,ChatGPT 还可以生成我的购物清单,以便我坚持我的饮食计划:
图 5.4 – ChatGPT 生成的购物清单
ChatGPT 还可以成为一位忠诚而守纪的学习伙伴。例如,它可以帮助您总结长篇论文,以便您对讨论的主题有一个初步了解,或者帮助您为考试做准备。
换句话说,假设你正在使用 Lorenzo Peccati 等人编写的大学教材《经济与商业数学》准备数学考试。在深入研究每章内容之前,你可能想要了解内容和主要讨论主题的概述,以及是否需要进一步的先修知识,以及最重要的是,如果我正在准备考试,需要花多长时间来学习。你可以向 ChatGPT 询问:
图 5.5 – ChatGPT 提供大学教材概述
你也可以要求 ChatGPT 向你提问关于你刚刚学习的材料的一些问题:
图 5.6 – ChatGPT 充当教授的示例
注意
这是Act as… hack 的另一个例子,该 hack 在第四章中有描述。在那里,我们看到了一个面试官-候选人对话的例子,ChatGPT 充当面试官。在图 5**.5中,我们要求 ChatGPT 充当教授。除了对话内容不同之外,你还可以感知到风格和语言形式的不同 – 更加学术化。
现在,让我们看一些更具体任务的 ChatGPT 使用示例,包括文本生成、写作辅助和信息检索。
生成文本
作为语言模型,ChatGPT 特别适合根据用户的指令生成文本。
例如,你可以要求 ChatGPT 生成针对特定受众的电子邮件、草稿或模板:
图 5.7 – ChatGPT 生成的电子邮件示例
另一个例子可能是要求 ChatGPT 为你需要准备的演示文稿创建一个提纲结构:
图 5.8 – ChatGPT 生成的幻灯片议程和结构
注意
在第一章中,我们看到有一些工具结合了不同的生成 AI。我们还看到了一个用于幻灯片演示的 AI 示例 – 即 Tome AI。从图 5**.8中,我们可以了解这些工具的后端是如何工作的 – 从用户提示开始,它们生成演示文稿的结构和内容。然后,在 Tome AI 或类似工具的情况下,结构被转换为幻灯片,并且使用每张幻灯片的内容作为提示生成图像,调用像 DALL-E 这样的图像生成模型。
你也可以通过这种方式生成关于热门话题的博客文章或文章。这里是一个例子:
图 5.9 – ChatGPT 生成的带有相关标签和 SEO 关键词的博客文章示例
我们甚至可以让 ChatGPT 缩减帖子的大小,使其适合成为一条推文。以下是我们可以这样做的方式:
图 5.10 – ChatGPT 将一篇文章缩减为 Twitter 帖子
最后,ChatGPT 还可以生成视频或戏剧剧本,包括布景和建议的编辑。下图显示了一个人和 ChatGPT 之间的戏剧对话的示例:
图 5.11 – 由 ChatGPT 生成的带布景的戏剧对话
我只提供了一个截断版本,以保持您对结尾的悬念…
总的来说,每当需要从头开始生成新内容时,ChatGPT 都能很好地提供第一稿,这可以作为进一步完善的起点。
然而,正如我们将在下一节中看到的那样,ChatGPT 还可以通过提供写作帮助和翻译来支持现有内容。
提高写作技能和翻译
有时,您可能不是要生成新内容,而是要重新审视现有的一段文字。这可能是为了改善风格,受众变化,语言翻译等等。
让我们看一些例子。想象一下,我起草了一封电子邮件邀请我的客户参加网络研讨会。我写了两个简短的句子。在这里,我希望 ChatGPT 改进这封电子邮件的形式和风格,因为目标受众将是高管层:
图 5.12 – 由 ChatGPT 重新审视以针对高管受众的电子邮件示例
现在,让我们用不同的目标受众再问同样的问题:
图 5.13 – 由 ChatGPT 生成的针对不同受众的相同电子邮件示例
ChatGPT 还可以就您的写作风格和结构给出一些建议。
想象一下,例如,您为自己的 YouTube 频道编写了一个带布景的剧本。您包括了演讲以及图像、片段和视频编辑活动。您还知道您的典型受众年龄在 15 至 25 岁之间。您想要对您的剧本进行反馈,并向 ChatGPT 请求:
图 5.14 – ChatGPT 提供视频剧本反馈的示例
正如您所看到的,ChatGPT 不仅能够就写作风格给我反馈,还建议我如何改进整个视频的布景,包括更多的视觉元素。
再次想象一下,您为一篇名为自然语言处理的历史的文章写了一个引言,并希望得到有关写作风格及其与标题一致性的反馈:
图 5.15 – ChatGPT 就论文引言提供反馈的示例
我们还可以请 ChatGPT 具体举例说明它在回答中提到的引人入胜的轶事:
图 5.16 – ChatGPT 详细阐述了它之前提到的某个内容的示例
我也对我的引言是否与标题一致或者我是否走错方向感兴趣:
图 5.17 – ChatGPT 就引言与标题的一致性提供反馈
我对最后一个印象深刻。ChatGPT 足够聪明,能够看出我的引言中并没有特别提到 NLP 的历史。尽管如此,它还设定了关于该主题稍后将会处理的期望。这意味着 ChatGPT 在论文结构方面也有专门的知识,并且非常准确地应用其判断,知道这只是一个引言。
值得注意的是,该模型能够根据上下文给出不同的反馈意见。在视频脚本中,ChatGPT 的反馈意见考虑到最终内容的呈现形式是在屏幕上。另一方面,文章的引言处于更正式和学术化的语境中,具有特定的结构,而 ChatGPT 再次能够捕捉到这一点。
最后但并非最不重要的是,ChatGPT 也是一款出色的翻译工具。它至少了解 95 种语言(如果你对自己的语言是否被支持有疑问,你可以直接问 ChatGPT)。然而,在这里,可能会有一个问题产生:当我们已经拥有谷歌翻译等尖端工具时,ChatGPT 在翻译方面的附加价值是什么?
要回答这个问题,我们必须考虑一些关键的差异,并如何利用 ChatGPT 的内置翻译功能:
- ChatGPT 可以捕捉意图。这意味着你也可以绕过翻译阶段,因为这是 ChatGPT 可以在后台处理的事情。例如,如果你想写一个提示以制作一条法语社交媒体帖子,你可以用任何你想用的语言来写这个提示 – ChatGPT 会自动检测到它(不需要提前指定)并理解你的意图:
图 5.18 – ChatGPT 生成与输入语言不同的输出的示例
ChatGPT 能够捕捉特定俚语或成语的更精致含义。这使得翻译不是字面的,这样它可以保留潜在的含义。换句话说,让我们考虑英式表达It’s not my cup of tea,指的是你不喜欢的东西。让我们让 ChatGPT 和谷歌翻译将其翻译成意大利文:
图 5.19 – 比较 ChatGPT 和谷歌翻译在将英文翻译成意大利文时的表现
正如你所看到的,ChatGPT 可以提供几个意大利成语,它们相当于原来的成语,而且还有俚语格式。另一方面,谷歌翻译进行了字面翻译,忽略了成语的真正含义。
- 与任何其他任务一样,你可以向 ChatGPT 提供上下文。因此,如果你希望你的翻译具有特定的俚语或风格,你可以总是在提示中指定。或者,更有趣的是,你可以要求 ChatGPT 带有讽刺意味地翻译你的提示:
图 5.20 – ChatGPT 翻译带有讽刺意味的提示的例子。提示的原始内容取自 OpenAI 的维基百科页面:https://it.wikipedia/wiki/OpenAI
所有这些场景都突显了 ChatGPT 和 OpenAI 模型的一个关键杀手特性。因为它们代表了 OpenAI 定义的人工通用智能(AGI)的体现,它们并不是要专门化(也就是受限)于单个任务。相反,它们旨在以动态方式为多种场景提供服务,这样你可以用单一模型解决广泛的用例。
总之,ChatGPT 不仅能够生成新文本,还能够操纵现有材料以满足你的需求。它还被证明非常精确地在不同语言之间进行翻译,同时保持行话和语言特定的表达方式。
在下一节中,我们将看到 ChatGPT 如何协助我们进行信息检索和竞争情报。
快速信息检索和竞争情报
信息检索和竞争情报是 ChatGPT 变革性的另两个领域。ChatGPT 检索信息的最常见方式是作为搜索引擎。每当我们向 ChatGPT 提出问题,它都可以从知识库中检索信息,并以原创方式重新表述。
一个例子涉及要求 ChatGPT 提供我们可能有兴趣阅读的书的快速摘要或评论:
图 5.21 – ChatGPT 提供书籍摘要和评论的示例
或者,我们可以根据自己的喜好要求一些新书的建议:
图 5.22 – ChatGPT 根据我的喜好推荐书籍列表的示例
此外,如果我们设计的提示信息更具体,ChatGPT 可以作为指引我们寻找研究或学习的正确参考资料的工具。
换句话说,您可能希望快速检索有关您想了解更多的主题的背景参考资料 – 例如,前馈神经网络。您可能会要求 ChatGPT 指引您到一些广泛讨论该主题的网站或论文:
图 5.23 – ChatGPT 列出相关参考资料的示例
正如您所看到的,ChatGPT 能够为我提供相关参考资料,以便开始研究这个主题。然而,在竞争情报方面,它还可以进一步发展。
假设我正在写一本名为使用 Python 实现卷积神经网络简介的书。我想研究市场上潜在竞争对手。我想调查的第一件事是是否已经有一些具有相同内容的竞争性标题,因此我可以要求 ChatGPT 生成一份现有书籍列表:
图 5.24 – ChatGPT 提供竞争书籍列表的示例
您还可以要求关于您想要出版的市场饱和度的反馈:
图 5.25 – ChatGPT 就如何在市场上保持竞争力提供建议
最后,让我们请 ChatGPT 更准确地告诉我在我将要操作的市场上如何保持竞争力:
图 5.26 – ChatGPT 如何建议改进您的书籍内容以使其脱颖而出的示例
ChatGPT 在列举一些使我的书独特的好建议方面做得相当不错。
总的来说,ChatGPT 可以成为信息检索和竞争情报的有价值助手。然而,重要的是要记住知识库截止日期为 2021 年:这意味着,每当我们需要检索实时信息,或者在进行今天的竞争市场分析时,我们可能无法依赖 ChatGPT。
尽管如此,这个工具仍然提供了可以应用的出色建议和最佳实践,而不受知识库截止日期的影响。
总结
本章我们看到的所有示例都只是 ChatGPT 可以帮助提高生产力的一小部分模拟。这些小技巧可以极大地帮助你完成可能会重复的活动(比如用类似模板回复邮件而不是写每日例行公事)或者繁琐的活动(比如搜索背景资料或竞争情报)。
在下一章中,我们将更深入地探讨 ChatGPT 正在改变游戏规则的三个主要领域——开发、营销和研究。
六、用 ChatGPT 开发未来
在本章中,我们将讨论开发人员如何利用 ChatGPT。本章关注 ChatGPT 在开发人员领域中解决的主要用例,包括代码审查和优化、文档生成和代码生成。本章将提供示例,并让您自行尝试提示。
在对开发人员为什么应该将 ChatGPT 作为日常助手进行一般性介绍之后,我们将重点关注 ChatGPT 以及它可以做到以下几点:
-
为什么开发人员选择 ChatGPT?
-
生成、优化和调试代码
-
生成与代码相关的文档并调试您的代码
-
解释机器学习(ML)模型,以帮助数据科学家和业务用户理解模型的可解释性
-
翻译不同的编程语言
在本章末尾,您将能够利用 ChatGPT 进行编码活动,并将其用作您编码生产力的助手。
为什么开发人员选择 ChatGPT?
就我个人而言,我相信 ChatGPT 最让人惊叹的能力之一就是处理代码。任何类型的代码。我们已经在第四章中看到 ChatGPT 如何可以作为 Python 控制台。然而,对于开发人员来说,ChatGPT 的能力远不止这个例子。它可以成为代码生成、解释和调试的日常助手。
在最受欢迎的语言中,我们当然可以提到 Python、JavaScript、SQL 和 C#。然而,ChatGPT 覆盖了各种语言,就像它自己披露的那样:
图 6.1 – ChatGPT 列出了它能够理解和生成的编程语言
无论你是后端/前端开发人员、数据科学家还是数据工程师,在你使用编程语言时,ChatGPT 都可能是一个改变游戏规则的因素,而我们将在下一节的几个示例中看到它是如何做到这一点的。
从下一节开始,我们将深入研究 ChatGPT 在处理代码时可以取得的具体成就。我们将看到覆盖不同领域的端到端用例,以便我们熟悉使用 ChatGPT 作为代码助手。
生成、优化和调试代码
您应该利用的主要功能是 ChatGPT 代码生成。你有多少次在寻找预先构建的代码片段来作为起点?生成utils
函数、示例数据集、SQL 模式等?ChatGPT 能够根据自然语言输入生成代码:
图 6.2 – ChatGPT 生成 Python 函数来写入 CSV 文件的示例
正如您所见,ChatGPT 不仅能够生成函数,还能够解释函数的功能、如何使用它以及使用通用占位符(如my_folder
)替代什么。
另一个示例可能是为结构化表创建模式。比如,想象一下你是一个数据工程师,正在创建 SAP ERP 系统中两个标准表之间的关系:MARA
和 VBAP
,分别存储一般物料数据和销售文档数据。
让我们请求 ChatGPT 根据列名创建这些表的模式,将列名作为上下文:
图 6.3 – ChatGPT 为 SAP 表生成 SQL 模式的示例
请注意,ChatGPT 能够建立关系,因为它了解 SAP 分类和列名解释,这是任何不了解 SAP 分类(包括数据工程师在内)的人都会遇到困难的地方。作为确认,让我们请求 ChatGPT 用更易理解的名称重命名所有这些列:
图 6.4 – ChatGPT 重命名的 SAP 表列
最后,让我们使用新列重新创建模式,确保避免重复(新名称 Condition Value
确实重复了五次):
图 6.5 – SQL 模式,列已重命名
上面的示例对于减少创建用于进一步数据分析的模式所需的时间至关重要。
ChatGPT 也可以成为代码优化的好助手。事实上,它可能节省我们一些运行时间或计算资源,从我们的输入开始制作优化的脚本。在自然语言领域,这种能力可能与我们在第五章中看到的写作辅助功能相媲美,在提高写作技能和 翻译 部分。
例如,想象一下你想从另一个列表开始创建一个奇数列表。为了达到这个目的,你编写了以下 Python 脚本(为了这个练习,我还将使用 timeit
和 datetime
库跟踪执行时间):
from timeit import default_timer as timer
from datetime import timedelta
start = timer()
elements = list(range(1_000_000))
data = []
for el in elements:
if not el % 2:
# if odd number
data.append(el)
end = timer()
print(timedelta(seconds=end-start))
执行时间为 00.141185
秒。如果我们要求 ChatGPT 优化这个脚本会发生什么呢?
图 6.6 – ChatGPT 生成优化的 Python 脚本替代方案
ChatGPT 为我提供了一个示例,以更低的执行时间实现相同的结果。它还详细说明了为什么理解方法比 for
循环更快的替代方案。
让我们看看这个新脚本与之前脚本的性能比较:
图 6.7 – 用户和 ChatGPT 脚本执行时间的比较
如您所见,第二种方法(由 ChatGPT 生成的方法)将执行时间减少约 47.8%。
除了代码生成和优化外,ChatGPT 还可以用于错误解释和调试。有时,错误很难解释;因此,自然语言解释可以帮助识别问题并引导您走向解决方案。
例如,当我从命令行运行一个.py
文件时,我收到以下错误:
2023-03-25 11:27:10.270 Uncaught app exception
Traceback (most recent call last):
File "C:\Users\vaalt\Anaconda3\lib\site-packages\streamlit\runtime\scriptrunner\script_runner.py", line 565, in _run_script
exec(code, module.__dict__)
File "C:\Users\vaalt\OneDrive\Desktop\medium articles\llm.py", line 129, in <module>
user_input = get_text()
File "C:\Users\vaalt\OneDrive\Desktop\medium articles\llm.py", line 50, in get_text
input_text = st.text_input("You: ", st.session_state['input'], key='input', placeholder = 'Your AI assistant here! Ask me anything...', label_visibility = 'hidden')
File "C:\Users\vaalt\Anaconda3\lib\site-packages\streamlit\runtime\metrics_util.py", line 311, in wrapped_func
result = non_optional_func(*args, **kwargs)
File "C:\Users\vaalt\Anaconda3\lib\site-packages\streamlit\elements\text_widgets.py", line 174, in text_input
return self._text_input(
File "C:\Users\vaalt\Anaconda3\lib\site-packages\streamlit\elements\text_widgets.py", line 266, in _text_input
text_input_proto.value = widget_state.value
TypeError: [] has type list, but expected one of: bytes, Unicode
让我们看看 ChatGPT 是否能让我理解错误的本质。为此,我只需向 ChatGPT 提供错误文本,并要求它给我解释。
图 6.8 – ChatGPT 用自然语言解释 Python 错误
最后,让我们想象我写了一个函数,该函数接受一个字符串作为输入,并返回每个字母后面带有下划线的相同字符串。
在上面的例子中,我期望看到g_p_t_
的结果;然而,实际上它只返回了这段代码中的t_
:
图 6.9 – 有错误的 Python 函数
让我们请 ChatGPT 为我们调试这个函数:
图 6.10 – ChatGPT 调试 Python 函数的示例
令人印象深刻,不是吗?再次,ChatGPT 提供了正确版本的代码,并帮助解释错误在哪里以及为什么导致不正确的结果。让我们看看现在是否可以工作:
图 6.11 – ChatGPT 调试后的 Python 函数
嗯,显然是这样的!
这些以及许多其他与代码相关的功能确实可以提高您的生产力,缩短执行许多任务所需的时间。
然而,ChatGPT 不仅仅局限于纯粹的调试。由于 GPT 模型背后的令人难以置信的语言理解能力,这个人工智能(AI)工具能够在代码旁边生成适当的文档,以及准确解释代码将做什么,我们将在下一节中看到。
生成文档和代码可解释性
在处理新应用程序或项目时,将代码与文档相关联始终是一个好的实践。这可以通过在函数或类中嵌入文档字符串的形式来实现,以便他人可以直接在开发环境中调用它们。
例如,以下 Python 类具有 10 个不同的方法用于基本数学运算:
class Calculator:
def add(self, x, y):
return x + y
def subtract(self, x, y):
return x - y
def multiply(self, x, y):
return x * y
def divide(self, x, y):
try:
return x / y
except ZeroDivisionError:
print("Error: division by zero")
return None
def power(self, x, y):
return x ** y
def square_root(self, x):
try:
return x ** 0.5
except ValueError:
print("Error: square root of a negative number")
return None
def logarithm(self, x, base):
try:
return math.log(x, base)
except ValueError:
print("Error: invalid logarithm arguments")
return None
def factorial(self, x):
if x < 0:
print("Error: factorial of a negative number")
return None
elif x == 0:
return 1
else:
return x * self.factorial(x-1)
def fibonacci(self, n):
if n < 0:
print("Error: fibonacci sequence index cannot be negative")
return None
elif n == 0:
return 0
elif n == 1:
return 1
else:
return self.fibonacci(n-1) + self.fibonacci(n-2)
您可以初始化该类并测试它如下(作为示例,我将使用加法方法):
图 6.12 – 初始化 Python 类并使用其中一个方法
现在,假设我想能够使用Calculator?
约定来检索文档字符串文档。通过这样做,对于 Python 包、函数和方法,我们可以得到该特定对象的全面文档,如下所示(pandas
Python 库的示例):
图 6.13 – pandas 库文档示例
现在,让我们请 ChatGPT 为我们的Calculator
类生成相同的结果。
因此,在向 ChatGPT 提供Calculator
类作为上下文之后,我要求它生成相关的文档如下:
图 6.14 – ChatGPT 更新代码文档
您可以在本书的 GitHub 存储库中找到整个 ChatGPT 响应,网址为github/PacktPublishing/Modern-Generative-AI-with-ChatGPT-and-OpenAI-Models/blob/main/Chapter%206%20-%20ChatGPT%20for%20Developers/prompts
。
因此,如果我们按照前面代码中所示更新我们的类,并调用Calculator?
,我们将得到以下输出:
图 6.15 – 新的计算器类文档
最后,ChatGPT 还可以被利用来用自然语言解释脚本、函数、类或其他类似的内容所做的事情。我们已经看到 ChatGPT 用清晰的解释丰富了其与代码相关的响应的许多示例。然而,我们可以通过以代码理解为特定问题提出具体问题来增强这一能力。
例如,让我们请 ChatGPT 向我们解释以下 Python 脚本的作用:
图 6.16 – ChatGPT 解释 Python 脚本的示例
代码可解释性也可以作为前述文档的一部分,或者可以在希望更好地理解来自其他团队的复杂代码的开发人员之间使用,或者(就像有时发生在我身上的)记住他们一段时间前写的东西。
由于 ChatGPT 和本节提到的能力,开发人员可以轻松地用自然语言跟踪项目生命周期,这样新团队成员和非技术用户更容易理解到目前为止所做的工作。
在下一节中,我们将看到代码可解释性是数据科学项目中机器学习模型可解释性的关键步骤。
理解机器学习模型可解释性
模型可解释性是指人类可以理解 ML 模型预测逻辑的程度。基本上,这是理解模型如何做出决策以及哪些变量有助于其预测的能力。
让我们看一个使用深度学习 keras.datasets
进行模型可解释性的示例:它包含 60,000 张 32x32 的彩色图像(因此是 3 通道图像),分为 10 类(飞机、汽车、鸟、猫、鹿、狗、青蛙、马、船和卡车),每类有 6,000 张图像。在这里,我将分享模型的主体部分;您可以在书的 GitHub 代码库中找到所有相关代码,用于数据准备和预处理:github/PacktPublishing/Modern-Generative-AI-with-ChatGPT-and-OpenAI-Models/tree/main/Chapter%206%20-%20ChatGPT%20for%20Developers/code
。
model=tf.keras.Sequential()
model.add(tf.keras.layers.Conv2D(32,kernel_size=(3,3),activation='relu',input_shape=
(32,32,1)))
model.add(tf.keras.layers.MaxPooling2D(pool_size=(2,2)))
model.add(tf.keras.layers.Flatten())
model.add(tf.keras.layers.Dense(1024,activation='relu'))
model.add(tf.keras.layers.Dense(10,activation='softmax'))
上述代码由几个执行不同操作的层组成。我可能对模型的结构以及每个层的目的感兴趣。让我们向 ChatGPT 寻求帮助:
图 6.17 – 使用 ChatGPT 进行模型可解释性
正如您在上图中所看到的,ChatGPT 能够清晰地解释我们的 CNN 的结构和层次。它还添加了一些评论和提示,比如使用最大池化层有助于减少输入的维度。
我还可以通过 ChatGPT 在验证阶段解释模型结果。因此,在将数据分为训练集和测试集并在训练集上训练模型后,我想看到它在测试集上的表现:
图 6.18 – 评估指标
让我们还请 ChatGPT 对我们的验证指标进行详细说明:
图 6.19 – ChatGPT 解释评估指标示例
再次,结果非常令人印象深刻,并清晰指导如何设置 ML 实验的训练和测试集。它解释了模型足够泛化的重要性,以便它不会过拟合,并能够在以前从未见过的数据上预测准确的结果。
模型可解释性之所以重要有很多原因。一个关键因素是它减少了业务用户与模型背后代码之间的差距。这对于使业务用户能够理解模型行为,并将其转化为代码业务理念至关重要。
此外,模型可解释性实现了负责任和道德人工智能的关键原则之一,即 AI 系统背后的模型思考和行为的透明性。解锁模型可解释性意味着检测模型在生产中可能存在的潜在偏见或有害行为,并因此防止它们发生。
总的来说,ChatGPT 在模型可解释性的背景下能够提供有价值的支持,通过在行级别生成见解,正如我们在上一个示例中所看到的。
接下来,我们将探讨 ChatGPT 的下一个并且也是最后一个能力,这将对开发人员的生产力产生更大的提升,尤其是在同一个项目中使用多种编程语言时。
不同编程语言之间的翻译
在第五章中,我们看到 ChatGPT 在不同语言之间具有很强的翻译能力。真正令人难以置信的是,自然语言并不是它唯一的翻译对象。事实上,ChatGPT 能够在不同的编程语言之间进行翻译,同时保持相同的输出以及相同的风格(即,如果存在文档字符串文档,它将保留该文档)。
在许多情况下,这可能是一个改变局面的游戏规则的场景。
例如,你可能需要学习一个之前从未见过的新编程语言或统计工具,因为你需要快速交付一个项目。有了 ChatGPT 的帮助,你可以开始使用你喜欢的编程语言,然后要求它翻译到你想要的语言,而你会在翻译过程中学会这门语言。
想象一下,项目需要在 MATLAB(由 MathWorks 开发的专有数值计算和编程软件)中交付,可你一直在 Python 中编程。该项目包括从修改后的美国国家标准与技术研究所(MNIST)数据集中对图像进行分类(原始数据集的描述和相关论文可以在此处找到:yann.lecun/exdb/mnist/
)。该数据集包含许多手写数字,经常被用于教授各种图像处理系统。
首先,我编写了以下 Python 代码来初始化一个用于分类的深度学习模型:
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers
# Load the MNIST dataset
(x_train, y_train), (x_test, y_test) = keras.datasets.mnist.load_data()
# Preprocess the data
x_train = x_train.reshape(-1, 28*28) / 255.0
x_test = x_test.reshape(-1, 28*28) / 255.0
y_train = keras.utils.to_categorical(y_train)
y_test = keras.utils.to_categorical(y_test)
# Define the model architecture
model = keras.Sequential([
layers.Dense(256, activation='relu', input_shape=(28*28,)),
layers.Dense(128, activation='relu'),
layers.Dense(10, activation='softmax')
])
# Compile the model
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
# Train the model
history = model.fit(x_train, y_train, validation_split=0.2, epochs=10, batch_size=128)
# Evaluate the model
test_loss, test_acc = model.evaluate(x_test, y_test, verbose=0)
print('Test accuracy:', test_acc)
现在让我们看看如果我们把前面的代码作为 ChatGPT 的上下文,并要求它将其翻译成 MATLAB 会发生什么:
图表 20 – ChatGPT 将 Python 代码翻译成 MATLAB
让我们看看它是否能够将代码翻译成其他语言,比如 JavaScript:
图表 6.21 – ChatGPT 将 Python 代码翻译成 JavaScript
代码翻译还可以减少新技术和当前编程能力之间的技能差距。
代码翻译的另一个关键影响是应用现代化。诚然,想象一下,你希望刷新你的应用程序堆栈,即迁移到云上。你可以决定从基础设施即服务(IaaS)实例(如 Windows 或 Linux 虚拟机(VM))进行简单的搬迁。然而,在第二阶段,你可能希望重新构建、重新设计或甚至重建你的应用程序。
以下图表描述了应用程序现代化的各种选项:
图 6.22 – 迁移应用程序到公共云的四种方式
ChatGPT 和 OpenAI Codex 模型可以帮助你进行迁移。例如考虑大型机。
大型组织主要使用大型机进行重要任务,如用于人口普查、消费者和行业统计、企业资源规划以及大规模事务处理的大规模数据处理。大型机环境的应用程序编程语言是通用商业定向语言(COBOL)。尽管 COBOL 在 1959 年发明,但今天仍在使用,是现存最古老的编程语言之一。
随着技术的不断改进,存储在大型机领域的应用程序一直在经历持续的迁移和现代化过程,旨在增强存在的遗留大型机基础设施的接口、代码、成本、性能和可维护性。
当然,这意味着将 COBOL 翻译成更现代的编程语言,比如 C#或 Java。问题在于,大多数新一代程序员不了解 COBOL;因此在这一背景下存在巨大的技能鸿沟。
让我们考虑一个读取员工记录文件并编写服务时间超过 10 年的员工报告的 COBOL 脚本:
IDENTIFICATION DIVISION.
PROGRAM-ID. EMPLOYEEREPORT.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT EMPLOYEE-FILE ASSIGN TO 'EMPLOYEE.DAT'
ORGANIZATION IS LINE SEQUENTIAL.
SELECT REPORT-FILE ASSIGN TO 'EMPLOYEEREPORT.TXT'
ORGANIZATION IS LINE SEQUENTIAL.
DATA DIVISION.
FILE SECTION.
FD EMPLOYEE-FILE.
01 EMPLOYEE-RECORD.
05 EMPLOYEE-ID PIC X(10).
05 HIRE-DATE PIC 9(6).
05 EMPLOYEE-NAME PIC X(30).
FD REPORT-FILE.
01 REPORT-LINE PIC X(80).
WORKING-STORAGE SECTION.
01 WS-CURRENT-DATE PIC 9(6).
01 WS-EMPLOYEE-YEARS PIC 9(2).
01 WS-REPORT-HEADER.
05 FILLER PIC X(30) VALUE 'EMPLOYEES WITH 10+ YEARS OF SERVICE'.
05 FILLER PIC X(10) VALUE SPACES.
05 WS-REPORT-DATE PIC X(6).
PROCEDURE DIVISION.
MAIN-PARAGRAPH.
OPEN INPUT EMPLOYEE-FILE
OPEN OUTPUT REPORT-FILE
MOVE FUNCTION CURRENT-DATE TO WS-CURRENT-DATE
MOVE WS-CURRENT-DATE(1:6) TO WS-REPORT-DATE
WRITE REPORT-LINE FROM WS-REPORT-HEADER
WRITE REPORT-LINE FROM SPACES
PERFORM READ-EMPLOYEE UNTIL EMPLOYEE-FILE-STATUS = '10'
CLOSE EMPLOYEE-FILE
CLOSE REPORT-FILE
STOP RUN.
READ-EMPLOYEE.
READ EMPLOYEE-FILE
AT END MOVE '10' TO EMPLOYEE-FILE-STATUS
END-READ
COMPUTE WS-EMPLOYEE-YEARS = FUNCTION INTEGER-OF-DATE(WS-CURRENT-DATE) - HIRE-DATE(1:6)
IF WS-EMPLOYEE-YEARS >= 10
WRITE REPORT-LINE FROM EMPLOYEE-RECORD
END-IF.
我然后将之前的 COBOL 脚本传递给 ChatGPT,这样它就可以将其作为上下文来制定其响应。现在让我们要求 ChatGPT 将该脚本翻译成 JavaScript:
图 6.23 – ChatGPT 将 COBOL 翻译成 JavaScript 的示例
像 ChatGPT 这样的工具可以帮助减少这种以及类似场景中的技能鸿沟,引入了一个既懂得编程的过去又懂得未来的层。
总之,ChatGPT 可以成为应用现代化的有效工具,提供代码升级以及增强遗留系统的宝贵见解和建议。凭借其先进的语言处理能力和丰富的知识库,ChatGPT 可以帮助组织简化其现代化工作,使该过程更快、更有效率和更有效。
注
OpenAI Codex 模型是 GitHub Copilot 背后的引擎。这种新功能涵盖了本章中我们将看到的许多用例,比如代码生成、自动填充和代码优化。
总结
ChatGPT 可以成为开发人员寻求提升技能和简化工作流程的宝贵资源。我们首先看到了 ChatGPT 如何生成、优化和调试您的代码,但我们还涵盖了更多的功能,比如在您的代码旁边生成文档,解释您的 ML 模型,以及在不同编程语言之间进行翻译,用于应用现代化。
无论您是经验丰富的开发人员还是刚刚起步,ChatGPT 都为学习和成长提供了强大的工具,缩小了代码和自然语言之间的差距。
在下一章中,我们将深入探讨另一个应用领域,ChatGPT 可能成为游戏改变者的地方:营销。
版权声明:本文标题:ChatGPT 与 OpenAI 的现代生成式 AI(上) 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1724526527h756382.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论