冷静的脆皮肠 · 同化和顺应的简单例子有哪些-百度经验· 2 月前 · |
傲视众生的白开水 · 20210127贾迎春判词子系中山狼,得志便 ...· 1 年前 · |
完美的红薯 · 举手通过!江西农业大学南昌商学院校歌出炉! ...· 1 年前 · |
买醉的熊猫 · 豪门撕x风云再起,何猷君何超莲反目的信息量很 ...· 1 年前 · |
在本节中,我们将介绍 Google Cloud Platform ( GCP )上的无服务器计算基础。 我们还将概述 GCP 上可用的 AI 组件,并向您介绍 GCP 上的各种计算和处理选项。
本节包括以下章节:
在计算技术发展的紧要关头,我们不断从越来越多的设备和平台生成数据。 现在很清楚,如果使用不当,数据是可以提供竞争优势或劣势的关键因素。 在过去的几年中,我们已经看到,使用云上可用的基础架构可以存储和处理大量数据。
在本章中,我们将介绍云优先策略,企业正在采用该策略对数据执行高级分析。 我们将看到 Cloud First 策略的一些优势以及反模式。 在本章的后续部分中,我们将对 Google Cloud Platform ( GCP )进行高层概述。
我们将在本章介绍以下主题:
对于已开始将数据视为保持相关性的最关键资产的组织而言,2018 年发生了重大变化。 从大数据处理基础架构的“本地”部署到云的过渡已经有了明显的转变。 随着分布式数据管理系统的成熟,企业开始依赖于分布式计算平台来满足其分析和运营需求。 但是,随着增加新的数据源,数据量和后续分析的可能性也在不断增长。 这样,很明显,需要快速进行实验并根据需要缩放(放大和缩小)环境。
一些高级分析工作负载利用机器学习算法,这些算法需要 图形处理器 ( GPU )的集群,以便在合理的时间内提供结果。 也可以按需采购 GPU,然后在云环境中将其无缝释放回资源池。 为了达到最大的业务影响,某些实验需要迅速投入生产。 在敏捷性和快速部署方面,基于云的环境是理想的。 业界已经开始在云上进行部署。 企业不仅看到 基础架构即服务 ( IaaS )的好处,而且还看到 高级分析即服务 ( AAaaS )在云平台上。
自 2018 年初以来,已迅速转向 Cloud First 策略。刚开始实现其数据策略的组织正在将云作为其第一个游乐场,而不是投资于内部部署。 但是,“云优先”并不意味着“数据最后”策略。 在完全由数据驱动的策略中,数据仍然扮演着核心角色。 让我们看一下与本地部署相比,云中数据管理的一些优势。
采用云优先策略具有以下优点:
Google 通过从头开始构建服务,从而为企业提供云服务时采取了创新的方法。 这些服务最初是由 Google 自己内部用于搜索和其他互联网规模的服务而构建的。 该平台迅速成熟,形成了一套完整的套件,可用于开发整个简单范围的应用,从简单的 Web 应用开始,再到微服务和高级分析,这些功能利用了大量的结构化和非结构化数据以及 GPU 和 张量处理单元 ( TPU ),用于训练计算密集型模型。 在本书的“第 7 章”,“了解云 TPU” 中,我们将深入研究 TPU 并详细了解 TPU。 在本书中,我们将详细了解 GCP 的各个组成部分,并将专门研究如何利用 GCP 将 人工智能 ( AI )工作负载以及各种应用的无缝集成部署为服务。
尽管 Cloud First 策略在实现实实在在的利益方面具有公认的优势和优势,但由于接下来要说明的原因,云的采用也受到了批评。
尽管云计算是一个新的范例,但仍需要解决某些基本假设和一致的连接性和安全性要求。 以下是“云优先”策略的一些反模式:
云服务提供商已在保护这些反模式方面进行了大量投资,并且云部署此时与本地部署一样可靠和安全。
在下一节中,我们将根据地理区域和服务可用性来查看 Google 数据中心的当前状态。
作为互联网规模的数据托管人,Google 建立了完善的数据中心网络。 现在,相同的基础结构可用于 GCP。 在撰写本文时,GCP 拥有 18 个全球区域,分为 55 个区域,分布在 35 个国家/地区。 以下屏幕快照显示了全球 GCP 区域:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uKRW0RTK-1681704554577)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/handson-ai-gcp/img/a106bea6-fe0c-4b6f-bc20-9ad012cf6013.png)]
这些地区分为“美洲”(北美和南美),“欧洲”和“亚太地区”。 选择正确的区域和区域对于确保服务和数据的延迟,可用性以及持久性处于可接受的水平至关重要。 确保区域内位置之间的网络数据包的往返延迟为亚毫秒级的 95%。 部署在区域内单个区域上的服务将不会容错。 在这种情况下,区域故障将导致服务中断。 为了开发容错应用,需要跨区域部署。 对于关键任务应用,应实现多区域部署策略。 根据应用和服务的关键级别,将资源分类如下:
考虑到现有的可用容量和对云计算资源的需求预测,Google 已经在跨地区扩展其业务范围。 通过使用机器学习算法,可以确保最佳利用容量。 从 AI 从业者的角度来看,GCP 提供了可靠的平台,因此我们可以利用无服务器架构范例专注于构建出色的应用。
在下一节中,我们将研究 GCP 的各个组件并熟悉该接口。 这是本书中对平台的基本介绍。
尽管任何云平台都可以作为虚拟服务通过网络使用,但其核心是系统和物理资源。 如上一节所述,GCP 创建了一个数据中心全球网络,该网络可提供跨区域和区域的服务冗余性,从而提供可靠性。 选择更靠近客户端位置的区域的优势之一是较低的延迟,这在我们处理大量数据传输时起着重要作用。 这些用例需要事件时间和处理时间之间的最小延迟。 GCP 上的所有资源(例如存储和计算)都被视为服务。 该范例称为 一切即服务 ( XaaS )。 这包括 IaaS, 平台即服务 ( PaaS )等。 GCP 上的资源和服务根据抽象性和适用性级别分为全球,区域和区域。 组织在 GCP 上管理的任何资源都必须是项目的一部分。 项目是组织提供的所有资源的顶级抽象。 项目具有各种属性,元数据,资源和访问控制。 项目边界内的资源根据区域和区域限制相互连接,并与内部网络进行通信。 但是,跨项目的资源可能会通过外部网络进行通信。 在 GCP 中,项目由项目名称,项目 ID 和项目编号唯一标识。
GCP 提供了 Web 界面控制台, 命令行界面 ( CLI )和 Cloud Shell,以与各种服务进行交互。 这是 GCP 控制台的屏幕截图:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5db9BC1c-1681704554578)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/handson-ai-gcp/img/75645711-23e9-4ee2-b826-60f9a45f057e.png)]
云
服务开发套件
(
SDK
)提供了一个称为
gcloud
的 CLI 工具,可用于执行所有配置并与平台进行交互。 它也可以用于开发工作流程的管理。 Cloud Shell 提供了与 GCP 进行交互的类似界面,Cloud Shell 是一个基于浏览器的临时 Shell 环境,可以从云控制台内部进行访问。
为了构建智能机器或系统,需要一些基本的构建块。 “数据”是 AI 开发和大规模采用的核心。 在本节中,我们将回顾围绕数据的所有构造块。 这是显示 AI 的所有构建块的图:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IDEWOvgT-1681704554579)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/handson-ai-gcp/img/88663c33-c1b4-44b5-a702-f52e0b43043b.png)]
可以与人类能力相匹配的智能机器的一般概念是在大约一个世纪前提出的,为创建这些智能机器投入了大量的思考和研究。 这些努力为现代 AI 奠定了基础。 但是,研究受到可用数据存储和处理能力的限制,因为构成 AI 基础的机器学习模型需要大量的数据来进行训练,并且需要大量的处理能力来进行算法计算。 由于我们可以存储和处理的数据量很大,现在恢复了 AI 研究领域。 数据是 AI 构建块的核心和焦点。 数据容量分为三个区域:存储,处理和数据驱动的操作。
从本世纪初开始,我们已经看到数字化和存储数字资产的能力急剧上升。 由于采用了云计算,通用存储容量的可访问性也得到了显着提高。 在云计算范例中,存储作为服务可用,不需要采购和管理与存储相关的基础架构。 结果,用于 AI 研究的数据资产的可用性呈指数增长。 下图说明了一段时间内存储容量的增长。 商店的需求正在成倍增长,并且超出了我们目前的限制。 这正在迅速发生。 为了坚持数据量增长的速度,我们描述了一个超出范围的规模:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NLJGXPts-1681704554579)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/handson-ai-gcp/img/51782dd8-9191-41d1-84a1-aa89368719ad.png)]
由于分布式计算框架,我们还看到了整体处理能力的提高。 处理单元分布在各种机器上,以进行并行处理和计算。 框架负责跟踪跨节点的计算,并整合从可行见解中得出的结果。 由于云计算范例(其中计算可作为服务使用),处理能力也大大提高。 在这种情况下,无需为大型数据处理而采购和管理专门的基础架构。 通过增加的处理能力,我们现在能够通过利用大量数据来尝试机器学习算法。 反过来,这又推动了 AI 领域的快速发展。
由于可获得大量数据,并且能够处理这些数据以获取有意义的见解的处理能力,我们能够根据概率模型预测未来的事件和行动。 这些操作基于数据而不是主观判断。 智能机器的基本组成部分之一是根据环境情况采取行动的能力。 该行为应为智能体带来最大的回报。 AI 系统需要促进基于数据的行动而不是主观的人类判断,以便充分增强人类的能力。
任何 AI 系统的关键组件之一是智能机器和智能体程序的 自然语言处理 ( NLP )接口。 与具有 AI 功能的系统的交互必须以人与人之间交互的自然方式进行。 由于我们交流的程度和模糊性,语言处理非常复杂。 人类语音的合成和分析可以通过使用大量训练数据训练 深度神经网络 ( DNNs )来实现。 尽管 DNN 中有大量数据,但是由于语言中的语义变化,很难达到相同的准确率。 但是,NLP 是 AI 的基本构建块。 在本书的后面,我们将研究 GCP 上可用于 NLP 的各种选项和工具。
为了使与智能机的接口尽可能接近人机交互,我们需要语音识别功能。 指令需要作为语音命令给出,并且我们需要复杂的语音识别引擎才能将口语单词转换为机器可读格式。 同样,由于各个人说特定单词的方式有所不同,因此语音识别系统很难获得 100% 的准确率。 该接口需要针对特定个人进行校准和训练,并且通用模型需要不断增强,以提高语音识别引擎的整体效率。
为了使 AI 系统充分增强人类的能力,它需要开发一种方法,通过建立以类似于人眼的方式处理视觉信息的能力来收集对环境上下文的理解。 摄像机捕获了视觉效果,并且需要使用大量视频数据来训练模型,以便对环境进行准确的了解。 机器视觉是 AI 的关键元素。 在接下来的章节中,我们将探索机器视觉 API,以及 GCP 中的示例代码。
人类善于处理各种感官收集的信息,并善于运用推理以有意义的方式对这些感官做出反应。 智能机器需要类似的功能才能模仿和增强人类的能力。 在 AI 系统的情况下,推理可以基于大量的训练数据以及强化学习引擎。 基于信息的环境上下文的逻辑推理是 AI 系统的关键组成部分。
人脑可以轻松执行的最先进的功能之一是提前计划事件和行动。 此技能要求探索过去的数据以及当前的上下文数据和实时信息。 这些行动是根据牢记的短期和长期目标制定的。 智能体需要具有探索上下文环境数据并根据过去可用数据进行计划的能力。 在地理地图上浏览是规划和探索 AI 功能的一个很好的例子。 制图应用可以基于实时数据探索来建议特定时刻的最佳路线,并且可以基于沿途遇到的新信息来调整路线图。
一些智能体还需要能够处理和控制物理对象。 这包括工业机器人,这些机器人在装配线上处理各种机器零件,将它们放置在正确的位置,然后根据预定义的例程进行应用。 这种类型的系统需要具有一定程度的模糊性以及可以根据环境运行的自学习循环。 不可能为所有可能的情况编程处理和控制功能。 需要以这样的方式构建模型:智能体可以根据环境状态的变化采取行动,同时仍能最大化环境中智能体的总体报酬。
智能体需要能够在物理环境中导航和移动。 自动驾驶汽车或自动驾驶汽车是 AI 系统功能的示例。 为了建立这种能力,需要对智能体进行全面的实际生活中可能遇到的路况训练。 DNN 还需要在尽可能多的场景中进行训练。 真实(非训练)环境中的模型执行需要非常高效,以使智能体能够在关键任务环境中生存,而该任务关键环境要求智能体的事件时间和行动时间之间的等待时间极低。
为了使智能体以自然形式交互,它需要能够生成人类语音。 启用语音的系统现在已成为主流,并且比语音到文本的界面更容易构建。 Google 提供了易于使用的语音生成 API。 我们将在本章的下一部分中查看这些 API 和服务,并在本书后面的章节中探索详细的示例。
图像生成功能是 AI 系统的另一个组成部分。 图像经过处理和重新格式化,以便从像素数据中获取更多含义和信息。 图像生成功能可用于医学图像处理以及高端法医研究。
在下一节中,我们将介绍 GCP 中可用于促进 AI 各个构建模块的工具。
Google 简化了在 GCP 上使用现成的 AI 构建块构建 AI 系统的过程。 GCP 上提供了三类组件和工具:视觉,语言和会话。
Sight 是指智能机器的可视界面。 GCP 提供以下用于视觉信息和情报的 API:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ddzrBwPB-1681704554579)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/handson-ai-gcp/img/20038c09-29c1-4f48-a1c0-e25b12119802.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eE280wN7-1681704554580)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/handson-ai-gcp/img/fa194721-0bde-4a9d-87ec-908e30d4fe5a.png)]
GCP 通过翻译和自然语言 API 提供用于语言信息和情报的 API,如下所示:
GCP 提供了 API,可通过 Dialogflow 和 Google Cloud TTS/STT API 与智能机实现语音和对话界面。
对话界面是支持 AI 的应用的重要方面。 GCP 提供了 Dialogflow 引擎,用于通过简单的界面和 API 创建企业级的对话应用,如下所示:
command_and_search
:可用于短命令和语音搜索。
phone_call
:用于来自电话对话的音频。
video
:适用于作为视频信号一部分或以更高采样率录制的音频。
default
:这是通用模型。
本节中列出的所有服务和 API 均可与智能机实现自然的接口,并且是 AI 的构建块。 在本书中,我们将通过代码示例详细探讨这些 AI 工具。
在本章中,我们已经了解了 Cloud First 策略,以及这对于开发利用 AI 的现代应用是当务之急的选择。 另外,我们已经简要地看到了各种系统的基于云的实现的反模式。 我们还介绍了 GCP,它是基于 Google 在管理大量数据方面的经验而构建的。 随着时间的推移,该平台正在得到丰富和扩展。 我们研究了通用 AI 系统的各种构建块,并研究了 GCP 上可用的工具,这些工具可以以无服务器方式无缝地促进 AI 应用的开发。
在下一章中,我们将研究 GCP 上可用于计算和处理 GCP 上的数据资产的各种组件。
在云中构建和运行 人工智能 ( AI )应用之前,了解可用的不同选项非常重要。 这将帮助我们为应用选择正确的选项,以确保我们以经济高效的方式获得最佳性能。
在本章中,我们将深入探讨可用于在 Google Cloud Platform ( GCP )上构建和运行 AI 应用的选项。 我们将研究 GCP 上可用的计算,处理和存储选项,以及业务流程和可视化。 一旦我们对这些选项有了充分的了解,我们将在本章的结尾部分介绍一个动手例子。
在本章中,我们将研究以下主题:
GCP 提供了各种计算选项来部署您的应用,并使用实际的 Google 基础架构来运行您的应用。 可用的选项如下:
所有计算选项均与其他 GCP 服务和产品进行通信,例如存储,网络,Stackdriver,安全性和大数据产品套件。 根据给定应用的需求,从 Compute Engine,Kubernetes Engine,App Engine 和 Cloud Functions 中选择适当的计算选项。
Google 计算选项可帮助您在 Google 基础架构上运行多种大小的虚拟机并对其进行自定义。 它使您能够运行容器化的应用,并且如果您不必照顾与基础架构相关的项目,则可以直接在引擎上部署代码。 因此,根据您的需求,Google 提供了多种选择来利用计算能力,加快开发工作并缩短产品上市时间。
接下来,我们将详细讨论以下计算选项:
Compute Engine 是 Google Cloud 提供的 IaaS; 它是在 Google 基础架构中运行的虚拟机。
Google Cloud 提供的所有区域和区域都可以使用 Compute Engine。 它具有永久性磁盘和本地 固态驱动器 ( SSD )的存储选项。SSD 内部内置芯片上集成电路,不包含任何旋转头或磁盘驱动器以读取数据。 与硬盘驱动器相比,SSD 更耐用,读取时间更快。 永久磁盘是一种网络存储,最多可以扩展到 64 TB,而本地 SSD 是加密驱动器,它实际上已连接到服务器,并且可以扩展到 3 TB。
在旋转实例时,用户可以选择预定义的计算选项之一,也可以使用自定义的配置。 可以使用 Linux 或 Windows 操作系统启动 Compute Engine。 这些实例可以使用 CPU,GPU 和 TPU 启动,并且由于基础结构是由 Google 提供的,因此用户可以进行操作系统级的自定义。
用户可以在 Compute Engine 中创建托管和非托管实例组:
让我们快速讨论一个有助于降低价格的选项。 如果可能,请使用可抢占的计算机。 可抢占式虚拟机是短期且低成本的选件,可在已知工作负载并预期在 24 小时内完成工作负载时使用。 这些虚拟机具有显着的成本优势,与常规实例相比,可节省高达 80% 的成本。 可抢占式机器将节省多达 80% 的成本,但有一个陷阱:Google 始终可以在 30 秒内从您那里收回该实例。 Google 每秒收费,并为用户提供可持续的折扣。
在为 AI(ML)应用训练模型时,始终需要功能强大的机器,以通过提供充足的训练数据并减少训练模型的时间来提高模型的效率。 Google Compute Engine 具有多个选项,可以启动功能强大的计算实例和组,从而可以在其上训练和运行模型。 对于训练和运行模型,应使用 CPU 和 GPU 的功能。 对于 TensorFlow 应用,应使用带有 TPU 的机器。
App Engine 是 Google Cloud 提供的 PaaS; 它是一个完全托管的无服务器应用平台。
在 Google Cloud 覆盖的大多数区域中都可以使用 App Engine。 您可以将 App Engine 视为可用于部署的基础架构; 开发人员只需专注于构建应用并将其部署到 App Engine 上,其他所有事情都将得到解决。 App Engine 具有出色的功能,例如自动缩放,流量拆分,应用安全,监视和调试-所有这些功能对于部署,保护和扩展任何应用都是必不可少的。 使用 Cloud SDK 和 IntelliJ IDEA 之类的工具,开发人员可以直接连接到 App Engine 并执行诸如调试源代码和运行 API 后端之类的操作。 App Engine 的限制之一是无法自定义其操作系统。
App Engine 有两种不同的环境:
App Engine 标准环境应用在沙盒环境中运行,并支持运行 Python,Java,Node.js,Go 和 PHP 应用。 另一方面,App Engine 灵活环境应用在 Google Compute Engine 虚拟机上的 Docker 容器中运行,除了标准环境支持的语言外,还支持运行 Ruby 和 .NET 应用。 有关在标准环境和灵活环境之间进行选择的更多详细信息,请参阅 这里 。
App Engine 对于部署任何 Web 或移动应用非常有用。 根据资源的使用情况,基础架构会自动扩展,Google 只会针对已使用的应用收费。
在 App Engine 上运行任何移动或 Web 应用时,在许多用例中,这些应用都需要 AI。 在 App Engine 中部署应用时可以实现这些目标。 该服务可以与云终结点一起部署,而 Python 应用可以在 App Engine 中部署,从而加载训练有素的机器学习模型。 通过 App Engine 访问模型后,该服务可以将请求发送到 Python 应用并以一致的方式获取响应。
Cloud Functions 是 Google Cloud 提供的事件驱动的无服务器 PaaS,非常适合微服务架构。
Google Cloud 覆盖的大多数区域都提供 Cloud Functions。 它们主要用于小型或单一用途的功能,例如调用其他服务或将事件写入发布/订阅主题等。 Cloud Functions 中有一些很棒的功能,可提供敏捷性和零停机维护。 Cloud Functions 可以自动销售,并且高度可用。 您可以使用 Cloud Functions 连接到大多数 Google Cloud 服务。
可以使用 JavaScript 或 Python 开发 Cloud Functions。 用户仅在运行时才需要为 Cloud Functions 付费。 这使其非常具有成本效益。
在运行任何应用时,如果用户希望基于特定事件调用 Cloud ML 或 Cloud Vision 的 API,则可以使用 Cloud Functions。
Kubernetes Engine 是 Google Cloud 提供的一项托管服务; 它用于部署和运行容器化的应用。 以下是 Kubernetes Engine 的功能:
如果您的应用可以管理其中一台虚拟机发生故障的情况,那么将可抢占实例与 Kubernetes 群集配合使用非常有意义,因为这样可以节省大量成本。
在为 Al(ML)应用训练模型时,始终需要功能强大的机器,以通过提供充足的训练数据并减少训练模型的时间来提高模型的效率。 可以使用 GPU 构建 Kubernetes 集群,以训练模型并运行 ML 工作负载。 这可以使许多机器学习应用受益,这些应用需要具有强大 GPU 机器的托管容器化集群。
GCP 提供了各种存储选项来存储您的应用数据。 不同的应用具有不同的存储需求,并且取决于应用,性能得以提高。 从 GCP 存储选项来看,很明显,它可以支持各种存储需求,例如 NoSQL,文档 DB,对象存储, 关系数据库管理系统 ( RDBMS )等。 。 您可以使用 Google 的托管服务来满足存储需求,也可以使用 Google 基础架构并安装所需的服务。
为您的应用选择正确的存储选项很重要。 根据 Google 中可用的存储选项,以下图表将帮助您确定正确的存储选项:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DGKIgA7Z-1681704554580)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/handson-ai-gcp/img/8d1f12e2-cdec-437d-ab99-0a2191d3e772.png)]
接下来,我们将详细讨论以下存储选项:
云存储是 GCP 提供的对象存储。 以下是云存储的功能:
gsutil
工具从本地传输数据,也可以使用云服务从其他云传输数据。
凭借其所有功能,云存储是 GCP 上最常用的存储选项,也是最便宜的存储选项之一。 根据存储类别和访问模式,其价格从每月每 GB 0.007 美元到每月每 GB 0.036 美元不等。
云存储可以在各种 AI 和 ML 用例中提供帮助。 大多数大数据迁移或现代数据平台都使用 Cloud Bigtable 构建其 NoSQL 数据库。 例如,Spark ML 应用将访问 Cloud Bigtable 中的数据并将结果存储在其中。 云存储已经用于基因组学,视频转码,数据分析和计算等用例。
Cloud Bigtable 是 GCP 提供的完全托管的 NoSQL 数据库系统。 它可以以极低的延迟和高吞吐量扩展到 PB 级的数据。 Cloud Bigtable 的功能如下:
Cloud Bigtable 可以充当各种 AI 和 ML 用例的存储。 大多数大数据迁移或现代数据平台都使用 Cloud Bigtable 构建其 NoSQL 数据库。 例如,流式 ML 应用可以很好地将 Bigtable 用作后端。
Cloud Datastore 是 GCP 提供的完全托管的,可扩展的 NoSQL 数据库。 数据存储区建立在 Bigtable 之上; 这就是为什么它具有高度可扩展性的原因。 Cloud Datastore 的功能如下:
| | Datastore | RDBMS |
| — | — |
| 对象类别 | 类 | 表 |
| 单一对象 | 实体 | 行 |
| 唯一标识 | 键 | 主键 |
| 属性信息 | 属性 | 字段 |
如果数据存储与 RDBMS 非常相似,为什么还要使用数据存储? 原因很简单,因为它的可伸缩性是 RDBMS 无法实现的。
Cloud Datastore 可以充当大型 Web 应用的 AI 和 ML 用例的存储。 GCP 上托管的任何电子商务网站都可以使用数据存储来保存数据,并且使用此数据,可以训练 ML 模型并可以向用户提供所需的建议,进而可以提高客户满意度。
Cloud Firestore 是可扩展的 NoSQL 文档数据库。 它是适用于 Firebase 的 Web,服务器和移动开发的数据库。
Firestore 中存储的数据几乎全局实时同步,并且可以从多个设备进行访问。 Firestore 将数据存储在文档和集合中。 让我们快速看一下如何存储数据的示例:
这是集合的结构:
随后是 GCP 中的 Firestore 用户界面的屏幕截图:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QmBoDjo6-1681704554581)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/handson-ai-gcp/img/05a11a1c-28b7-4f06-8cbc-50f83a938558.png)]
文档通过它们在数据库中的位置唯一标识。 默认情况下,Firestore 中存储的所有数据都是加密的,并且可以使用访问控制为用户提供适当的访问权限。 对于 1 GB 的存储空间,向用户收取 0.18 美元,写入 100,000 个文档 0.18 美元,读取 100,000 个文档 0.06 美元和删除相同数量的文档 0.02 美元。
Cloud Firestore 可以充当 AI 和 ML 用例中存储在移动和 Web 设备上的应用的存储。 在 GCP 上托管的具有网站和移动应用的任何应用都可以将数据保存在 Firestore 中,并且可以使用此数据训练 ML 模型,并可以在其移动设备和网站应用上向用户提供所需的建议。
Cloud SQL 是 MySQL 和 PostgreSQL 的完全托管实例。 Cloud SQL 的功能如下:
Cloud SQL 可以为大型和复杂的结构化数据提供所有 AI 和 ML 用例。 另一个名为 Cloud Spanner 的服务可以提供类似的用例,Cloud SQL 可以提供类似的用例,但是规模非常大。
Cloud Spanner 是完全托管的,可横向扩展的关系数据库管理服务。 它可以在所有可用区域中扩展到数百万个节点。 Cloud Spanner 的功能如下:
Cloud Spanner 可以提供适用于 MySQL 和 PostgreSQL 的所有 AI 和 ML 用例。 Cloud SQL 适用于服务需要高达 10 TB 结构化数据的 AI 和 ML 用例; 例如,机器学习用例需要数据准备,这涉及复杂的 SQL 连接并可以提高流程效率。
Cloud Memorystore 是基于 Redis 构建的完全托管的内存中数据存储服务。 以下是 Cloud Memorystore 的功能:
Cloud Memorystore 可以使用 Redis ML 模块满足各种 AL 和 ML 用例。 Redis ML 具有各种 ML 模块作为内置数据类型。 Cloud Memorystore 可以为线性和逻辑回归,决策树矩阵计算等提供机器学习模块服务。
Cloud Filestore 是 GCP 提供的完全托管的高性能网络文件存储。 以下是 Cloud Filestore 的功能:
Cloud Filestore 可以服务所有 AI 和 ML 用例,这些用例要求本质上不是很复杂的数据集具有高吞吐量。
在下一节中,我们将讨论处理选项。
除了 IaaS 选项(可用于通过计算选项构建自己的 AI 和 ML 管道)之外,Google 还提供了一些托管服务,可用于处理数据以及构建 AI 和 ML 管道。 以下是完全托管的处理选项:
所有托管处理选项都与其他 Google Cloud Services 集成在一起,例如网络,身份和访问管理,Stackdriver 等。 这些使跟踪活动和加强应用的安全性变得容易。 BigQuery 可用于卸载现有数据仓库并创建一个新仓库,并且使用 BigQuery ML 选项,您可以构建 ML 管道。 Dataproc 可用于在 GCP 上迁移现有的 Hadoop 项目并在其上运行 AI 和 ML 管道。 Cloud Dataflow 可用于在 GCP 上构建全新的管道。
BigQuery 是 GCP 的云数据仓库,具有机器学习风格(BigQuery ML)。 它是一个非常强大的工具,可以处理 PB 的数据,并且为您提供了随时可用的模型,您可以在 SQL 编程中使用这些模型来构建机器学习管道。
BigQuery 快速,可扩展且无服务器。 您只需单击几下即可构建 BigQuery 数据集,然后开始将数据加载到其中。 BigQuery 使用 Colossus 以列格式将数据存储在本机表中,并且数据被压缩。 这使得数据检索非常快。 除存储外,BigQuery 使用以下工具和网络组件来使其快速,可靠和高效:
换句话说,它利用 Google 出色的基础架构和最佳服务,使其快速,高度可用且可扩展。
BigQuery 带有其他功能,例如数据和查询共享,保存所需的查询; 它符合 ANSI 2011,并与本机以及外部工具(包括 Informatica,Talend 等)集成。 BigQuery 中保存的所有数据均已加密。 它是联盟的,可以查询来自其他服务(如 Cloud Storage 和 Bigtable)的数据。 BigQuery 还通过 BigQuery Streaming 支持实时分析。
BigQuery 拥有一个友好的用户界面,用户可以从中执行所有操作,还具有一个命令行工具
bqclient
,可用于连接到 BigQuery。 BigQuery 有两种定价模式:“按需付费”,即每 TB 查询处理向用户收取 5 美元的费用;以及“固定费用定价”,即每月约 40,000 美元,为此用户可获得 2,000 个专用插槽用于处理。 存储费用为每月每 GB 0.02 美元; 对于短期存储和长期存储,每月每 GB 0.01 USD。
BigQuery ML 是 BigQuery 机器学习的一种形式,它具有一些内置算法,可以直接在 SQL 查询中用于训练模型和预测输出。 BigQuery ML 当前支持分类模型的线性回归,二进制逻辑回归和多类逻辑回归。
Cloud Dataproc 是一个完全托管的 Hadoop 和 Spark 集群,可以在几秒钟内旋转。 Cloud Dataproc 是一个自动扩展集群,可用于非常有效地运行 Hadoop,Spark 以及 AI 和 ML 应用。 在高峰时段,可以根据使用情况将节点添加到群集,并且在需求较低时可以进行缩减。
Dataproc 与其他服务集成,例如云存储,BigQuery,Stackdriver,身份和访问管理以及网络。 这使得群集的使用非常容易且安全。
在 Dataproc 集群下,Google 实际上运行计算实例。 用户可以从广泛的计算机配置中进行选择来构建集群,或者如果现有计算机配置不能满足需求,则用户也可以使用自定义计算机配置来构建集群。 这里要注意的一件非常重要的事情是 Dataproc 集群使用抢占式实例。 这可以为集群的定价创造奇迹。 抢占型实例的价格要低得多,大约是具有相同配置的实际实例的 20%,而 Google 可以在 30 秒内通知收回实例。
对于 Dataproc 集群,可将抢占实例用作数据节点,因为通常将 Dataproc 集群用于计算目的,并且所有数据都将保存在 Cloud Storage 中。 因此,在这种情况下,即使抢占式实例发生故障,该作业也将转移到另一个节点,并且不会产生任何影响。 Cloud Dataproc 集群的定价随实例而异,但是具有非常有竞争力的定价。
Cloud Dataproc 可以使用 Apache Spark,Hadoop 和其他工具来满足各种 AI 和 ML 用例。 将 Dataproc 视为完全托管的云 Hadoop 和 Spark 集群。 可以在 Hadoop 和 Spark 上构建的所有 AI 和 ML 用例都可以在 Cloud Dataproc 集群上构建。
Cloud Dataflow 是用于运行批量和流应用的完全托管服务,并且具有用于运行 AI 和 ML 作业的丰富集成。 它是 Google 提供的无服务器服务,基于 Apache Beam 构建,因此,批量代码和流代码都可以相互使用。 可以以非常简化的方式用 Java 和 Python 构建 Cloud Dataflow 应用。
Cloud Dataflow 与其他 GCP 服务集成在一起,例如 Cloud Pub/Sub,Cloud Machine Learning,Stackdriver,BigQuery 和 Bigtable,这使得构建 Cloud Dataflow 作业非常容易。 在 Cloud Dataflow 之下,App Engine 正在运行,因此用户拥有无限的能力来扩展其工作。 Cloud Dataflow 会根据工作需求自动扩展。
除了已处理数据的定价外,批量和流作业的 Cloud Dataflow 定价基本相同。 它根据 VCPU,RAM,持久性存储和处理的数据量进行收费。
Cloud Dataflow 可以与 Cloud Machine Learning 集成,服务于各种 AL 和 ML 用例。 欺诈检测是一个经典的用例,可以使用 Cloud Dataflow 和 Cloud Machine Learning 实现流作业。
到目前为止,我们已经了解了 GCP 的基本知识,这将有助于我们有效地使用平台,做出正确的选择并建立有效的渠道。 现在,您已了解 GCP 上所有可用的计算,存储和处理选项。 现在,让我们开始构建 ML 管道。
让我们来看一个详细的示例,在该示例中,我们将建立一条端到端的管道,从将数据加载到 Cloud Storage,在其上创建 BigQuery 数据集,使用 BigQuery ML 训练模型并对其进行测试。 在此用例中,我们将使用逻辑回归模型来查找潜在客户转化概率。 您可以使用选择的任何合适的数据集并遵循此示例。
潜在客户数据包含有关潜在客户的各种属性。 BigQuery ML 具有内置功能,我们可以直接在任何数据集中训练模型。 我们可以预测输出变量和转换概率。 BigQuery 提供了一个 SQL 接口来训练和评估机器学习模型。 该模型可以部署在平台上进行消费。
我们有两个数据集:潜在客户训练数据和测试数据,其中训练数据为实际总体数据的 80%,测试数据为 20%。 使用训练数据训练模型后,我们将在测试数据上评估模型,并在以下类别中找到每个潜在客户的潜在客户转换概率:
下图代表了将数据加载到 Cloud Storage 和 BigQuery 中以及对模型进行训练并使用潜在客户数据进行测试的端到端过程。 您可以选择一个数据集:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qkl96niI-1681704554581)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/handson-ai-gcp/img/17c2d809-14a6-4e8d-8152-d4e379875c50.png)]
从上图中,我们可以看到以下内容:
leads_training
和
leads_test
这两个表将潜在客户数据集创建到 BigQuery 中。
leads_training
表来训练我们的模型,并使用
leads_test
表来测试模型。
我们将在以下各节中详细讨论每个步骤。
让我们讨论将数据加载到 Cloud Storage 中的分步过程:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JYbKYQmi-1681704554581)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/handson-ai-gcp/img/d3b522b1-57fe-4faa-971e-213e9d91a913.png)]
现在,我们将讨论 BigQuery 数据集并将数据加载到 BigQuery 中:
BigQuery
。
Leads_Training
和
Leads_Test
表:
Leads_Test_Data
或
Leads_Training_Data
。
1
。
以下屏幕快照中还显示了创建表的上述步骤:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nnNpEP6f-1681704554581)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/handson-ai-gcp/img/318e23f8-03c3-49dc-8fc7-9d7797d38ca5.png)]
以下屏幕快照描述了如何跳过标题行:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tLfRtbeV-1681704554582)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/handson-ai-gcp/img/52764ba4-6feb-431c-8e64-28cc2dd7c2d9.png)]
现在,我们已经在 BigQuery 中创建了 Leads 数据集,并从 Cloud Storage 存储桶中的可用数据中创建了
Leads_Training
和
Leads_Test
表,接下来我们将训练模型。
以下 BigQuery 代码段将用于通过
Leads_Training
表中的逻辑回归来训练销售线索模型:
请使用
这个页面
上的
leads_model.sql
文件从以下链接加载查询。
lead_model_optimum
的模型。
OPTIONS
中看到的那样,已经创建了逻辑回归模型,其中
model_type
是
logistic_reg
。
Lead_Stage
是我们将根据测试数据进行预测的标签。
Lead_Stage
是我们可以从中识别销售线索状态的列。
lead_origin
至
Last_Notable_Activity
列来预测测试数据上的
Lead_Status
。
Leads_Training_Table
中的数据创建的。
lead_model_optimum
保存在 Leads 数据集中。
通过单击“模型”,您将能够看到“模型详细信息”,“模型状态”和“模型模式”。 它具有完整的细节,例如所使用的算法,迭代次数,学习率,完成时间等。 因此,只需将前面的代码复制并粘贴到
BigQuery
窗口中,便可以创建第一个模型。
接下来,我们将看到如何评估所创建的模型。
在
BigQuery
中,可以使用
ml.evaluate()
函数评估任何模型。 它将给出该模型的结果。 在下面的代码块中是
BigQuery
代码和模型评估结果。 让我们看下面的代码:
在前面的代码中,我们对
lead_model_optimum
进行了评估以查找其详细信息。
执行前面的查询后,让我们看一下以下结果:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sm5aqpZN-1681704554582)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/handson-ai-gcp/img/7f6de05b-8ce4-4fc4-b600-08e497e38f58.png)]
上面的屏幕快照显示了完整的模型评估详细信息。 如我们所见,SQL 界面训练模型的准确率很高,并且训练数据覆盖率。 得分值还表明该模型是最佳拟合的,而不是评估数据的过拟合或过拟合。 关键是,业务分析师还可以使用 BigQuery 提供的简单 SQL 接口执行模型训练和部署。
在 BigQuery 中,
ml.predict()
函数用于使用模型预测结果。 执行以下 BigQuery 代码以测试您的模型:
在前面的代码中,模型基于
prospect_id
预测
test_data
的
Lead_Stage
。
您可以看到生成的屏幕截图。 请比较模型的预测和基于
prospect_id
的测试数据的
Lead_Stage
列,以查看模型的准确率:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9nK2RnG4-1681704554582)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/handson-ai-gcp/img/e9413bd7-a82e-4827-b488-b42e7a0a9c7b.png)]
至此,本例结束。 请在使用 Spark 的 Dataproc 集群上尝试相同的示例。
在本章中,我们学习了在 GCP 上构建 AI 应用时对我们有帮助的所有组件。 我们研究了不同的计算,存储和处理选项,以及这些选项可以为我们提供哪些帮助。 请记住,选择正确的存储,计算和处理对于构建具有成本效益的应用非常重要。 除了学习组件之外,我们还使用 BigQuery 和 Cloud Storage 进行了潜在客户预测的动手示例,并且您可以在 Dataproc 集群上使用 Spark 尝试相同的示例。
在下一章中,我们将深入探讨利用 GCP 的功能来使用自动缩放功能处理大量数据。
在本节中,我们将能够使用各种算法执行动手实验。 在第 3 章中,我们将介绍 XGBoost(一种功能强大的算法),以及如何利用它在 Google Cloud Platform ( GCP )上构建机器学习应用。 在第 4 章中,我们将介绍 Cloud AutoML,它在 GCP 上提供机器学习即服务。 在第 5 章中,我们将使用 Cloud MLEngine 构建机器学习管道。 在第 6 章中,我们将提供有关使用 Dialogflow 构建会话应用的分步指南。
本节包括以下章节:
在许多领域,基于机器学习的数据驱动方法变得非常重要。 一个很好的例子是基于机器学习的智能电子邮件垃圾邮件分类器,它通过学习大量垃圾邮件数据和用户反馈来保护我们的电子邮件。 另一个这样的示例可以是针对性广告系统,其基于某些上下文向用户展示广告,或者是防止恶意攻击者攻击的银行欺诈检测系统。 为了使机器学习应用在上述领域取得成功,必须牢记一些重要因素。
一种是建立并使用有效的统计模型来表示涵盖最重要场景的所有复杂数据依赖关系,另一种是可伸缩地构建那些模型以确保它们在越来越大的数据集上工作。 机器学习的可伸缩性使您能够通过并行和分布式计算进行快速学习,并且还提供了有效的内存利用率。
在本章中,我们将讨论 XGBoost 库,这是一种集成学习算法。 XGBoost 是一种基于决策树集成的机器学习算法,该算法使用梯度提升系统。 在预测涉及非结构化数据(例如图像和文本)的问题时,人工神经网络往往会胜过任何其他算法或系统。 尽管如此,当涉及中小型结构化/表格数据时,基于决策树的算法目前被认为是同类最佳。 这是因为在某些情况下,仅一种机器学习模型的结果可能不够。 共同学习为组合多种机器学习算法的预测能力提供了系统的解决方案。 结果是一个单一模型,提供了多个模型的附加输出。 集成模型(也称为基础学习器)可以使用相同的学习算法,也可以使用不同的算法。 在本章中,您将学习如何使用 Python 实现 XGBoost 算法。 您还将学习有关梯度提升的概念以及它们如何支持 XGBoost 算法的知识。
本章将涵盖以下主题:
XGBoost 是一个库,可帮助以可扩展且以性能为中心的方式在非常大的数据集上运行集成学习机器学习算法。 因此,它着重于计算速度和模型表现。 换句话说,对于 XGBoost 而言,高端硬件情况下性能或可伸缩性提高的结果更多。 XGBoost 在梯度提升框架内实现了用于机器学习的算法。 我们将很快进入 XGBoost 库。 但是在此之前,我们还应该了解集成学习和梯度提升。
集成学习算法结合了多个基本模型以产生最佳的预测模型。 与尝试从训练数据中学习假设的普通机器学习方法相反,集成方法尝试构建和组合许多假设。 使用集成方法时,重点放在泛化上,由于算法的特定性质或由于选择的训练集而导致的偏差方差折衷,有时基础学习器会忽略它。
通常,基础学习算法会根据训练数据生成基础学习器,这些数据可以是决策树,神经网络或其他机器学习算法。 大多数乐团使用单个基本学习算法来生成同类基础学习器,但是也存在几种使用多种不同类型的学习算法来生成异构学习器的方法。 在后一种情况下,没有用于基础学习的单一算法。 装袋和提升是广泛使用的集成方法。 这些是一种简单的组装技术,使用一些模型平均技术来共同构建许多独立的预测变量/模型/学习器(例如平均加权,多数或平均法线)。
另一个更大的问题是如何确保基础学习器不相互关联。 确保这些基本共同学习器的预测彼此独立是很重要的。 否则,它将排除整体建模的优化预测模型。 对于不同的基础共同学习器,我们的意思是最终的基础模型应该有所不同。 如果模型使用的数据集完全不同并且完全代表不同的上下文,则这些模型可以不同。 如果模型考虑不同的假设或使用完全不同的算法类别,则模型可以有所不同。
当集成学习模型产生的误差尽可能低时,确定最佳模型,而损失函数的较低值确定最小值。 损失函数用于衡量预测模型可以预测预期结果的程度。 查找最小函数点的最常见方法是梯度下降。 总而言之,我们必须首先了解导致模型误差的原因,才能真正了解集成模式背后的原因。 我们将向您简要介绍这些误差,并为每位集成学生提供对这些问题的见解。 任何模型的误差都可以在数学上分为三种类型。
偏差是预测值和实际值之间的距离。 换句话说,偏差是平均模型预测值与我们尝试预测的正确值之间的差。 高度偏倚的模型很少考虑训练数据,而过于简化了模型。 高偏差会导致算法错过相关的输入输出变量关系。 如果模型具有很高的偏差度,则意味着该模型过于简单,无法捕获支撑数据的复杂性。 为了量化偏差,它是预测值和实际值之间的平均差。
当模型在经过训练的数据集上良好但在新数据集(例如测试数据集或验证数据集)上表现不佳时,就会发生方差。 方差告诉我们如何分散实际值。 高方差会导致过拟合,这意味着算法模型中训练数据中存在随机噪声。 如果模型显示出很高的方差,则它会变得非常灵活,并适应训练集的数据点。 如果高方差模型遇到另一个未学习的数据点,则无法正确预测。 方差量化了预测和相同观测值之间的差异。
不可减少的误差是无论您使用哪种机器学习算法都无法将其最小化的误差。 它们通常是由可能影响输出变量的未知变量引起的。 改善不可减少误差的预测的唯一方法是识别和预测那些外部影响。
总误差定义如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NfkUAopT-1681704554583)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/handson-ai-gcp/img/25ddca20-73bd-45ce-a345-410e7323b5a9.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wHBboNdU-1681704554583)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/handson-ai-gcp/img/d2cf78ed-9a6e-4b79-a51c-353b2a200dd7.png)]
通常,随着模型变得越来越复杂,由于模型的失真较小,您会看到误差的减少。 但是,这只会发生到某个特定点。 随着模型的不断复杂化,您最终会过拟合模型,因此方差将开始增加。 正确优化的模型应该平衡方差和偏差,如下图所示:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oY0hgANl-1681704554583)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/handson-ai-gcp/img/cd89c9f7-cd5a-4b32-a26c-fde11de955e8.png)]
梯度提升是整体学习器的一种。 这意味着将基于一组不同的模型创建最终模型。 这些不同模型的拟合程度过高,因此它们的预测能力较弱,但是由于将它们组合在一起,因此在总体结果方面要好得多。 在梯度提升机中,决策树是最常用的弱模型类型。 因此,简而言之,梯度提升是一种基于回归和分类的机器学习方法,可将预测模型生成为弱预测模型的集合,该模型通常基于决策树。 现在让我们看看如何在数学上进行定义。
任何监督学习算法都旨在定义和最小化损失函数。 均方误差 ( MSE )或损失函数定义如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xCTbGEHJ-1681704554584)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/handson-ai-gcp/img/b381969d-86b4-4217-b3f2-232cb9a863a1.png)]
我们希望损失函数最小。 实际上,梯度提升的目的是找到使损失函数最小化的数据的最近似函数。 这可以用数学方式表示为:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-F50mPyTA-1681704554584)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/handson-ai-gcp/img/eb208d97-a363-4f38-8311-f10b781b5fd0.png)]
因此,在梯度提升中,除了找到最佳参数
P
之外,我们还希望找到最佳函数
F
。 与简单的逻辑回归不同,此更改使问题复杂得多。 之前,我们要优化的参数数量是固定的(例如,在开始训练之前已定义了逻辑回归模型); 现在,如果函数
F
发生更改,它可以随着我的优化过程而更改。
显然,搜索每个单个特征和参数以获得最佳特征会花费太长时间,因此梯度提升可以通过使用许多简单函数并将它们组合来找到最佳函数
F
。 以下是梯度增强中涉及的步骤:
这个页面 上的代码表示如何在 Python 中完成梯度提升。
此代码用于在 Python 中实现梯度提升。 但目的还在于显示如何在多次迭代后减少误差。 散点图显示了机器学习算法的输入(
X
)的输出(
Y
)的分布方式。 以下输出还显示了残留散点图,该残留散点图在第 20 次迭代后变得随机性降低,表明梯度提升已找到最佳输出:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CQVnw7sL-1681704554584)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/handson-ai-gcp/img/52b3e809-aced-4372-81b9-8430fe7c5fce.png)]
前面的散点图是输入和输出机器学习算法的表示。 下面显示了应用梯度提升之前的实际输出:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ovEzpStm-1681704554584)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/handson-ai-gcp/img/1b6498cc-2c5f-42db-a12f-b83faee51048.png)]
我们可以在前面的屏幕截图中看到以下内容:
XGBoost 是由 Tianqi Chen 开发的,其全名是 eXtreme Gradient Boosting。 XGBoost 是梯度助推器机器的一种可扩展且准确的实现方式,仅针对模型表现和计算速度而开发,作为助力树算法的计算机功率极限。 陈天琪说,后者使它更具优势,与其他库有所不同。 以下是 XGboost 使其独特的一些重要功能:
max_depth
参数开始向后修剪树。 这是一种深度优先的方法,可以提高算法的整体性能和效率。
在本节中,我们将研究如何使用 Google AI Hub 训练和存储机器学习模型。 AI Hub 是一站式存储,用于检测,共享和部署机器学习模型。 它是可重用的模型目录,可以快速安装在 AI 平台执行环境中。 该目录包含基于以下通用框架的模型设计的汇编:TensorFlow,PyTorch,Keras,scikit-learn 和 XGBoost。 每种模型都可以包装由 GPU 或 TPU,Jupyter 笔记本和 Google 自己的 AI API 支持的深度学习 VM,格式可以在 Kubeflow 中实现。 每个模型都有标签,这些标签可根据一系列特征来方便信息的搜索和发现。 借助
.../text_classification_rapids_framework.py
处的代码,我们将 XGBoost 与 RAPIDS 框架一起用于文本分类。
从算法上讲,此代码执行以下步骤:
OS
,
google.cloud
,
cudf(RAPID)
,
sklearn
,
pandas
和
xgboost
。 它还会导入
pynvml
,这是一个 Python 库,用于低级 CUDA 库,用于 GPU 管理和监视。
miniconda
库和 RAPIDS 平台,然后设置 NVIDIA GPU 所需的一些环境变量。
project id
和
bucket id
。
text_classification_emp.csv
)。 然后将其存储在本地作业目录中以供进一步使用。
\n
分割 CSV,并创建两个数组,一个数组用于标签(目标变量),另一个数组用于文本(预测变量)。
DataFrame
,然后将其转换为与基础 GPU 兼容的 CUDF
DataFrame
。 这样做是为了确保所有其他操作都利用基础 GPU。
要提交前面的代码来训练模型,您必须运行以下命令。 此命令是标准
google-ai-platform
CLI,该 CLI 提交训练说明以在 Google Cloud AI 平台上训练任何模型:
gcloud ai-platform jobs submit training $JOB_NAME \
--job-dir=$JOB_DIR \
--package-path=$TRAINING_PACKAGE_PATH \
--module-name=$MAIN_TRAINER_MODULE \
--region=$REGION \
--runtime-version=$RUNTIME_VERSION \
--python-version=$PYTHON_VERSION \
--config=config.yaml
PROJECT_ID=test-project-id
BUCKET_ID=ml-assets
JOB_NAME=gpu_text_classification_$(date +"%Y%m%d_%H%M%S")
JOB_DIR=gs://${BUCKET_ID}/xgboost_job_dir
TRAINING_PACKAGE_PATH="text_classification"
MAIN_TRAINER_MODULE=text_classification.train
REGION=us-central1
RUNTIME_VERSION=1.13
PYTHON_VERSION=3.5
scaleTier: CUSTOM
# Configure a master worker with 4 K80 GPUs
masterType: complex_model_m_gpu
# Configure 9 workers, each with 4 K80 GPUs
workerCount: 9
workerType: complex_model_m_gpu
# Configure 3 parameter servers with no GPUs
parameterServerCount: 3
parameterServerType: large_model
提交代码后,您可以使用以下屏幕快照中显示的命令检查作业状态:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IIC6ydkS-1681704554584)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/handson-ai-gcp/img/48245dc2-0b6a-466c-b5af-3a7e2690b823.png)]
如以下屏幕截图所示,这是驱动 Cloud ML GPU 日志的外观:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MpuG4RUN-1681704554585)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/handson-ai-gcp/img/824f979e-da71-4e28-803c-461931247dc4.png)]
在本部分中,我们了解了如何使用 Google Cloud AI 平台进行 XGBoost 模型训练。 部署代码和使用 GCP 强大的并行计算的步骤很重要。 尝试在您的工作环境中执行此处演示的每个步骤。
将模型存储在 Google Cloud Storage 中之后,需要以正确的格式放置数据以进行预测。 它必须是向量格式且非稀疏。 这意味着您必须具有不包含零值的向量。 如果该值为 0,则必须将其表示为 0.0。 让我们看下面的例子:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kSbB1Cc4-1681704554585)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/handson-ai-gcp/img/ceb09470-d51d-44ec-ae76-8b0a264e368f.png)]
执行以下步骤以使用 XGBoost 训练的模型:
console.google.com
。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-a61lujdR-1681704554590)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/handson-ai-gcp/img/21248a2d-e7a3-4dcc-8795-e5a358949a07.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-awOkcWrf-1681704554591)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/handson-ai-gcp/img/21dfb87a-b598-45c5-950b-55afbaa7678e.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pxZjDuXs-1681704554591)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/handson-ai-gcp/img/5c2d34fc-ac95-416e-aebd-51a13486d90d.png)]
现在,您可以运行以下 Python 程序来调用云机器学习 API:
import googleapiclient.discovery
def predict_json(project, model, instances, version=None):
"""Send json data to a deployed model for prediction.
Args:
project (str): project where the AI Platform Model is deployed.
model (str): model name.
instances ([[float]]): List of input instances, where each input
instance is a list of floats.
version: str, version of the model to target.
Returns:
Mapping[str: any]: dictionary of prediction results defined by the
model.
# Create the AI Platform service object.
# To authenticate set the environment variable
# GOOGLE_APPLICATION_CREDENTIALS=<path_to_service_account_file>
service = googleapiclient.discovery.build('ml', 'v1')
name = 'projects/{}/models/{}'.format(project, model)
if version is not None:
name += '/versions/{}'.format(version)
response = service.projects().predict(
name=name,
body={'instances': instances}
).execute()
if 'error' in response:
raise RuntimeError(response['error'])
return response['predictions']
前面的代码是客户端机器学习 Python 代码,并利用了通过 Google Cloud AI 平台部署的模型。 它以 JSON 作为输入并提供预测的输出。 在下一节中,我们将看到如何使用 XGBoost 库构建推荐系统。
您可以在 这个页面 上找到 Python 客户端库的详细信息。
现代互联网零售客户要求个性化产品。 这提高了他们的满意度,因此也增加了电子零售商的收入。 这就是为什么推荐系统已经使用了很多年的原因。 当前的推荐系统所提供的结果主要包括普通产品。 但是,分销商想要的方案也建议不常见的商品,因为在这个漫长的尾巴中,它们仍占零售商销售的很大份额。 亚马逊的推荐系统享有盛誉。 它提出了其他产品,通常与消费者目前正在观看的商品相关。 如果他们不完全了解他们要寻找的内容,建议的系统还可以帮助客户找到产品或访问 Netflix 和 YouTube 时的视频。 它们通常基于称为协同过滤的技术。 通过使用这种方法收集许多用户的偏好来生成用户选择的预测。 假设,如果用户具有等效首选项的子集,则其他不可见产品的等效首选项更有可能出现。
与具有相应历史记录的用户相比,集体过滤仅依赖于用户历史记录。 换句话说,零售商对所提建议的影响有限,强烈建议将其用于普通产品。 对于许多在线公司而言,这是不必要的,因为他们的大部分收入仍然来自知名度较低的产品的长尾巴。 因此,对于公司而言,找到一种能够鼓励少见的普通产品和著名产品的算法至关重要。 为了开发一种平衡的项目推荐系统,将零售商最畅销产品清单中最著名的产品与较不常见的产品结合在一起,建议使用基于树的梯度提升算法 XGBoost。 使用开源 XGBoost 软件库,梯度提升树学习可以成为平衡产品建议的正确方法。
由于推荐系统的长期使用,已经建立了几种推荐算法。 文献表明,最有前途的算法类别包括基于模型的算法。 针对用户-项目关系,交互信息以及用户和项目特征调整了几种机器学习方法。 决策树学习在先前的研究中非常成功。 在该技术中,决策树用于使用标注来预测对象的目标值。 梯度提升方法允许顺序添加模型以纠正先前模型的误差,直到可以进行进一步的改进为止。 结合起来,将创建目标值的最终预测。 更具体地说,建议某个用户购买物品的可能性。
为了进一步说明这一点,让我们以用户项目矩阵为例:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MYQVeTmi-1681704554591)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/handson-ai-gcp/img/e6c8acfb-13ae-4537-88c1-af8c800b0746.png)]
在此用户项目矩阵中,行代表用户,每一列都是项目,每个单元格都是用户评分。 共有
j + 1
个用户和
n + 1
个项目。 在此,
A[jn]
是
i[n]
的用户
u[j]
分数。
A[jn]
可以在 1 到 5 之间。有时,如果矩阵是用户
u[i]
是否查看对象
i[n]
,
A[jn]
也可以是二进制的。 在这种情况下,
A[jn]
为 0 或 1。在我们的情况下,我们将
A[jn]
视为 1 到 5 分 。 该矩阵是非常稀疏的矩阵,这意味着其中的许多单元都是空的。
由于项目很多,因此单个用户不可能对所有项目进行评分。 在实际情况下,单个用户甚至不会给最低的项目评分。 这就是为什么此矩阵中约有 99% 的单元空着。 空单元格可以表示为
非数字
(
NaN
)。 例如,假设
n
为 1000 万,
m
为 20,000。 因此
n * m
为
20 ^ 10M
,这是一个非常大的数字。 如果用户平均给 5 项评分,则评分总数为
5 * 10M = 5 * 10⁶
。 这被称为矩阵的
稀疏度
。 矩阵稀疏度的公式如下:
矩阵的稀疏度 = 空单元数 / 单元总数
。
因此,矩阵的稀疏度为
(10^10 - 5 * 10^6) / 10^10 = 0.9995
。 这意味着 99.95% 的单元格为空。 这是极其稀疏的。
由于稀疏度为 99.95%,因此标准推荐系统可能会考虑有利可图但未由特定用户评级的线下项目。 因此,XGBoost 算法将派上用场。
让我们使用 XGBoost 创建一个推荐系统。
这个页面
上的代码表示如何使用 XGBoost 构建推荐系统模型。 它基于用户电影评级数据集。 我们将利用 RAPIDS 包进行此实现。 我们将使用
conda
安装运行时库,安装包,并使用图形库表示结果。
下表包含
users.csv
的示例数据:
这些样本文件可用于使用 XGBoost 算法训练和评估模型。 使用非常大的数据集进行训练时,可以显着提高性能。
树增强是一种非常有效的,广泛使用的机器学习技术。 在本章中,我们定义了一种称为 XGBoost 的可伸缩端到端树提升方案,数据研究人员广泛使用该方案来获取有关许多机器学习问题的最新成果。 我们提出了一种用于稀疏数据的新颖算法和一种用于近似树学习的加权分位数草图。 XGBoost 使用比当前系统少得多的资源来扩展数十亿个示例。 在本章中,我们介绍了不同的代码示例,到目前为止,您知道如何使用 Google Cloud AI Platform 提交模型并将这些模型用于预测。
在下一章中,我们将演示使用流组件对运动中的数据执行分析。
在上一章中,我们了解了机器学习中最流行,最方便的算法之一。 在本章中,我们将了解 Google 云平台 ( GCP )如何使通过 AutoML 服务轻松使用各种机器学习模型成为可能。 AutoML 使开发人员和分析人员在数据工程和机器学习编程方面经验有限的情况下,可以轻松构建机器学习模型。 我们将对 AutoML 采取一种实际的方法,并学习如何利用它来构建和部署一些实际用例的模型,例如文档和图像分类,语音到文本转换以及情感分析。
本章将涵盖以下主题:
有监督的机器学习模型遵循一致的生命周期。 监督学习取决于历史数据。 基于历史数据,对模型进行训练。 模型训练只是建立一个假设函数,该函数能够根据输入或自变量预测输出或因变量。 例如,在零售商店的销售预测模型的情况下,历史销售数据用于训练。 数据可以横向分布在影响销售的众多因素中。 训练数据被随机分为训练数据集和评估数据集。 通常,训练数据和评估数据之间分别有 80-20 的比例。
基于所选算法对模型进行训练,然后将其用于基于评估数据集评估准确率。 调整训练参数可提高模型的准确率和表现。 一旦模型在各种评估样本中都能很好地运行,就可以在实际环境中进行部署和使用了。 在此阶段,模型遇到了全新的数据集,而在训练过程中可能看不到。 在这里,将假设函数的泛化用于预测。 下图描述了通用的监督学习过程:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XnaLrO4H-1681704554591)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/handson-ai-gcp/img/c69728db-5a8f-4992-8458-ad44643927c7.png)]
传统上,在非云环境中,此过程需要由数据科学家完全管理。 GCP Cloud AutoML 是一个完全托管的环境,负责所有操作流程,基础架构和模型管理。 GCP Cloud AutoML 为与 自然语言处理 ( NLP )和 计算机视觉 ( CV )相关的模型提供了接口。 在本章中,我们将通过利用 NLP 和 CV 接口的示例用例深入探讨 GCP Cloud AutoML。 Cloud AutoML 的优点如下:
通过在机器学习模型的训练,评估和部署上创建高层抽象,AutoML 简化了有监督的学习过程。 下图显示了 AutoML 的工作原理:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SxNaf3jv-1681704554592)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/handson-ai-gcp/img/9c42fb70-3854-4a1f-8ddb-5c46ff5b5bda.png)]
将 AutoML 与传统的有监督的学习管道进行比较,显而易见:
但是,REST API 用于训练,评估和利用机器学习模型。 这是 AutoML 支持的通用和代表性 API 端点的快速概述。
RESTful API 被基于 GCP 的 AI 应用用来调用 AutoML 服务。 用户界面通常用于概念验证,但是企业应用需要一组丰富的 API 库才能与诸如 AutoML 之类的组件进行交互。 在本节中,我们将介绍一组代表性的 API 和这些 RESTful API 中的重要字段。
让我们看一下与
v1beta1.projects.locations.models
中的模型进行交互的 API 端点。
在下表中,我们列出了通过模型位置 API 进行的一些基本方法调用。 调用应用需要将适当的参数传递给 API 端点,以创建和删除模型并将其用于预测:
"updateTime": string, "deploymentState": enum(DeploymentState), // Union field model_metadata can be only one of the following: "imageClassificationModelMetadata": { object(ImageClassificationModelMetadata) "textClassificationModelMetadata": { object(TextClassificationModelMetadata) "translationModelMetadata": { object(TranslationModelMetadata) // End of list of possible types for union field model_metadata.让我们看一下前面代码中的字段描述:
name
:这是一个仅输出的字段,代表模型的资源名称。 该字段的输出格式为
projects/{project_id}/locations/{locationId}/models/{modelId}
。
displayName
:此字段是 GCP Web 界面中显示的模型的名称。 名称可以由用户选择。 管理此字段名称的规则如下:
A-Z
和
a-z
:
_
)
0-9
datasetId
:此字段指向用于创建模型的数据集的资源 ID。 数据集必须属于相同的祖先项目和位置。
createTime
/
updateTime
:这是创建/更新模型时的日期时间戳。 GCP 使用具有纳秒精度的 RFC3339 UTC 格式,例如
2019-03-05T15:01:23.045123456Z
。
deploymentState
:这是模型的当前状态。 GCP 平台上模型的可能状态如下:
DEPLOYMENT_STATE_UNSPECIFIED
:不应使用。
DEPLOYED
:已部署模型。
UNDEPLOYED
:未部署模型。
imageClassificationModelMetadata
,
textClassificationModelMetadata
和
translationModelMetadata
分别用于图像,文本和翻译模型。 我们将在本章的后续部分中对此进行解释。
这是用于模型评估的 REST 源 API:
v1beta1.projects.locations.models.modelEvaluations
。
这是获取和列出模型评估的方法调用:
可以使用简单的 API 列出模型评估参数,并且可以将其用于调用应用中的迭代模型改进。
以下 API 使应用能够在运行时分析模型操作。 在某些情况下,由于数据量和模型复杂性,模型训练和评估需要更长的时间。 这些操作调用帮助应用向最终用户报告模型训练和评估的状态。
下表列出了
v1beta1.projects.locations.operations
API:
请注意,对于操作 API 的请求是异步的,并且对于调用应用是非阻塞的。 这些对于调用应用以报告模型训练和评估的进度很有用。
文档分类是一个非常重要的用例,主要用于分析文档或大量文档(例如法律文档)的内容。 有时,手动分类需要付出很多努力,而且可能不可行。 GCP 提供了易于使用的自然语言界面,可以对其进行自定义训练,以基于 AutoML 进行文档分类。 让我们了解一个包含 20 个新闻组的公共可用数据集的分类过程。 该数据集可从 这里 下载。 这是大约 20,000 个新闻组文档的集合,平均分布在 20 个不同的新闻组中。 这些新闻组对应于不同的主题。 目标是根据训练数据训练模型,评估模型,最后将其用于文档分类。
文档分类过程遵循一组标准步骤。 在训练分类模型之前,需要对文档内容进行分类,以确保分类的准确率。 下图显示了以传统方式使用机器学习进行文档分类的整个过程:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BWl1owEF-1681704554592)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/handson-ai-gcp/img/a32099b6-e9a6-4aba-9270-6f65805f0174.png)]
与该图所示的方法不同,AutoML 简化了文档分类的流程。
在本节中,我们将研究 GCP 中的 AutoML 接口,以使用 AutoML 进行文档分类。
使用您的 GCP 凭据登录 这里 。 在导航菜单上,转到 人工智能 部分,然后单击 自然语言 子菜单:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-stBrXfw8-1681704554592)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/handson-ai-gcp/img/a37f110b-50d1-4d31-b944-8bba7360b23b.png)]
AutoML 自然语言使上传数据集和训练模型变得容易。 在我们的示例中,数据集是新闻组文档的集合。
要创建新数据集,请单击标题栏中的“新建数据集”按钮:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5hGYxXoR-1681704554592)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/handson-ai-gcp/img/bfa2627d-dba8-46fb-8cc1-13d9e3b5f2b8.png)]
为数据集提供唯一的名称(在这种情况下为
newsgroups
)。 GCP 提供以下用于上传数据集的选项:
创建数据集后,可以从 Google Cloud Storage URI 和本地驱动器导入其他项目。
可以通过在上传到数据集的 CSV 文件中包含标签并使用 AutoML Natural Language UI 来为文本文档添加标签来标记训练数据:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XgHpSdGn-1681704554593)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/handson-ai-gcp/img/f75404cd-1e3e-4573-85b2-d3e611f310a5.png)]
创建标记的训练数据集时,请考虑以下提示:
None_of_the_above
或等效标签。 这将提高模型的准确率,而不是贴错标签或保留空白标签。
创建数据集并对其进行完全标记后,即可对模型进行训练。 单击 TRAIN NEW MODEL 按钮,通过提供模型名称来启动异步训练过程。 模型名称最多可以包含 32 个字符,并且可以包含字母,数字和下划线。 模型训练所需的时间取决于训练数据的数量和变化。 训练模型可能需要几分钟到几个小时。 一旦模型训练完成,就会向已注册的电子邮件 ID 发送电子邮件通知。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0gUFN4rP-1681704554593)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/handson-ai-gcp/img/4dd42840-8f39-44ed-a8e7-6f794d281578.png)]
如下面的屏幕快照所示,模型经过训练后,将显示模型属性(例如,模型创建时的日期时间和训练数据的定量性质)以及质量参数(例如 精度 和 召回 ):
与传统的机器学习管道不同,在传统的机器学习管道中,我们需要在评估数据集上评估模型,而 GCP 在内部使用测试集中的项目评估模型。 在此阶段检查模型的质量和准确率。 AutoML 提供了两个级别的聚合质量指标,这些指标指示模型在所有特征和标签以及每个类别标签上的总体训练水平。 GCP 报告了以下指标:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-daHqAgFD-1681704554593)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/handson-ai-gcp/img/2cae7202-abc4-4883-a7d4-2df1aa00a08f.jpg)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-O9kqPmko-1681704554593)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/handson-ai-gcp/img/ed22a0f3-f156-4e92-bf09-6b3e75eba16f.png)]
这些易于使用的 AutoML 度量标准可用于评估模型的可靠性,从而预测实际数据集上的输出类别。 如果混乱程度很高,而准确率和召回率得分很低,则该模型可能需要其他训练数据。
除了用于模型评估的 Web 界面之外,GCP 还提供了一个可编程的 API 接口,用于使用命令行,Python,Java 和 Node.js 进行评估。
使用以下命令通过将
model-name
替换为实际模型名称来获取 JSON 格式的模型评估参数:
public static void autoMLModelEvaluation(
String projectId, String computeRegion, String modelId, String filter) throws IOException {
// Instantiates a client
AutoMlClient client = AutoMlClient.create();
// Get the full path of the model.
ModelName modelFullId = ModelName.of(projectId, computeRegion, modelId);
// List all the model evaluations in the model by applying filter
ListModelEvaluationsRequest modelEvaluationsrequest = ListModelEvaluationsRequest.newBuilder()
.setParent(modelFullId.toString())
.setFilter(filter)
.build();
// Iterate through the results.
String modelEvaluationId = "";
for (ModelEvaluation element : client.listModelEvaluations(modelEvaluationsrequest).iterateAll()) {
if (element.getAnnotationSpecId() != null) {
modelEvaluationId = element.getName().split("/")[element.getName().split("/").length - 1];
// Resource name for the model evaluation.
ModelEvaluationName modelEvaluationFullId =
ModelEvaluationName.of(projectId, computeRegion, modelId, modelEvaluationId);
// Get a model evaluation.
ModelEvaluation modelEvaluation = client.getModelEvaluation(modelEvaluationFullId);
ClassificationEvaluationMetrics classMetrics = modelEvaluation.getClassificationEvaluationMetrics();
List<ConfidenceMetricsEntry> confidenceMetricsEntries = classMetrics.getConfidenceMetricsEntryList();
// Iterate over the list and get individual evaluation parameters.
const automl = require(`@google-cloud/automl`);
const util = require(`util`);
const client = new automl.v1beta1.AutoMlClient();
const projectId = `PROJECT_ID`;
const computeRegion = `REGION_NAME`;
const modelId = `MODEL_ID`;
const modelEvaluationId = `MODEL_EVAL_ID`;
// Get the full path of the model evaluation.
const modelEvaluationFullId = client.modelEvaluationPath(
projectId,
computeRegion,
modelId,
modelEvaluationId
// Get complete detail of the model evaluation.
const [response] = await client.getModelEvaluation({
name: modelEvaluationFullId,
console.log(util.inspect(response, false, null));
可以使用此代码段开发无阻塞的异步微服务,该代码段可以使用评估参数响应调用的应用。
建立并评估模型后,GCP 将提供一个简单的界面,用于使用模型进行预测。 在这种情况下,该模型已准备好根据输入数据中的关键字对各种类别的文档进行分类。
GCP 提供了用于快速测试模型的 Web 界面和 REST API,可在生产环境中用于文档分类:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-l3ZHwtZn-1681704554594)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/handson-ai-gcp/img/521bc622-f189-4187-aeb3-2ed584f5b9e7.jpg)]
在这种情况下,模型已基于在文本区域中输入的文本,以 100% 的置信度预测文档与 计算机图形学 相关。
我们可以使用一个简单的 REST API 来使用已部署的模型进行预测:
export GOOGLE_APPLICATION_CREDENTIALS=key-file-path
curl -X POST
-H "Authorization: Bearer $(gcloud auth application-default print-access-token)"
-H "Content-Type: application/json"
https://automl.googleapis.com/v1beta1/projects/ai-gcp-ch4/locations/us-central1/models/TCN2853684430635363573:predict
-d '{
"payload" : {
"textSnippet": {
"content": "YOUR TEXT HERE",
"mime_type": "text/plain"
from google.cloud import automl_v1beta1
from google.cloud.automl_v1beta1.proto
import service_pb2
def get_prediction(content, project_id, model_id):
prediction_client = automl_v1beta1.PredictionServiceClient()
name = 'projects/{}/locations/us-central1/models/{}'.format(project_id, model_id)
payload = {'text_snippet': {'content': content, 'mime_type': 'text/plain' }}
params = {}
request = prediction_client.predict(name, payload, params)
return request # waits till request is returned
if __name__ == '__main__':
content = sys.argv[1]
project_id = sys.argv[2]
model_id = sys.argv[3]
print get_prediction(content, project_id, model_id)
用
python document_classifier.py "Document Text" <<project_id>> <<model_id>>
调用文档分类器 API。 通过传递项目 ID 和已部署的模型 ID,可以使用此命令执行 Python 代码。
GCP 提供了 Vision API,可用于以可视输入(图像和视频)的形式为非结构化数据构建智能应用,并可通过 Web 控制台和 API 进行访问。
GCP 上的图像分类过程遵循与 AutoML 文档分类中的文档分类过程相似的步骤。 以下是图像分类中涉及的步骤:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6xAL5FAO-1681704554594)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/handson-ai-gcp/img/78dfdef3-a0db-49ad-a59c-1da84323a388.png)]
假设您已经知道如何设置 Google 帐户并创建了 GCP 项目。 让我们从 收集训练图像 步骤中逐步进行图像分类的步骤。
AutoML Vision API 使用监督学习模型,因此需要训练图像的集合。 这些是用于训练目的的预先标记图像。 图像中可以包含一个或多个对象,并且需要以样本为基础定义和验证各个输出标签以确保准确率。 我们需要建立一个数据集来训练图像分类模型。
第一步,我们需要为图像创建一个占位符,以用于训练和评估模型。 创建数据集时,我们需要将分类类型称为多类或多标签。 在多分类器的情况下,将单个标签分配给每个分类的文档,而多标签分类器可以将多个标签分配给一个文档。
Web 界面提供了创建数据集的直观方法:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-af84lDqv-1681704554594)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/handson-ai-gcp/img/ca52c5db-7f72-4305-922f-4e5555897287.png)]
也可以将图像导入推迟到以后,并且可以将其中没有任何图像的数据集创建为占位符。 可以通过选中 启用多标签分类 复选框来指定分类类型。 默认分类类型是多分类。
我们将利用 Cloud Storage 上载图像并创建一个 CSV 文件来标记图像文件的内容。 我们将创建一个 Google Cloud Storage 存储桶,并存储将用于训练自定义模型的文档。 使用 Google Cloud Shell 中的以下命令创建 Cloud Storage 存储桶:
gs://ai-gcp-ch4-vcm/https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/handson-ai-gcp/img/flower_photos/roses/15674450867_0ced942941_n.jpg,roses
gs://ai-gcp-ch4-vcm/https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/handson-ai-gcp/img/flower_photos/daisy/1031799732_e7f4008c03.jpg,daisy
在此示例中,第一个图像包含玫瑰,第二个图像包含雏菊花。 让我们将图像和标签导入数据集中:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-O4xMR4tJ-1681704554594)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/handson-ai-gcp/img/147a9711-2f26-412c-9cec-1e9cba763071.png)]
CSV 文件中列出的图像以及存储在存储桶中的图像将被加载到数据集中并在此步骤中进行标记。 至此,我们的数据集已准备好训练分类模型。 这是 AutoML Vision 界面中带标签的数据集的快照:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ocICGdom-1681704554594)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/handson-ai-gcp/img/ef973245-1151-4bd9-afd2-5c2e77fd2708.png)]
我们的数据集包含分布在五个标签中的 3,665 个标签图像。 Web 界面允许修改标签并根据需要删除图像。 也可以通过使用 REST API 和命令行界面来填充带有标签图像的数据集,并且可以通过实用地调用它。
这是可用于调用 API 的 HTTP POST URL。 (在此 URL 字符串中替换
Project_ID
,
Region
和
datasetId
):
curl -X POST \
-H "Authorization: Bearer "$(gcloud auth application-default print-access-token) \
-H "Content-Type: application/json; charset=utf-8" \
-d @import_images_request.json \
https://automl.googleapis.com/v1beta1/projects/ai-gcp-ch4/locations/us-central1/datasets/ICN7902227254662260284:importData
project_id = 'ai-gcp-ch4'
compute_region = 'us-central1'
dataset_id = 'ICN7902227254662260284'
paths = 'gs://ai-gcp-ch4-vcm/https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/handson-ai-gcp/img/flower_photos/all_data_updated.csv'
from google.cloud import automl_v1beta1 as automl
client = automl.AutoMlClient()
dataset_full_id = client.dataset_path(project_id, compute_region, dataset_id)
input_config = {'gcs_source': {'input_uris': paths}}
response = client.import_data(dataset_full_id, input_config)
print('Processing import...')
print('Data imported. {}'.format(response.result()))
将图像加载到数据集中后,下一步就是训练分类模型。
GCP AutoML 抽象了实际模型训练的复杂性,并从数据集中的图像创建了三个唯一的集合。 80% 的图像被随机标记为训练集,而 10% 的图像分别用于评估和测试集。 一个简单的界面启动分类模型训练过程:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4NwwpCXU-1681704554595)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/handson-ai-gcp/img/9b25d279-9372-4f17-bf75-86deca5f972b.png)]
根据训练图像的数量,标签的数量以及分配的计算资源,模型训练最多可能需要 15 分钟或几个小时。 该过程是异步的,一旦模型训练完成,便会触发电子邮件。 模型训练也可以通过命令行和实用地调用 API 来完成。
这是训练模型的
POST
请求(为
Project_ID
,
Region
,
datasetId
和
displayName
使用适当的参数;
displayName
是模型的名称,可由用户选择) ):
该代码可用于通过应用边界调用 API,并且需要认证密钥才能访问服务。
在本章中,我们了解了 GCP 如何通过 Web 界面和 API 轻松构建,部署和使用机器学习模型。 我们已经根据一些最常见的用例展示了该平台的易用性和可伸缩性。 可以以安全的方式公开 API 层,并且可以基于新的和标记的数据集不断升级模型。
在下一章中,我们将了解如何构建基于云的机器学习引擎,并逐步介绍在生产环境中将机器学习即服务应用于服务的分步过程。
机器学习 ( ML )通过实现 人工智能 ( AI )彻底改变了技术领域。 在客户支持,欺诈检测和商业智能领域,ML 一直成为企业的最爱。 ML 的重要性也影响着云计算领域。 因此,包括谷歌在内的每个云提供商都在革新其平台上的 AI 服务方面发挥着重要作用。 从新服务的开发到大型重组(在战略上将 AI 定位于其组织结构及其发展中)的重大重组中,他们在过去几年进行了大量投资。
与其他基于云的本机服务相比,云上的 ML 和 AI 平台具有各种交付模型,例如语音重组,视频分析,其他形式的认知计算,ML 自动化,ML 模型管理,ML 模型服务和 GPU- 基于计算。
在本章中,我们将研究 ML 的各种元素,包括 Google Cloud ML 以及如何使用 Google Cloud 的机器学习引擎。 Cloud Machine Learning Engine 也称为 Cloud AI Platform。 因此,让我们从了解云中的 ML 开始。
本章将涵盖以下主题:
几年来,人们一直在谈论 ML,好像它有望带来可影响人类生存各个方面的巨大优势。 还已努力将 ML 开发到不需要人类参与的程度。 在 AI 阶段可以看到 ML 的光明前景,该阶段利用 ML 模型并使他们从观察中学习。 需要大量处理能力和存储空间才能正确评估所有适当信息,以在 AI 系统中获得准确的 ML 结果。 希望将 ML 技术用于预测分析的公司必须在软件和硬件方面节省大量资金。 由于云已经改变了一切,因此情况不再如此。 在当今的大数据时代,云消除了对完全拥有物理硬件和软件的需求。 许多公司可以轻松地对数据进行智能分析,因为这些复杂的系统可以在云中租用。 只要他们可以访问 ML 的云,任何人都可以最大程度地使用该技术。
要构建 ML 解决方案,您不需要云提供商。 有现成的开源学习框架,例如 TensorFlow,MXNet 和 CNTK,这些框架允许企业在其硬件上进行操作并帮助他们构建 ML 模型。 但是,内部开发的高级 ML 模型会遇到准确率问题。 这是因为对实际大数据模型的训练通常涉及具有巨大计算和存储容量的大型集群。 在将 ML 技能引入业务应用中的许多方面,进入的障碍很大。 构造,训练和实现 ML 模型以及计算和硬件规范所需的专业知识,将导致更大的人工,生产和基础架构支出。 这些问题可以通过云计算解决,因为主要的公共云平台旨在使企业能够利用 ML 技能来解决业务问题,而不会带来任何技术负担。 总而言之,以下是在云上使用 ML 的一些优点:
在下一节中,我们将专门研究 Google Cloud Platform 的 AI 平台产品以及如何使用它。 我们还将简要介绍 Google Cloud 提供的某些 ML 服务。
Cloud Machine Learning Engine 是一项由 Google Cloud 管理的服务,可让开发人员和信息研究人员为 ML 构建,操作和产生更好的模型。 Cloud ML Engine(或 AI 平台)提供可以单独使用或一起使用的训练和预测服务。 训练和预测服务现在称为 ML Engine 中的 AI 平台训练 和 AI 平台预测 。 下图表示 Google Cloud AI 平台:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RRzxieEP-1681704554597)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/handson-ai-gcp/img/904061da-2223-483a-b6f2-8017c6bb1d90.png)]
三个步骤使用 Cloud AI Platform。 如上图所示,您可以使用 Google AI Platform Notebooks,Google Cloud Machine Learning 模型训练以及 Google Cloud AI Platform Prediction 服务来构建项目。 在本章中,我们将介绍如何利用 Google AI Platform Notebooks。 我们在“第 8 章”,“使用 Cloud ML Engine 实现 TensorFlow 模型”和“第 9 章”,“构建预测应用”中介绍了 Google Cloud Machine Learning 模型的训练和预测服务。
AI 平台笔记本 是一项托管服务,可提供嵌入式 JupyterLab 环境,设计人员和信息研究人员只需单击一下最新信息研究和 ML 框架,即可构建 JupyterLab 案例。 BigQuery,Cloud Dataproc 和 Cloud Dataflow 集成在笔记本中。 这使得处理和预处理信息易于实现。 最终,这会导致建模,训练和实现方面的信息获取更为简单。 一键部署新的 JupyterLab 案例,即可立即分析您的信息。 每个示例都预先配置了最常见的数据科学和 ML 库的优化变体。 JupyterLab 接口利用笔记本电脑,并预先安装了优化的库变体,例如 TensorFlow,PyTorch,sci-kit-learn,pandas, SciPy 和 Matplotlib 。 通过添加 CPU , RAM 和 GPU ,您可以从小处着手,然后进行扩展。 如果您的信息对于一台计算机而言太大,则可以无缝迁移到 BigQuery,Cloud Dataproc,Cloud Dataflow 和 AI Platform 预测训练等服务。
Google AI 平台笔记本为您节省了创建专门用于运行深度学习算法的计算实例的麻烦。 Google Cloud AI Platform 提供了深度学习虚拟机,这些虚拟机提供经过验证,优化和测试的操作系统映像,从而省去了为深度学习算法构建和配置计算实例的麻烦。 AI 深度学习 VM 映像平台是一系列 VM 映像,这些映像已通过基于 Debian9 的 Compute Engine 针对数据科学和 ML 进行了优化。 所有映像都预装了主要的 ML 框架和仪器,并且可以在 GPU 盒的盒子外面使用,以加快信息处理的速度。 Google Cloud AI Platform 的深度学习 VM 映像是预打包的虚拟机图片的集合,这些图片提供了深刻的,随时可运行的 ML 平台结构。
深度学习 VM 图片通过预配置依赖项,重要仪器的预安装和性能优化来帮助您为深度学习模型营造氛围。 关于 Google 平台深度学习映像,您需要注意三个重要概念。 让我们来看看。
第一个概念称为 映像系列 。 映像族是为特定目的或特定架构预先配置的一系列映像。 Google 云端提供了各种深度学习 VM 映像族。 每个映像系列都特定于某个 ML 框架。 Google 云提供的一些映像系列示例如下:
第二个概念称为映像。 映像是虚拟机的单个蓝图。 深度学习 VM 图片是由公共计算引擎预先配置的虚拟机图片。 映像类型有两种,如下所示:
您可以免费使用大多数公共映像,但也可以在项目中添加一些高级映像。 您无需为 Compute Engine 的自定义图片付费,但在维护项目中的自定义图片时会产生存储费。
第三个概念称为实例。 实例是承载 Google 基础架构的虚拟机。 预先配置的深度学习 VM 映像之一基于深度学习 VM 实例。 使用 Google Cloud Platform 控制台或命令行工具,可以生成带有映像的实例。
深度学习映像始终是使用 Google AI 平台笔记本的第一步。 如果不选择这些深度学习映像,您将无法启动这些笔记本。 在下一节中,我们将研究如何启动和运行这些笔记本。
让我们首先创建一个 Google Platform AI Notebook,如下所示:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-H36wyBBK-1681704554597)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/handson-ai-gcp/img/8e3a1c74-0a7b-4260-bff9-a06ddf3c2312.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pP0ma4BX-1681704554597)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/handson-ai-gcp/img/6df5b597-788d-48ac-a292-ff9badf2bc9b.png)]
CUSTOMIZE
选项,如下所示:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Aoq3pySY-1681704554598)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/handson-ai-gcp/img/bf1ce720-8d92-4af3-b5b4-8ae200ea94a5.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5VmBuWUP-1681704554598)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/handson-ai-gcp/img/64406690-0770-42e4-bb40-79a8119d98e1.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-twawzRa3-1681704554598)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/handson-ai-gcp/img/e3985fb4-6296-488d-957d-ba09a18c2128.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zEuxkUfE-1681704554598)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/handson-ai-gcp/img/5a3bce2f-d887-4e34-8866-d584690ff270.png)]
http://localhost:8080/lab?
才能获得此信息:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-INOzZzx1-1681704554599)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/handson-ai-gcp/img/a6afdf88-8c4d-45e3-8fca-91c71de76247.png)]
您还可以使用以下 shell 脚本自动执行此操作:
curl \ -X POST \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ -H "Content-Type: application/json" \ https://automl.googleapis.com/v1beta1/projects/ai-gcp-ch4/locations/us-central1/models \ -d '{ "datasetId": "ICN7902227254662260284", "displayName": "aigcpch4-image-clasification-model", "image_object_detection_model_metadata": { "model_type": "cloud-low-latency-1"IMAGE=--image-family=tf-latest-cpu INSTANCE_NAME=dlvm GCP_LOGIN_NAME=<proxy@gmail.com> # CHANGE THIS gcloud config set compute/zone us-central1-a # CHANGE THIS echo "Launching $INSTANCE_NAME" gcloud compute instances create ${INSTANCE_NAME} \ --machine-type=n1-standard-2 \ --scopes=https://www.googleapis.com/auth/cloud-platform,https://www.googleapis.com/auth/userinfo.email \ ${IMAGE} \ --image-project=deeplearning-platform-release \ --boot-disk-device-name=${INSTANCE_NAME} \ --metadata="proxy-user-mail=${GCP_LOGIN_NAME}" echo "Looking for Jupyter URL on $INSTANCE_NAME" while true; do proxy=$(gcloud compute instances describe ${INSTANCE_NAME} 2> /dev/null | grep dot-datalab-vm) if [ -z "$proxy" ] echo -n "." sleep 1 echo "done!" echo "$proxy" breakproject_id = 'ai-gcp-ch4' compute_region = 'us-central1' dataset_id = 'ICN7902227254662260284' model_name = 'aigcpch4-image-clasification-model' from google.cloud import automl_v1beta1 as automl client = automl.AutoMlClient() project_location = client.location_path(project_id, compute_region) my_model = { 'display_name': model_name, 'dataset_id': dataset_id, 'image_object_detection_model_metadata': { "model_type": "cloud-low-latency-1" response = client.create_model(project_location, my_model) print('Training image object detection model...')
模型训练完成后,该模型将在 AutoML Vision Web 界面的“模型”部分列出:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MwQYNp2Z-1681704554595)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/handson-ai-gcp/img/ee62778d-6c02-474e-8332-0962a9e81ea5.png)]
下一步是评估模型的准确率。 可在 Web 界面的
EVALUATE
选项卡下获得评估统计信息。使用训练集对模型进行训练后,评估集将用于模型评估。 评估结果位于“评估”选项卡中,并显示“平均精度”,“精度”和“调用率”。 这是用于评估模型的 Web 界面的屏幕截图:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Wmf9OMDf-1681704554595)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/handson-ai-gcp/img/2cf2f943-4475-4926-8674-1a48cf35dd9f.png)]
如屏幕截图所示,我们在用户界面上获得了模型评估指标。 我们得到以下重要的模型训练参数:
平均精度:这可衡量所有得分阈值上的模型表现。 精度:这是对阳性指示正确比例的度量。 在数学上,精度定义为 Pred = TP / (TP + FP)
。 真实肯定代表模型正确预测肯定类别的结果。 假阳性表示模型错误地预测阳性类别的结果。召回:这是对正确识别的实际阳性比例的度量。 在数学上,召回率定义为 Recall = TP / (TP + FN)
。 假阴性表示模型错误地预测阴性类别的结果。可以同时使用精度和召回措施对模型进行全面评估,因此平均精度对于理解模型的有效性非常重要。 AutoML 提供了所有标签上模型参数的合并视图以及特定标签的参数值:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zB35yVpq-1681704554595)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/handson-ai-gcp/img/6095faf5-6333-48a6-be44-28402a307d68.jpg)]
可以使用 REST API 评估模型,可以通过命令行以及实用地调用 REST API。
这是用于从 GCP AutoML 上部署的模型中获取模型评估的命令:
curl -X GET \ -H "Authorization: Bearer "$(gcloud auth application-default print-access-token) \ https://automl.googleapis.com/v1beta1/projects/ai-gcp-ch4/locations/us-central1/models/ICN7883804797052012134/modelEvaluations
project_id = 'ai-gcp-ch4' compute_region = 'us-central1' model_id = 'ICN7883804797052012134' filter_ = '' from google.cloud import automl_v1beta1 as automl client = automl.AutoMlClient() model_full_id = client.model_path(project_id, compute_region, model_id) response = client.list_model_evaluations(model_full_id, filter_) print('List of model evaluations:') for element in response: print(element)
一旦建立了模型并评估了阈值准确率,就可以使用一组新图像来测试模型了。
GCP AutoML 提供了一个简单的界面来测试模型。 可以从 Web UI 上载新图像,并根据部署的模型进行测试。 这是 Web UI 的屏幕截图,展示了所需的步骤:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-U4a3tyCN-1681704554595)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/handson-ai-gcp/img/1af6ff98-3cf9-48c0-99ca-b431e6eb0d1a.png)]
还可以通过 REST API 使用命令行以及以编程方式测试和使用该模型。
创建一个
image_classification_request.json
文件,如下所示:curl -X POST -H "Content-Type: application/json" \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ https://automl.googleapis.com/v1beta1/projects/ai-gcp-ch4/locations/us-central1/models/ICN7883804797052012134:predict -d @image_classification_request.json
import sys from google.cloud import automl_v1beta1 from google.cloud.automl_v1beta1.proto import service_pb2 def get_prediction(content, project_id, model_id): prediction_client = automl_v1beta1.PredictionServiceClient() name = 'projects/{}/locations/us-central1/models/{}'.format(project_id, model_id) payload = {'image': {'image_bytes': content }} params = {} request = prediction_client.predict(name, payload, params) return request # waits till request is returned if __name__ == '__main__': file_path = sys.argv[1] project_id = sys.argv[2] model_id = sys.argv[3] with open(file_path, 'rb') as ff: content = ff.read() print get_prediction(content, project_id, model_id)
如本节中所述,AutoML 使无缝训练该图像分类模型变得无缝且容易,并且该模型已部署在云上,并且可以由经过认证的用户和服务帐户使用简单的 API 接口进行访问。
使用语音文本 API 执行语音文本转换
GCP 提供了一个非常有效且易于使用的 API,用于语音到文本的转换。 尽管界面简单直观,但下方仍存在深度神经网络,可不断训练并丰富语音到文本模型。 应用开发人员无需了解底层细节以及特定的神经网络配置和调整。 在撰写本文时,API 可以识别一百多种语言和方言。 该平台以批量和实时模式提供语音到文本转换服务。 随着平台被越来越多的用户用于转换,模型的准确率会在一段时间内提高。 该平台还提供用于自动检测口语的 API。 在允许语音命令的特定用例中,此功能非常方便。 该 API 允许选择适合特定用例的预构建模型。 例如,命令和搜索模型最适合语音命令,电话模型最适合记录电话对话。 下图描述了语音文本 API 的所有受支持的功能:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HxZhIZy8-1681704554596)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/handson-ai-gcp/img/b8207dbf-3391-4466-b3e3-f470314d61f5.png)]
在本节中,我们将遍历 API 并了解如何利用语音转文本 API 来构建应用。
与语音到文本 API 交互的方法有以下三种:
同步识别:这是一个阻塞 API 调用,适用于少于 1 分钟的音频内容。 音频数据将发送到 REST 或 gRPC 端点。 仅当转录整个音频内容时,API 才会响应。 异步识别:这是一个非阻塞 API 调用,适用于持续时间较长的音频内容(最长 480 分钟)。 此 API 调用在云上启动了长期运行的操作,并且调用服务需要定期轮询以获取转录结果。 呼叫服务需要在后续呼叫期间管理文本数据,以优化表现。 流识别:用于实时转录,并通过 gRPC 作为双向流进行支持。 文本转换过程是实时的,并且响应文本可以作为连续流使用。 呼叫服务需要收集时间序列数据并将其用作流。 请求主体由配置参数和音频文件的路径组成。 同步请求示例如下:
"sampleRateHertz": number, "audioChannelCount": number, "enableSeparateRecognitionPerChannel": boolean, "languageCode": string, "maxAlternatives": number, "profanityFilter": boolean, "speechContexts": [ object (SpeechContext) "enableWordTimeOffsets": boolean, "enableAutomaticPunctuation": boolean, "metadata": { object (RecognitionMetadata) "model": string, "useEnhanced": booleansampleRateHertz
number
该字段定义音频数据的采样率。 数据点的范围为 8,000 至 48,000 Hz。 对于 WAV 和 FLAC 音频格式,此字段是可选的。audioChannelCount
number
该字段指示输入音频数据中的多个通道。enableSeparateRecognitionPerChannel
boolean
如果audioChannelCount
大于 1,则需要将该参数显式设置为True
。languageCode
string
这是指示对话语言的必填字段。 例如,en-US
用于表示美国英语。maxAlternatives
number
这是一个可选参数,指示响应中返回的替代识别消息的最大数量。 根据训练的模型和语音上下文,服务器返回的值可能少于设置的替代值。 参数值范围为 0 到 30。 值 0 或 1 将最多返回一个识别,如果该字段不是请求的一部分,则最多返回一个识别。profanityFilter
boolean
这是一个可选属性,如果设置为True
,则会过滤出亵渎或淫秽的语言表达式。speechContexts[]
对象(SpeechContext
) 这是一个可选的但重要的属性,可为识别模型提供提示以实现更准确的转录。 通过在此对象中发送语音上下文,可以消除由于语音上相似的单词而引起的潜在错误,从而可以基于语音上下文进行更准确的识别。enableWordTimeOffsets
boolean
这是个可选的选项。 如果设置为true
,则转录语音中的每个单词都将在音频信号中标记其开始和结束时间。 默认情况下,此参数的值为false
。enableAutomaticPunctuation
boolean
此可选字段仅影响所选的语言,当前可作为实验字段使用。 启用后,转录将包括标点文本。 默认情况下,该参数设置为false
。metadata
object
这是一个可选字段,提供有关音频信号的元数据。 该字段是RecognitionMetadata
类型,包含以下子字段:interactionType
/industryNaicsCodeOfAudio
/microphoneDistance
/originalMediaType
/recordingDeviceType
/recordingDeviceName
/originalMimeType
/obfuscatedId
/audioTopic
元数据为模型提供了其他提示,这些提示用于更准确和上下文相关的转录。model
string
这是一个可选字段,用于选择适当的机器学习模型以执行语音到文本的识别。 选择合适的识别模型可以大大提高转录的准确率。 如果未设置模型,则根据RecognitionConfig
中的参数选择运行时模型。 以下是 GCP 上当前可用模型的列表: "name": "8214202757943088943", "metadata": { "@type": "type.googleapis.com/google.cloud.speech.v1.LongRunningRecognizeMetadata", "progressPercent": 100, "startTime": "2019-09-22T08:16:32.013650Z", "lastUpdateTime": "2019-09-22T08:16:55.278630Z" "done": true, "response": { "@type": "type.googleapis.com/google.cloud.speech.v1.LongRunningRecognizeResponse", "results": [ "alternatives": [ "transcript": "One Two Three Four", "confidence": 0.97186122, "words": [ "startTime": "1.300s", "endTime": "1.400s", "word": "One" "startTime": "1.400s", "endTime": "1.600s", "word": "two" "startTime": "1.600s", "endTime": "1.600s", "word": "three" "startTime": "1.600s", "endTime": "1.900s", "word": "four" "alternatives": [ "transcript": "one too thee four", "confidence": 0.9041967,@type
:此字段表示 GCP 定义的响应类型。 该字段指向对象定义 URI。progressPercent
:此字段表示转录完成的百分比。startTime
:这是语音到文本翻译的开始时间。LastUpdateTime
:这是 API 上次更新状态的时间。响应:包含以下字段: @type
:此字段表示由 GCP 定义的响应主体的类型。 该字段指向对象定义 URI(type.googleapis.com/google.cloud.speech.v1.LongRunningRecognizeResponse
)。results
:这是一个收集对象,它是基于音频输入的连续部分的语音到文本转换单元的顺序列表。alternatives
:每个单独的顺序结果均包含一个或多个具有不同置信度的替代转录。 备选方案按置信度降序排列。 通常,第一种选择是最好的,可以由应用使用。 响应中的替代数目由maxAlternatives
请求参数控制。transcript
:每个备选方案均显示音频部分的笔录。confidence
:这是一个数字字段,指示模型与副本的可信度。words
:在每个替代成绩单中,都有多个单词。 (可选)这些单词显示在时间轴上(基于enableWordTimeOffsets
请求参数的值):startTime
:表示输出单词的音频信号内的开始时间endTime
:表示输出单词的音频信号内的结束时间word
:实际转录对于同步转录,该请求将发送到以下端点:
"name": "operation_name", "metadata": { "@type": "type.googleapis.com/google.cloud.speech.v1.LongRunningRecognizeMetadata" "progressPercent": 37, "startTime": "2019-09-03T13:24:39.579144Z", "lastUpdateTime": "2019-09-03T13:24:39.826903Z"该过程将继续转录请求中发送的音频信号。 转录完成后,将以
progressPercent
作为100
发送响应。 此时,响应的格式与同步响应的格式相同。根据应用的要求,可能需要具有双向流传输功能以实时连续记录音频信号。 语音转文字 API 提供了一种在双向流中进行实时转录的方法。 发送者应用可以将连续的音频信号流发送到 API,并从服务中接收离散的以及完整的转录形式。 即时结果以转录格式表示当前音频,最终响应获得整个转录(类似于同步和异步响应)。
就 API 而言,流请求将作为端点发送到
StreamingRecognize
方法。 由于该 API 是连续的流式 API,因此会将多个请求发送到具有不同音频窗口的 API。 但是,第一条消息必须包含流请求的配置。 该配置由StreamingRecognitionConfig
对象定义,该对象向 API 提供提示以处理特定的流音频信号。StreamingRecognitionConfig
对象定义如下:config
:这是我们在本章前面讨论的RecognitionConfig
对象。single_utterance
:这是一个可选的boolean
标志。 当将其设置为false
时,尽管语音中有很长时间的停顿,流识别 API 仍会继续转录输入信号。 该流将保持打开状态,直到被调用进程显式关闭为止,或者直到经过了某个时间阈值为止。 在这种情况下,API 可能返回多个StreamingRecognitionResult
对象。 如果将此标志设置为true
,则模型会检测到音频信号中的暂停,并且 API 返回END_OF_SIGNAL_UTTERANCE
事件并完成识别过程。 在这种情况下,API 将仅返回一次出现的StreamingRecognitionResult
。interim_results
:这是一个可选标志。 如果设置为true
,则中间结果由 API 返回;如果设置为false
,则 API 仅在转录完成后才返回结果。API 以
StreamingRecognizeResponse
消息对象的形式返回响应。 这是流式语音转文本服务 API 返回的唯一对象。 响应对象包含以下重要字段:speechEventType
:这表示基础模型检测到的音频对话中的暂停。 API 识别两种事件类型。SPEECH_EVENT_UNSPECIFIED
表示未指定任何事件,END_OF_SINGLE_UTTERANCE
表示模型已检测到音频信号中的暂停,并且 API 预计流中不会再有其他音频数据。 仅当single_utterance
请求参数设置为true
时,才发送此事件。results
:这是主要包装对象,其中包含转录结果作为集合:alternatives
:类似于同步和异步转录请求,此集合提供了具有不同置信度的各种转录选择。isFinal
:当模型录制整个音频信号时,此标志设置为true
。stability
:在流语音识别的上下文中,语音的重叠部分会在移动的时间窗口上被转录。 这意味着音频信号内的特定位置可以在后续帧内被转录一次以上。 语音到文本模型会生成一个稳定性分数,该分数指示转录发生变化的可能性。 分数为 0 表示不稳定的转录将最终改变,分数为 1 表示原始转录将没有任何变化。情感分析是构建智能平台的关键实用功能之一,该智能平台可根据最终用户对服务或主题的感知来推荐业务操作。 考虑到数据的上下文和性质的变化,该过程非常复杂。 通常,在大多数情况下,数据是非结构化或半结构化的,这使得难以实现较高的准确率。 作为一般过程,情感分析可以分为以下步骤:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jjF1Abim-1681704554596)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/handson-ai-gcp/img/81063ae9-42b2-4893-a20d-b8a1ca81a4c9.png)]
目标设置:需要在用例的上下文中明确定义情感分析的目标。 例如,当要分析购买者的情感时,我们需要将其围绕产品及其功能集中。 文本处理:基于上下文目标和内容来源,下一步是执行文本处理,这涉及消除噪音和不需要的单词,并组织语和情感内容。 解析内容:在此阶段,将根据逻辑和有意义的内涵对内容进行解析和分组。 根据极性和语义对内容进行细分。 文本细化:在此阶段需要识别停用词和同义词。 分析和评分:在此阶段,将根据训练数据和文本的语义对经过解析和精炼的内容进行评分。 评分用于训练模型以对新内容进行实际情感分析。 AutoML 自然语言情感分析创建了一个抽象层,使应用开发过程摆脱了情感分析的核心复杂性。 一旦以适当的评分精心准备了训练数据,该平台就会通过简单的 Web 界面和 API 来进行模型的训练,评估和部署。 在本节中,我们将了解使用 AutoML 在 GCP 上执行情感分析的过程。
该过程中最重要且最耗时的步骤是使用 GCP AutoML 创建用于自然语言情感分析的训练数据。 类似于任何其他有监督的学习模型训练过程,我们需要提供示例数据,该数据以整数比例标记文本内容。 通常,情感分数从 0 开始,可以根据需要进行细化。 整数标签越高,情感越积极。 可以基于预期的粒度定义最大情感分数。 作为一般准则,情感分数必须从 0 开始,并且在训练数据中不得有任何差距,以进行准确的模型训练。 建议在训练数据中使用偶数个样本,每个单独的分数。 这将避免模型欠拟合。
AutoML 接受 CSV 格式的训练数据,每行三个字段。 第一个字段将行表示为训练,验证或测试样本。 该字段在数据集中是可选的。 如果数据文件中未提供,AutoML 会自动创建一个拆分,并将大约 80% 的样本分配给训练,每个样本分别分配 10% 进行验证和测试。
第二个字段是模型需要分析的实际内容的占位符。 第三个字段表示代表情感的实际分数,该分数以 0(最负数)开头,最大值为 10(最正数):
让我们用标有 Twitter 数据的示例数据集进行 AutoML 情感分析实验。 从导航菜单>人工智能>自然语言启动 AutoML 情感分析: [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CbROMz7u-1681704554596)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/handson-ai-gcp/img/ce31ffd3-c2c3-4281-858e-cff3475b6ba4.png)]
启动应用后,单击顶部菜单栏上的新数据集按钮 提供数据集名称,然后选择情感分析选项,如以下屏幕快照所示: [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VboBy3cl-1681704554596)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/handson-ai-gcp/img/909ed4de-1ba3-4239-b76b-93c0656d56c3.png)]
存在用于上传文本内容的四个选项:
从您的计算机上载 CSV 文件:CSV 文件可以是带有实际数据的文本文件,也可以是 GCS 路径列表。 从您的计算机上载文本项。 在 Cloud Storage 上选择一个 CSV 文件。 稍后导入文本项:可以通过创建文本项集并将其直接标记在工作空间中来创建数据集。 加载数据集后,AutoML 将在控制台上提供有关标记数据的统计信息:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9xSLayjF-1681704554597)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/handson-ai-gcp/img/94344d20-ccc7-4264-9587-c8472498dcb0.png)]
在此阶段,模型已准备好进行训练。 单击 model_id = '[MODEL_ID]' file_path = '/local/path/to/file' from google.cloud import automl_v1beta1 as automl automl_client = automl.AutoMlClient() prediction_client = automl.PredictionServiceClient() model_full_id = automl_client.model_path( project_id, compute_region, model_id with open(file_path, "rb") as content_file: snippet = content_file.read() payload = {"text_snippet": {"content": snippet, "mime_type": "text/plain"}} params = {} response = prediction_client.predict(model_full_id, payload, params) print("Prediction results:") for result in response.payload: print("Predicted sentiment label: {}".format(result.text_sentiment.sentiment)) for key, data in response.metadata.items(): if key == 'sentiment_score': print("Normalized sentiment score: {}".format(data))TRAIN
选项卡,然后单击开始训练按钮。 AutoML 将根据用户定义的分割或默认分割百分比来分割训练数据。 训练完模型后,将基于评估样本对其进行评估,并在EVALUATE
选项卡上提供详细的模型表现分析。 该模型自动部署在平台上,可用于通过 Web 界面或 API 对新数据集执行情感分析。 这是使用部署的模型执行情感分析的 Python 代码片段:使用 AutoML 自然语言 API 的情感分析
命令行界面
在下一部分中,我们将探索 AI 笔记本,并学习如何将其用于特定任务。
您可以使用 AI Notebooks JupyterLab 平台设置本地笔记本,也可以从 Git 存储库克隆。 在用户界面中,单击顶部菜单上的 Git 图标以克隆存储库,如以下屏幕截图所示:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ubR7fRsv-1681704554599)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/handson-ai-gcp/img/ed104495-34a2-4964-bc3a-c7a78aa151be.png)]
如我们所见,Google Cloud Platform 允许我们选择各种版本的 Python,以及一种创建特定类型的支持文件的方式:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Kk34dMzE-1681704554599)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/handson-ai-gcp/img/a5f18ed9-d1af-466a-bed3-38977fffbe43.png)]
Jupyter 笔记本允许命令行界面从 Git 存储库中提取代码。 您可以使用左窗格中的文件浏览器查看此代码。 这是一个方便的功能,使多个开发人员可以轻松无缝地进行协作。
一旦开发了代码并能够基于运行时配置参数使其工作,就可以使用称为 Papermill 的库来执行和评估这些笔记本。 让我们来看看 Papermill 可以为我们做些什么:
下图显示了 Papermill 如何与 Google Cloud AI Notebooks 一起使用:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zuTKeDX8-1681704554599)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/handson-ai-gcp/img/ca215d64-ffe1-4498-9440-6ef6ad4b3f32.png)]
Papermill 可让您改变笔记本材料工作方式的范式。 由于 Papermill 不会更改笔记本电脑室通常缺少的原始笔记本电脑,因此我们收到的功能特征已添加到我们的工作定义中。 我们的输入(它是一个 JSON 笔记本文档)和我们的输入参数被视为不变的执行文档,这些文档会生成不变的输出文档。
该输出文档提供了已执行的代码,输出和日志,以及可随时轻松进行重做的可重复模板。 Papermill 从多个位置读取或写入的能力是它的另一个特点。 为了提供可靠的管道,我们可以将输出笔记本存储在耐用性高且易于访问的地方。 前往 Google Cloud 存储桶以存储您的输出笔记本。 这使输出笔记本隔离了文档,从而为我们的用户提供了尽可能多的支持。 这使我们可以轻松分析诸如连接到服务或 Google Cloud 的存储前缀之类的操作。
用户可以使用这些连接并调试问题,验证结果并生成新模板,而不会影响初始工作流程。 此外,由于 Papermill 管理其运行时过程,因此您不需要笔记本或其他基础结构即可针对笔记本内核执行。 这消除了我们在托管的笔记本服务的简化上下文中执行的某些复杂性。 请查看下图,以更深入地了解 Papermill 库:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0cHM3ok3-1681704554599)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/handson-ai-gcp/img/6f4acc9f-1834-4e79-9680-adba02751269.png)]
以下代码是创建深度学习 VM 的常规方法。 但是,请记住,必须选择包含要运行笔记本的关键依赖项的 VM。 如果您的笔记本需要 PyTorch,反之亦然,请不要尝试使用 TensorFlow 图片:
# Compute Engine Instance parameters
export IMAGE_FAMILY="tf-latest-cu100"
export ZONE="us-central1-b"
export INSTANCE_NAME="notebook-executor"
export INSTANCE_TYPE="n1-standard-8"
# Notebook parameters
export INPUT_NOTEBOOK_PATH="gs://my-bucket/input.ipynb"
export OUTPUT_NOTEBOOK_PATH="gs://my-bucket/output.ipynb"
export PARAMETERS_FILE="params.yaml" # Optional
export PARAMETERS="-p batch_size 128 -p epochs 40" # Optional
export STARTUP_SCRIPT="Papermill ${INPUT_NOTEBOOK_PATH} ${OUTPUT_NOTEBOOK_PATH} -y ${PARAMETERS_FILE} ${PARAMETERS}"
gcloud compute instances create $INSTANCE_NAME \
--zone=$ZONE \
--image-family=$IMAGE_FAMILY \
--image-project=deeplearning-platform-release \
--maintenance-policy=TERMINATE \
--accelerator='type=nvidia-tesla-t4,count=2' \
--machine-type=$INSTANCE_TYPE \
--boot-disk-size=100GB \
--scopes=https://www.googleapis.com/auth/cloud-platform \
--metadata="install-nvidia-driver=True,startup-script=${STARTUP_SCRIPT}"
gcloud --quiet compute instances delete $INSTANCE_NAME --zone $ZONE
前面的代码中使用的参数如下:
INPUT_NOTEBOOK_PATH
:位于 Cloud Storage 存储桶中的输入笔记本; 例如
gs://my-bucket/input.ipynb
。
OUTPUT_NOTEBOOK_PATH
:位于 Cloud Storage 存储桶中的输出笔记本; 例如
gs://my-bucket/input.ipynb
。
PARAMETERS_FILE
:用户可以提供一个 YAML 文件,应在其中读取笔记本参数值; 例如
gs://my-bucket/params.yaml
。
PARAMETERS
:用户可以通过
-p
键值传递参数以执行笔记本; 例如
-p batch_size 128 -p epochs 40
。
以下是我们选择
*cu-100
图像系列的 GPU 实例示例。 根据特定要求和版本的可用性,可以使用其他配置。 另外,我们需要提供输入和输出笔记本的路径。 将所有这些参数传递给
gcloud
命令以创建计算实例:
IMAGE_FAMILY="tf-latest-cu100" # Or use any required DLVM image.
ZONE="us-central1-b"
INSTANCE_NAME="notebook-executor"
INSTANCE_TYPE="n1-standard-8"
INPUT_NOTEBOOK_PATH=$1
OUTPUT_NOTEBOOK_PATH=$2
GPU_TYPE=$3
GPU_COUNT=$4
STARTUP_SCRIPT="Papermill ${INPUT_NOTEBOOK_PATH} ${OUTPUT_NOTEBOOK_PATH}"
# Create DLVM
gcloud compute instances create $INSTANCE_NAME \
--zone=$ZONE \
--image-family=$IMAGE_FAMILY \
--image-project=deeplearning-platform-release \
--maintenance-policy=TERMINATE \
--accelerator="type=nvidia-tesla-${GPU_TYPE},count=${GPU_COUNT}" \
--machine-type=$INSTANCE_TYPE \
--boot-disk-size=100GB \
--scopes=https://www.googleapis.com/auth/cloud-platform \ --metadata="install-nvidia-driver=True,startup-script=${STARTUP_SCRIPT}"
gcloud --quiet compute instances delete $INSTANCE_NAME --zone $ZONE
IMAGE_FAMILY="tf-latest-cpu" # Or use any required DLVM image.
ZONE="us-central1-b"
INSTANCE_NAME="notebook-executor"
INSTANCE_TYPE="n1-standard-8"
INPUT_NOTEBOOK_PATH=$1
OUTPUT_NOTEBOOK_PATH=$2
STARTUP_SCRIPT="Papermill ${INPUT_NOTEBOOK_PATH} ${OUTPUT_NOTEBOOK_PATH}"
# Create DLVM
gcloud compute instances create $INSTANCE_NAME \
--zone=$ZONE \
--image-family=$IMAGE_FAMILY \
--image-project=deeplearning-platform-release \
--machine-type=$INSTANCE_TYPE \
--boot-disk-size=100GB \
--scopes=https://www.googleapis.com/auth/cloud-platform \
--metadata="startup-script=${STARTUP_SCRIPT}"
gcloud --quiet compute instances delete $INSTANCE_NAME --zone $ZONE
gs://my-bucket/
。
希望您现在对 Papermill 库有了很好的了解。 您需要完成以下步骤,以完成在生产环境中使用 AI 笔记本的过程。 我们在这里谨慎地介绍了这些步骤,但是也最好在合并列表中显示它们:
Keras 是 Python 的深度学习框架,可以帮助我们识别和训练几乎任何类型的深度学习模型。 对于科学家而言,Keras 的创建是为了进行快速实验。 这是一个在 TensorFlow 或 Theano 上运行的开源 Python 库。 让我们看一下 Keras 及其功能:
Keras 不用选择单个张量库,而是以模块化的方式管理此问题,并将 Keras 与该库联系在一起。 多个后端电机可以无缝插入 Keras。 TensorFlow 后端,Theano 后端和 Microsoft 认知工具包 ( CNTK )后端目前是当前的三种后端实现。 Keras 将来将能够与更多的深度学习引擎一起使用。
Keras 的构建是为了与 Python 配合使用,因此它易于使用,模块化且易于扩展。 该 API 是为人而不是机器而设计的,并且遵循减少认知负载的最佳实践。 所有这些独立的模块都可以组合起来,以生成新的模型,神经层,成本函数,优化器,初始化方案,激活函数和正则化系统。 有了新的类和函数,可以轻松添加新模型。 描述的是 Python 代码中的模型,而不是用于模型设置的不同文件。
使用 Keras 的主要原因来自其指南,主要是它易于使用。 Keras 提供的优势包括广泛接受,支持广泛的制造部署,至少包含五种支持电机(TensorFlow,CNTK,Theano,MXNet 和 PlaidML),以及对各种 GPU 和分布式训练的强大支持。 易于教学和易于模型开发。 此外,Google,Microsoft,Amazon,Apple,Nvidia,Uber 等都支持 Keras。
Keras 本身并不像张量积和卷积那样在较低级别上运行。 相反,它取决于后端电动机。 虽然 Keras 支持多个后端马达,但它使用 TensorFlow 作为主要(默认)后端,并使用 Google 作为主要风扇。 如前所述,Keras API 在 TensorFlow 中打包为
tf.keras
,现在是 TensorFlow 2.0 中的主要 TensorFlow API。 这是一个如何使用 Keras 框架使用 MNIST 数据集进行图像分类的基本示例:
在前面的代码中,我们通过将图像重塑为像素矩阵来加载图像数据集并使用 Keras 库训练图像。 通过神经网络以五次迭代(周期)对神经网络进行 128 批量的训练。 训练和测试标签在输入到神经网络之前会被转换为分类变量。
network.fit
方法为训练数据集训练神经网络,而
network.evaluate
方法用于评估模型的精度参数。 最后,打印精度参数以进行分析。 如果发现模型的准确率高于阈值,则将其用于对新数据集运行预测。
这是前面代码的输出:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4iOcGbKA-1681704554600)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/handson-ai-gcp/img/265c6e9d-ce23-42c0-8f57-a8b6067cf7cc.png)]
如我们所见,通过神经网络进行了五次迭代,每次迭代,我们在评估数据集上的准确率更高。
在本节中,我们将介绍另一个使用 Keras 框架训练神经网络的代码示例。 要运行此代码,我们需要访问以下库:
os
:这提供了各种依赖于操作系统的函数。
glob
:该模块非常适合使用 UNIX shell 参数。
numpy
:该库用于基本的数学函数。
前面链接中引用的代码从磁盘加载训练数据,并将其分为训练和评估集。 该模型的结构从 Keras 顺序模型开始,并在我们向其提供训练数据之前将各种层添加到网络。 最后,
model.fit
方法用于通过五个迭代(周期)以 256 个批量训练数据。
以下屏幕快照显示了不同代码段的输出结果:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MrFukmmc-1681704554600)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/handson-ai-gcp/img/59aafa89-61ad-419e-9dfb-06de0771d4a4.png)]
如我们所见,该模型基于用于训练的训练数据图像将图像分类为
bicycle
。
现在,让我们看一下神经网络的结构,以及通过神经网络进行的每次迭代输出如何变化。 输出形状定义了神经网络结构,我们可以根据评估结果通过将参数值传递到 Keras 库来对其进行配置:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OTFTVaIU-1681704554600)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/handson-ai-gcp/img/6b948480-2611-4847-865a-b54f1a85bbea.png)]
现在,让我们看一下使用带有 TensorFlow 背景的 Keras 库训练模型的输出。 我们已经配置了训练,以使其经过 5 次迭代(历时)进行处理。 如我们所见,模型的准确率随着每次迭代而增加。 一旦我们对模型进行了足够的训练,使其准确率超过设置的阈值,就可以使用该模型对新记录进行分类:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WXxyzNut-1681704554600)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/handson-ai-gcp/img/ddce3dd1-2174-4af7-adcc-15088347fd2b.png)]
现在,我们可以使用此模型来预测新数据点。 该预测将根据提供的训练数据输出类:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tGzyMbST-1681704554601)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/handson-ai-gcp/img/e6adb7b9-4422-4467-83ff-0a02cce790e0.png)]
至此,我们已经使用 Keras 完成了模型训练,评估和预测步骤。 我们还可以可视化模型在各个周期的表现以及使用
matplot
库如何通过模型优化损失函数:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kh7bTjWk-1681704554601)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/handson-ai-gcp/img/0529dde0-f003-4d7c-9ee4-0de4d748c578.png)]
前面的屏幕快照显示了如何使用 Keras 在模型的训练迭代中将训练和验证损失最小化。
在上一节中,您学习了如何使用 Keras 框架训练模型。 在本节中,我们将在 Google Cloud AI Platform 上训练相同的模型。 核心代码库将保持不变,但是训练模型的方式将有所不同。 让我们开始吧:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jLa3GMLW-1681704554601)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/handson-ai-gcp/img/84f4414c-1528-41b1-bef7-db411081285e.png)]
PROJECT_ID="<project_id>" #change this
BUCKET_ID="ml_assets"
JOB_NAME = 'my_first_keras_job'
JOB_DIR = 'gs://' + BUCKET_ID + '/keras-job-dir'
REGION="<REGION>" #change this
! gsutil ls -al gs://$BUCKET_ID
print(JOB_DIR)
export_path = tf.contrib.saved_model.save_keras_model(model, JOB_DIR + '/keras_export')
print("Model exported to: ", export_path)
#Verify model is created
! gsutil ls -al $JOB_DIR/keras_export
以下屏幕截图显示了上述代码的输出:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iF3Bn11f-1681704554601)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/handson-ai-gcp/img/aaaeb9a0-d76a-44fd-9bfd-5776d455f1eb.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bAEKJMas-1681704554601)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/handson-ai-gcp/img/c342e185-4939-49c9-ad0a-e5bebbfe800d.png)]
gcloud
AI 平台命令的形式提交训练工作:
上一条命令的输出如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vo6CwUF1-1681704554602)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/handson-ai-gcp/img/5c993c67-b24c-4a50-b181-3c7af1719929.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-p1YnBBrb-1681704554602)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/handson-ai-gcp/img/260db27a-4d3c-4cdc-945f-87b64b88505b.png)]
Google Cloud Platform 会存储过程日志,以便于监视和故障排除。 我们可以通过控制台窗口中的 Stackdrive Logging 访问这些日志,如下所示:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nFRGPzqu-1681704554602)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/handson-ai-gcp/img/563f1170-bd0b-42b1-b3ae-d9828a9624cd.png)]
现在我们的训练工作已经成功,我们可以将保存的 ML 模型用于在线和离线预测。 接下来我们将看这个。
为了使用上一节中训练和导出的模型来提供在线预测,我们必须在 AI 平台中创建模型资源,并在其中创建版本资源。 版本资源是合格模型有效地用于提供预测的资源。 使用此框架,您可以多次调整,重新训练和管理 AI 平台中的所有版本。
模型或版本是已存储在 AI 平台的模型服务中的高级学习解决方案的示例。 您可以使用已训练的标准模型(作为保存的模型)进行发布。 您也可以在创建版本时提供自定义代码(测试版)来处理预测。 让我们来看看:
上一条命令的输出如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WuUcEhhh-1681704554603)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/handson-ai-gcp/img/9881610e-e3c0-400c-86c9-b60e5133b490.png)]
MODEL_VERSION = "v1"
# Get a list of directories in the `keras_export` parent directory
KERAS_EXPORT_DIRS = ! gsutil ls $JOB_DIR/keras_export/
# Pick the directory with the latest timestamp, in case you've trained
# multiple times
SAVED_MODEL_PATH = KERAS_EXPORT_DIRS[-1]
# Create model version based on that SavedModel directory
! gcloud ai-platform versions create $MODEL_VERSION \
--model $MODEL_NAME \
--runtime-version 1.13 \
--python-version 3.5 \
--framework tensorflow \
--origin $SAVED_MODEL_PATH
以下是 Google Cloud UI 的输出:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DSCx9K6g-1681704554603)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/handson-ai-gcp/img/5413a694-f704-4f9b-b8f8-5cbbd35ab901.png)]
以下屏幕截图显示了 Keras 模型的版本详细信息:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kmYxVLX4-1681704554603)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/handson-ai-gcp/img/e3c1c6d1-b35b-47eb-a7bb-a96c20209ec1.png)]
让我们回顾一下前面代码中使用的每个参数:
TF_Record
或
TF_Record_GZIP
格式。
timestamp = time.strftime('%Y%m%d_%H%M%S', time.gmtime())
# Make sure the project name is formatted correctly to work as the basis
# of a valid job name.
clean_project_name = re.sub(r'\W+', '_', project_name)
job_id = '{}_{}_{}'.format(clean_project_name, model_name,
timestamp)
if max_worker_count:
body['predictionInput']['maxWorkerCount'] = max_worker_count
if runtime_version:
body['predictionInput']['runtimeVersion'] = runtime_version
return body
import googleapiclient.discovery as discovery
project_id = 'projects/{}'.format(project_name)
ml = discovery.build('ml', 'v1')
request = ml.projects().jobs().create(parent=project_id,
body=batch_predict_body)
response = request.execute()
print('Job requested.')
# The state returned will almost always be QUEUED.
print('state : {}'.format(response['state']))
except errors.HttpError as err:
# Something went wrong, print out some information.
print('There was an error getting the prediction results.' +
'Check the details:')
print(err._get_reason())
前面的代码通过
request.execute()
方法调用发送预测请求,该请求以异步方式执行批量预测作业。
在下一节中,我们将研究使用 Cloud Machine Learning Engine 的实时预测,该引擎将范例转换为 Google Cloud Platform 上的完全无服务器的 ML。
优化了在线预测,以最小化服务预测的延迟。 每个请求我们可以处理一个或多个实例。 在线预测在响应消息中作为输入数据返回,该输入数据直接作为 JSON 字符串传递。 它将尽快返回。 在响应应用输入进行请求或在其他需要及时推断的情况下,通常应使用在线预测。 批量预测有其自身的缺点。 如果使用单个模型和少量输入实例,则可以看到使用在线预测与批量预测完成相同的预测请求所需的时间有相当大的差异。 几乎立即完成由互联网请求返回的预测可能要花费大量时间。 这是两种预测技术所使用的各种设施的副作用。 在创建应用时,AI 平台会分配并初始化批量预测资源。 通常,已准备好在线预测,以便可以在需要时进行处理。 您可以通过 这里 了解有关在线预测的更多信息。
前面的链接告诉我们,使用 Google Cloud Platform 上的简单且一致的 API 可以轻松地与 ML 引擎进行交互。 该 API 可用于实时预测,因为它具有很高的吞吐量和使用底层弹性计算能力的效率,而所有这些功能均由 Google Cloud Platform 启用。
在本章中,我们通过一个实际的示例用例演示了 Keras 与 Google Cloud Platform 的结合使用。 我们了解了如何使用云机器学习引擎。 Keras 是一个用 Python 编写的开源神经网络库。 它可以在 Microsoft Cognitive Toolkit,TensorFlow 或 Theano 上运行。 我们看到 Keras 支持卷积网络,循环网络以及两者的组合。 展望未来,我们使用 Cloud Machine Learning Engine 执行了异步批量预测和实时预测。
在下一章中,我们将学习 DialogFlow,它用于构建界面(例如对话式 IVR 和聊天机器人),以实现企业和用户之间的交互。
人工智能 ( AI )不断改变着我们搜索和处理事物的方式,而聊天机器人是人们渴望摆脱自己不想做的事情的真实例证。 通过他们自己。 人工智能驱动的聊天机器人可以在不涉及人类的情况下完成出色的工作。 聊天机器人是一个智能聊天程序。 它应该能够令人信服地模拟一个人。 与 AI 技术结合使用时,它称为智能聊天机器人。
聊天机器人的最常见实例是某些公司使用的客户支持系统。 它已经发展为可以进行 70-80% 的对话,而公司中没有实际的人与客户进行对话。 银行和金融市场已经在大量使用聊天机器人来处理客户请求并迅速协助他们进行银行交易。 出于完全相同的原因,云提供商正在提供聊天机器人平台,以缩短产品上市时间。 在本章中,我们将学习如何使用名为 DialogFlow 的 Google Cloud Platform ( GCP )服务构建会话应用。 DialogFlow 提供了一种轻松的方法来为企业构建会话应用,并可以大大节省运营成本。 在本章中,我们将学习 DialogFlow 的核心概念,并通过一个示例说明如何构建对话应用。
以下是本章将涉及的主题:
在开始 DialogFlow 之前,我们需要从高层次了解如何使用不同的技术来增强智能聊天机器人系统的功能。 大多数聊天机器人是电子邮件或对话的一种界面,其中机器人会响应您的文本,而不是人。 这些聊天机器人在包含应用的上下文中运行。 但是,捕获集中在您与之通信的用户界面层周围。 人类与机器人的对话是由 机器学习 ( ML )算法驱动的,该算法将您的消息分解为具有 自然语言理解 ( NLU )能力的自然语言方法并以与任何人都可以期望的方式相当的方式回答查询。
让我们通过查看 DialogFlow 的高级架构来了解对话应用的各种构建块。
下图从高层表示了任何聊天机器人应用的不同组件:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yG77j1la-1681704554603)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/handson-ai-gcp/img/078dd230-1ecd-4fb3-9059-0e27d5655edf.png)]
图 6.1:聊天机器人应用的组件
系统的独立构建块需要在一段时间内进行微调和即兴创作,并且需要不断的反馈和训练循环。 在某些情况下,基于对一组已知输入的一组预定义响应来构建会话应用。 显然,这些系统无法提供类似于人的体验,并且缺乏自然的对话风格。 DialogFlow 抽象了许多此类过程,并允许应用开发人员通过简单易用的界面专注于对话框的上下文和语义。
该引擎还利用了不断增强的 ML 模型来支持其他意图,实体和上下文。 在本节中,我们将学习 DialogFlow 的各种构造块和接口,如以下列表所示:
TELEPHONY_WELCOME
:当收到使用 DialogFlow 注册的电话号码的呼叫时,将生成此事件。
ALEXA_WELCOME
:当用户开始与特定技能进行交互时,将生成此事件。
MEDIA_STATUS
:根据特定媒体文件的状态(例如,音频文件的播放完成时)生成此事件。 可以在此类媒体状态事件上触发 DialogFlow 操作。
SIGN_IN
:当用户登录到集成服务(Twitter,Google 等)时,将生成此事件。 在这种情况下,可以触发对话流程。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uJVXvn7u-1681704554603)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/handson-ai-gcp/img/abf6ac0d-4e78-4760-8631-929364cb5733.png)]
图 6.2:通过履行服务的 DialogFlow 请求的生命周期
在介绍了 DialogFlow 核心概念之后,在下一部分中,我们将研究在平台上构建 DialogFlow 智能体的过程。
作为通用 GCP 原则,GCP 项目中存在任何服务。 一个 GCP 项目可以包含一个 DialogFlow 智能体。 如果我们要有多个 DialogFlow 智能体,则需要在不同的项目下进行管理。 一个项目组织了 DialogFlow 智能体所需的所有资源。 前提条件是,我们需要启用 API,监视工具和计费信息。 我们需要提供对项目用户帐户的访问权限,并在粒度级别上设置访问控制,以便用户可以访问最少的服务资源。 我们将通过 DialogFlow 控制台导航至 这里 来进行工作。
让我们为书店构建一个 DialogFlow 智能体。 导航到控制台后,单击侧面菜单或控制台登录页面上的“创建智能体”按钮。 根据应用的上下文以及默认语言和时区选择智能体名称。 DialogFlow 控制台提供了一个选项,可以使用现有的 GCP 项目以及在从控制台创建智能体的工作流程中创建新项目。 以下屏幕快照显示了 DialogFlow 控制台中的智能体创建屏幕:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ptSCS299-1681704554604)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/handson-ai-gcp/img/21a6dfcf-8f6b-4d73-bd9b-c7aa73c8a92f.png)]
图 6.3:DialogFlow 控制台中的智能体创建屏幕
我们将通过 DialogFlow 控制台创建一个新的 Google 项目。 单击右上角的“创建”按钮。 创建智能体后,我们将进入“意图”屏幕。 DialogFlow 为每个智能体提供两个默认意图。 这些是任何应用通常都需要的预配置意图:
所有意图都配置有上下文,事件,训练短语,动作和参数,响应和实现。 让我们看一下默认的欢迎意图。 可以根据应用上下文对欢迎意图进行配置和修改以吸引用户:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CbS4Xb9g-1681704554604)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/handson-ai-gcp/img/c0f60410-a083-4343-b3f4-2212fbf7586d.png)]
图 6.4:默认欢迎意图
默认的欢迎意图配置了一组训练短语和响应。 让我们修改默认的欢迎意图以适合我们的书店智能体。 我们可以添加新的响应,也可以删除 DialogFlow 提供的默认响应。
以下屏幕截图说明了欢迎意图的配置:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Oe48lqIv-1681704554605)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/handson-ai-gcp/img/97f09273-d0ce-4cef-b428-b72db0bb5a16.png)]
图 6.5:配置默认的欢迎意图
DialogFlow 控制台提供了一种快速测试已配置响应的简便方法。 在右窗格中,DialogFlow 提供了一种提供音频和文本输入的方法,并根据配置的意图模拟 DialogFlow 智能体的响应。 这是一个截图,说明了来自欢迎意图的响应:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nnA1fIdQ-1681704554605)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/handson-ai-gcp/img/d1af9c86-d0b8-4191-81c2-e9311b490967.png)]
图 6.6:意图测试
我们可以使用以下工具配置智能体:
单击“诊断信息”按钮,以 JSON 格式查看 DialogFlow 智能体的响应。 这是来自智能体的 JSON 格式的示例响应:
"responseId": "af1b533d-b107-42c1-b2af-1fcc30ed6b01-b4ef8d5f", "queryResult": { "queryText": "Hello", "action": "input.welcome", "parameters": {}, "allRequiredParamsPresent": true, "fulfillmentText": "Hi, Thank you for calling My Book Store. We are open from 9 am to 6 pm", "fulfillmentMessages": [ "text": { "text": [ "Hi, Thank you for calling My Book Store. We are open from 9 am to 6 pm" "intent": { "name": "projects/mybookstore-efjbhb/agent/intents/6fa880d8-1ed2-4999-86dc-a58211a164c4", "displayName": "Default Welcome Intent" "intentDetectionConfidence": 1, "languageCode": "en"我们可以为欢迎意图添加响应变体。 DialogFlow 根据上下文和用户表达式随机选择响应。 为了对提供的特定响应进行精细控制,我们需要通过编写自定义代码来利用实现 API。 当我们提供诸如“我该如何帮助您?”的开放式回复时,智能体期望来自用户的响应以在特定方向上推动对话。
我们可以通过创建自定义意图来处理对话中的这些派生。 在创建自定义意图之前,让我们看一下 DialogFlow 提供的默认回退意图。 当用户的表达式无法与任何已配置的意图匹配时,激活后备意图。 当基于用户表达的意图匹配失败时,DialogFlow 会提供默认的后备意图和一组预配置的响应。 这是 DialogFlow 中默认回退意图的快照:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PdMECQ6N-1681704554605)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/handson-ai-gcp/img/869e8104-571a-4270-b03d-e930bbb52d56.png)]
图 6.7:默认回退意图
让我们创建几个自定义意图来帮助 MyBookStore DialogFlow 智能体继续与自定义欢迎意图之外的呼叫者进行对话。 我们希望智能体执行以下两项任务:
在这种情况下,我们需要创建两个意图。 让我们创建我们的第一个意图,该意图将当前月书店中的最新消息告知用户。 例如,当用户说“我想知道最近的到货”时,智能体应回答“这是本月到货的新书清单”。 书-1,作者,出版物”。 以下屏幕截图显示了创建新的自定义意图的过程:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZGkyBf5l-1681704554605)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/handson-ai-gcp/img/bcfae9a8-aa68-4c11-81e5-ca4cc9c55205.png)]
图 6.8:自定义意图的创建
从前面的屏幕截图可以看出,我们执行以下步骤:
以下屏幕截图显示了在新到达意图中配置训练短语和座席响应的过程:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WgW7U1jX-1681704554606)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/handson-ai-gcp/img/85126c83-2f29-43ce-8649-2fbf85572ad8.png)]
图 6.9:自定义意图的训练短语和座席响应的配置
在特定的自定义意图内添加可能的用户短语的多个变体。 当我们使用自然语言进行交流时,可以通过多种方式表达特定的事物。 我们配置的训练短语越多,DialogFlow 越能训练模型以准确处理各种交流方式。 在内部,DialogFlow 利用 ML 算法,该算法在更多训练数据中会变得更好。
建议使用至少 10 个训练短语组合来配置意图:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-t8LrhGRV-1681704554606)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/handson-ai-gcp/img/af4452f3-11ad-4ea9-b5af-246dda00a1c6.png)]
图 6.10:使用 DialogFlow 记录交互的常规配置
我们需要启用 日志设置 ,以将交互记录到 DialogFlow。 这样,我们将能够收集和存储用户查询。 用户查询将可用于手动训练。 这将有助于创建一个训练循环,以确保随着越来越多的用户与智能体进行交互,智能体在一段时间内的表现会更好。
一旦用户知道书店有新来的东西,智能体就可以引导对话以查看用户是否感兴趣。 如果是,则可以将意图响应配置为引导用户保留特定书籍的副本以供提取。 为了简化此操作,我们需要从用户的表达式中捕获参数。 到目前为止,这是使用 MyBookStore 智能体进行的转换的流程:
来电者:你好我的书店智能体:您好,感谢您致电我的书店。 我们的营业时间为上午 9 点至下午 6 点。来电者:这个月有什么新来的?我的书店的智能体:这个月我们有三个新来的人。 您想来接下一本书吗?来电者:是的。 我想明天来接。我的书店智能体:可以。 你 明天 想什么时间来?来电者: 上午 10 点 。我的书店智能体:知道了。 您的约会预定于 2019 年 12 月 30 日 在 上午 10 点 进行。 再见。
在这种情况下,用户打算去商店并提到一天。 DialogFlow 智能体需要配置为从用户表达式中提取含义。 对于人类来说,从对话中提取有意义的信息是一件容易的事。 但是,机器(DialogFlow)智能体需要针对特定的对话流进行训练。 要安排商店访问的约会,让我们创建一个名为
Store_Visit
的新意图:
Store_Visit
的新意图。
3 pm today
。
Today
。
Yes. I want to come and pickup tomorrow
。
输入这些训练短语后,请注意,“操作和参数”部分中将出现两个参数。 这些参数映射到
@sys.date
和
@sys.time
系统参数。 以下屏幕截图显示了训练短语以及已配置的操作和参数:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qWV7Ab5u-1681704554606)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/handson-ai-gcp/img/b25e3b3f-b37d-4d4e-bb9e-340df30cfd33.png)]
图 6.11:带有动作和参数的定制意图
通过此设置,当“我的书店”智能体包含日期和时间信息时,他们可以根据特定的训练短语为呼叫者预订约会; 但是,在实际对话中,我们不能期望用户在初始对话期间提供所有必需的信息。 为了解决这个问题,我们需要使用一种称为插槽填充的功能。 我们需要将已识别的参数设置为
REQUIRED
。 请参阅“图 6.11”。 我们需要通过选中第一列中的框来设置所需的日期和时间参数。
一旦完成,座席将在对话期间要求特定的数据和时间信息,并提示用户输入需要安排约会的日期和时间。 必需参数的顺序指示 DialogFlow 智能体将搜索有关必需字段的信息的顺序。 在这种情况下,智能体将提示用户设置约会日期,然后再在特定时间进行预订。 获取约会日期后,智能体会提示用户设置约会时间。 在
PROMPTS
列中,我们可以配置各种表达式,以提示需要特定的参数。 以下屏幕截图显示了
$time
参数的提示配置:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-koZoFTZN-1681704554607)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/handson-ai-gcp/img/a2d78521-bd62-4ad7-a204-e10e33d0c8b4.png)]
图 6.11:插槽填充和提示配置
这是使对话更加有意义和自然的两个不同步骤:
随着我们添加更多的训练短语和响应,并在我们的应用上下文中以自然的对话风格填充空位和提示,对话听起来越来越自然。 让我们使用 DialogFlow 提供的测试接口来测试 MyBookStore 智能体:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CaRu3OR0-1681704554607)(https://gitcode.net/apachecn/apachecn-dl-zh/-/raw/master/docs/handson-ai-gcp/img/a8617270-81b6-4848-9df3-314bc3f680dc.png)]
图 6.12:测试 MyBookStore 智能体
MyBookStore 智能体执行以下步骤:
DialogFlow 引擎可以有效地用于需要人工智能体回答客户查询或执行一组预配置操作的任何行业的商务应用。 借助语音交互和强大的 NLP 引擎,对话听起来自然,并且如果进行了广泛配置,则呼叫者很难区分人工智能体和 DialogFlow 智能体。
DialogFlow 智能体提供对在开发和配置过程中经过内部训练的 ML 模型的无服务器访问。 GCP 支持的所有非函数式方面和功能固有地可用于 DialogFlow 智能体。 一些重要的优势是可伸缩性和可用性。 如果服务遇到大量流量和 API 请求,则会自动扩展群集以满足对计算资源的需求增长。 由于使用了底层的 GCP 基础架构,该平台还确保了 99.9% 的可用性。
这有助于无缝地为服务提供 24/7 客户支持。 例如,在航空公司智能体的情况下,客户可以使用 DialogFlow 提供的对话界面查询航班时刻表,预订航班或执行 Web 登机手续。 该智能体可以 24/7 全天候提供这些服务,从而提高了服务水平并显着降低了运营成本。 智能体可以与客户的 CRM 系统集成,以便处理某些未经训练的请求。 随着服务的使用,对日志进行分析,并建立反馈循环,会话智能体的质量会在一段时间内提高。
DialogFlow 提供了一项功能,可以对每个用户表达式执行情感分析。 当产品或服务的用户致电寻求帮助时,此功能在呼叫中心的环境中很有用。 DialogFlow 利用了 Cloud Natural Language 的情感分析引擎。 可以从 DialogFlow 设置菜单中启用情感分析,方法是导航到“高级”设置,然后单击“为当前查询启用情感分析”。
DialogFlow 企业版中提供了此功能。 DialogFlow 还提供与 Cloud Natural Language 引擎的集成,以执行情感分析。 每个用户对话都是有状态的交互,并由 DialogFlow 中的
session_id
唯一标识。 建议您在 API 调用中使用相同的会话 ID 进行连续对话。 这是一个代码片段,用于使用 DialogFlow API 根据对话中的用户表达式执行情感分析:
def get_sentiment(PROJECT_ID, SESSION_ID, text,language_code):
import dialogflow_v2 as dialogflow
session_client = dialogflow.SessionsClient()
session_path = session_client.session_path(project_id, session_id)
text_input = dialogflow.types.TextInput(text=text, language_code=language_code)
query_input = dialogflow.types.QueryInput(text=text_input)
sentiment_config = dialogflow.types.SentimentAnalysisRequestConfig(analyze_query_text_sentiment=True)
query_params = dialogflow.types.QueryParameters(sentiment_analysis_request_config=sentiment_config)
response = session_client.detect_intent(session=session_path, query_input=query_input, query_params=query_params)
用户表达的情感分数封装在响应对象中。 当需要智能履行智能体程序时,可以将该 API 方便使用,该智能体程序可以与外部系统和服务集成以通过智能对话智能体程序提供增值服务。 该服务可以与外部数据源集成,以使对话对呼叫者更加有意义和有用。
这种集成使构建可以访问大量外部信息和服务的智能体成为可能。 该平台还提供了一个封闭的反馈环路,用于在智能体用于自然对话时改善一段时间内的对话。 该平台还提供与 Natural Language 引擎的无缝集成,以对 DialogFlow 智能体遇到的每个用户表达式执行情感分析。 利用 DialogFlow 可以轻松满足各种可能性和用例。 使用 DialogFlow,功能团队可以使用机器智能和类似人的对话。
在本章中,我们学习了 DialogFlow,它是一个用于构建对话应用的服务。 对话式应用需要强大的 NLP 引擎,训练模型以分析用户表达的基础结构,规则引擎以及用于提供自然语言响应的智能体。 独立地构建这些功能块需要对组件进行编码。 可伸缩性和可用性也面临挑战。
我们已经看到了 GCP 上的 DialogFlow 引擎如何处理所有构造块,并允许开发人员专注于业务场景并提供简单的用户界面以及 API 层以利用服务。 无需编码即可构建具有静态内容的简单对话智能体,因此开发团队无需具备高端编程技能。 可以由业务分析师和了解服务功能方面的人员来构建简单的对话智能体。 与外部服务(电子邮件,电话,社交媒体等)的集成也可以由实现智能体完成。
在下一章中,我们将深入研究云 TPU,它们是构建高性能 ML 操作的基本构建块。