云边端的-Azure-人工智能规模化服务指南-全-

云边端的 Azure 人工智能规模化服务指南(全)

原文:zh.annas-archive.org/md5/d7f78dbf9c15dfb48420211d9a03b045

译者:飞龙

协议:CC BY-NC-SA 4.0

前言

在微软,我们一直致力于推进人工智能超越现有技术,并将我们的技术突破转化为 Azure 认知服务,以便全球数百万客户可以方便地使用。作为 Azure AI 的首席技术官,我一直与一群杰出的科学家和工程师团队合作,推进我们更加整合和以人为中心的人工智能方法。

为了更好地为我们全球客户服务,管理感知和认知任务,我们开发了一种独特的视角,突出人类认知的三个特性:文本(X)、音频或视觉感知信号(Y)、以及多语言能力(Z)。在这三者的交集处有着奇妙的魔力——我们称之为 XYZ-code 或 i-code,这是一种联合表示,用于创建能够更好地说话、听到、看到和理解人类的更强大的人工智能。我们相信 i-code 将使我们能够实现我们的长远愿景:跨领域的转移学习,在元宇宙中跨越模态和语言。我们的目标是拥有预训练的基础模型,可以共同学习表示,支持广泛范围的下游 AI 任务,就像今天的人类一样。

我们已经在语音识别、计算机视觉和自然语言处理/机器翻译的许多广泛使用的开放研究基准上达到了人类水平。这些突破为我们提供了强大的技术组件,以实现我们更雄心勃勃的愿景,实现更接近人类学习和理解方式的多感官和多语言学习。我相信,当结合下游 AI 任务中的外部知识来源时,联合 i-code 是这一愿景的基础组成部分。

在过去的三十年里,我有幸与全球一流的研究人员和工程师合作,创造了世界现在看到的微软 Azure AI 服务。Anand Raman 和 Chris Hoder 是我一些出色的同事,他们在处理为客户提供实际 AI 解决方案中遇到了挑战。在这本书中,他们展示了使用 Azure AI 构建现实世界系统的技术。

我希望您能像我一样喜欢这本书。Anand 和 Chris 向我们展示了一种实用的方法,帮助解决我们在行业中面临的许多 AI 挑战。

Xuedong Huang

微软技术院士和 Azure AI 首席技术官

Bellevue,2022 年 4 月

前言

人工智能涵盖了各种技术和方法,您将在智能手机到工厂生产线中无处不在地找到它。

随着人工智能的进步,这些技术变得更加强大,实施起来也更加复杂。越来越多的最强大的人工智能系统是由非常大型的深度学习模型驱动的,这些模型在大量数据上训练,使用数十亿个参数,然后定制以解决特定问题。

构建和训练这些非常大型模型需要大公司的资源和大量技术专业知识,并且需要大规模基础设施投资来运行它们。OpenAI 开发的 GPT-3 语言生成模型的初始训练成本约为 400 万美元或更多。仅 GPT-3 所使用的 45 TB 数据的初始训练可能需要一个月的连续训练和超过一千个高端图形处理单元(GPU)卡。

这意味着世界上只有少数几个组织能够创建和运行这些非常大的模型,斯坦福人类中心人工智能研究所将其称为基础模型,因为它们对当前人工智能的开发和使用方式非常重要,并且您可以在其基础上构建新的系统。¹

这些包括所谓的大型语言模型,如 GPT-3,以及许多领域中依赖半监督深度学习、自监督预训练、迁移学习和类似方法创建的极其大型机器学习模型,这些模型使用强大硬件训练在庞大数据集上,然后可以应用于各种问题或定制训练以解决特定问题。

即使是具备构建深度学习系统专业知识的企业,可能发现模型训练和生产运行成本过高,尤其是当它们需要更多工作来减少在开放网络数据集中训练模型时的偏差,以负责任的方式实施它们。但是,任何人都可以利用非常大型基础模型,甚至通过使用 Microsoft 在云中提供的 Azure AI 服务根据自己的需求定制它们。

其他技术,如强化学习,刚刚从研究实验室中出现,并且需要显著的专业知识来实施。

利用 Azure AI 服务,您可以依赖公共云带来的开发、训练和部署规模,花费时间来构建一个解决用户问题的应用程序或工作流程。

本书适合谁

Azure 提供的云 AI 服务为任何开发人员、甚至是业务用户以及数据科学家和数据工程师带来了广泛的最新发展。

有这么多技术和许多您可能想要使用 AI 的地方,即使是正在招聘和培训数据工程师和数据科学家的组织也希望通过使用 AI 云服务使他们更加高效。云服务还为那些永远不会成为数据工程师或数据科学家的开发人员和业务专家解锁了 AI 的可能性。

微软提供了许多在 Azure 上运行的不同 AI 工具和服务,我们无法深入涵盖它们所有,因此我们选择了四个关键领域。Power 平台帮助业务用户和专业开发人员构建利用 AI 的应用程序和工作流程。Azure 认知服务和应用 AI 服务为开发人员提供了 API、软件开发工具包(SDK)和现成解决方案,可以集成到他们的代码中。Azure 机器学习强大到足以供数据科学家使用,但也有帮助非 AI 专家培训自己模型以解决特定业务问题的选项。

AI 和云服务的世界都在快速发展,因此,本书所能捕捉到的是它们背后的原则,可以使您成功的最佳实践以及您可以实现的示例。特别是,我们将探讨如何负责任地使用 AI:这对许多开发人员来说越来越重要的问题。

我们涵盖了使用一些关键特性的实际操作方面,但请记住,这些服务可能在您使用它们时已经更新。我们描述的步骤可能与您在云服务中看到的略有不同,性能可能已经得到改进,并且您可能会发现额外的功能,让您能够实现更多!

如何使用本书

在本书中,我们希望帮助您开始使用云 AI 服务,无论您的背景或熟悉 Azure 的程度如何。如果您不熟悉强大的 AI 技术和机器学习模型已经发展到何种程度,第一章将介绍当前的技术水平,包括 Azure AI 建立在其上的关键研究里程碑。

要了解作为 Microsoft AI 平台一部分提供的全部 AI 工具和服务范围,请转到第二章,我们将探讨您可以做出的许多不同选择,包括在需要在边缘运行时将云 AI 带入您自己的基础设施。

如果您有构建想法以及 Azure AI 服务如何帮助您的想法,您可以直接转到第二部分。

如果您是一名经验丰富的开发者,并准备立即开始构建机器学习模型,请从第三章开始,我们将介绍 Azure 机器学习,这是微软在云端提供的综合机器学习服务,您可以使用像 PyTorch 和 TensorFlow 这样的行业标准框架进行工作。

如果您宁愿调用 API 来利用可以针对常见 AI 任务或整个场景进行微调的预构建模型,并使用多种熟悉的编程语言和您喜爱的开发者工具,请直接进入第四章和第五章,在这里我们涵盖了 Azure 认知服务和 Azure 应用 AI 服务。

但您并不需要是开发人员才能使用 Azure AI。许多 Azure 认知服务可在低代码 Power 平台和无代码 AI Builder 工具中使用。在第六章中,我们将带您了解如何使用机器学习来理解数据和解决问题。

如果您希望退后一步,思考如何使用 AI,您的数据将从哪里获取,以及如何负责地完成所有这些工作,请转至第七章和第八章,在这里我们将探讨道德方法和最佳实践,这将帮助您充分利用云 AI 的潜力。

想确保云 AI 确实能够扩展到处理您的问题,无论其大小和复杂程度?想过是否更合理地运行自己的 AI 基础设施吗?在第九章中,我们深入探讨了 Azure 认知服务的幕后情况,看看在全球范围内运行 24/7 API 平台意味着什么,以及如何在生产中使用数十个机器学习模型,并始终保持其更新。

第 III 部分继续探讨其他组织如何使用 Azure AI 服务描述世界给盲人用户,即使由于大流行导致购买习惯一夜之间改变,也能精确选择推荐的正确产品,并在多语言之间实时翻译语音。在第十章、11 章和 12 章中,我们有一些使用 AI 导向架构构建的实际系统案例研究,集成了不同的 Azure AI 服务,向您展示了可能性。

但使用 Azure AI,真正的限制在于您的想象力——以及您可以为问题带来的数据。继续阅读,了解您可以做什么以及如何入门。

本书使用的约定

本书使用以下排印约定:

斜体

指示了新术语、网址、电子邮件地址、文件名和文件扩展名。

等宽字体

用于程序列表,以及在段落中引用程序元素,例如变量或函数名称、数据库、数据类型、环境变量、语句和关键字。

**等宽粗体**

显示用户应直接键入的命令或其他文本。

*等宽斜体*

显示应替换为用户提供值或由上下文确定的值的文本。

提示

此元素表示提示或建议。

注意

此元素表示一般提示。

警告

此元素指示警告或注意事项。

使用代码示例

您可以从https://github.com/Azure-Samples/Azure-AI-Services-O-reilly-book-Companion-repo下载本书的补充材料,如代码示例。

本书旨在帮助您充分利用 Azure AI 服务。一般而言,如果本书提供示例代码,您可以在您的程序和文档中使用它。除非您复制了代码的大部分内容,否则无需征得我们的许可。例如,编写一个使用本书多个代码片段的程序不需要许可。销售或分发包含来自 O’Reilly 书籍示例的 CD-ROM 需要许可。引用本书回答问题并引用示例代码不需要许可。将本书大量示例代码整合到产品文档中需要许可。

我们赞赏但不要求署名。一般的署名通常包括标题、作者、出版商和 ISBN。例如:“Azure AI Services at Scale for Cloud, Mobile, and Edge by Simon Bisson, Mary Branscombe, Chris Hoder, and Anand Raman (O’Reilly). Copyright 2022 O’Reilly Media, Inc., 978-1-098-10804-5.”

如果您觉得您使用的代码示例超出了合理使用范围或上述许可,请随时通过permissions@oreilly.com与我们联系。

致谢

作者可能会写下这些文字,但要创作一本书,需要更多的工作,而这本书的完成离不开许多帮助过我们的人们。

尽管所有错误都是我们自己的,但对于特定章节的帮助,我们感激不尽:

  • 第三章:普拉尚特·凯特卡尔

  • 第六章:阿米尔·内茨、朱斯蒂娜·鲁克尼克、安托万·塞莱利耶、乔·费尔南德斯

  • 第七章:萨利玛·阿默希、莎拉·伯德、梅尔努什·萨米基、米哈埃拉·沃尔沃雷亚努

  • 第九章:格雷格·克拉克

  • 第十章:萨基卜·沙克

  • 第十一章:伊沃·拉莫斯、奥利维尔·纳诺

  • 第十二章:杰夫·门登霍尔

这本书还受益于 O’Reilly 团队的工作:加里·奥布莱恩、乔纳森·哈塞尔、丽贝卡·诺瓦克、贝丝·凯利、凯特·达莱亚和莎伦·特里普。

出自玛丽·布兰斯康姆和西蒙·比松

安德鲁·布雷克、道格·伯格、莉莉·程、卡特雅·霍夫曼、埃里克·霍维茨、查尔斯·拉曼纳、彼得·李、约翰·兰福德、詹姆斯·菲利普斯、马克·鲁辛诺维奇、达尔马·舒克拉、帕特里斯·西马尔德、杰弗里·斯诺弗、约翰·温和许多其他人多年来帮助我们理解机器学习技术和微软服务。还要感谢詹姆斯·多兰,埃塞克斯大学荣休教授和玛丽的硕士论文导师,是她第一次听到“机器学习”这个术语的人。

出自克里斯·霍德尔

所有在认知服务和合作伙伴团队中为这些服务和这本书做出贡献并帮助我理解机器学习、应用人工智能以及许多其他宝贵知识的令人惊叹的人们。还要感谢劳伦·霍德尔对我的爱和支持。

出自阿南德·拉曼

我的父母和姐妹教会了我今天的这个人所拥有的一切价值观。我的妻子阿努帕玛和孩子阿什雷和阿哈娜每天都给予我灵感、爱和支持。感谢微软的所有同事,在这条路上帮助我理解人工智能/机器学习以及许多其他宝贵的东西。

1 详见关于基础模型的机遇与风险,对这种日益普遍的方法的优势和可能的危险进行了广泛而发人深省的分析。

第一章:Part I. Understanding AI-Oriented Architecture

第一章:人工智能导向架构简介

您可以用 AI 做什么

AI 的力量在于做以前无法做到的事情,因为这对人类来说成本过高或者太繁琐,或者因为他们反应不够迅速。AI 可以监控大型连锁加油站每个司机的视频监控,以寻找像是有人扔燃着的香烟的安全问题。它可以识别濒危群体中的个体大象,预测机器设备在发生故障之前的可能性,警告您业务的每个领域中哪些合同将在接下来的 30 天内到期,或者选择最有前景的药物配方进行测试,或最具吸引力的产品供客户选择。

AI 可以追踪数百万艘渔船,并预测哪些可能违反旨在避免过度捕捞的规定,或在机场的行李箱中发现非法贩运的象牙。我们能够快速将其构建为工具,可以帮助预测偷猎行为,同时确保野生动物管理员不受威胁,或者可以比较自然灾害前后的卫星和航空图像,以优先救援并减少额外的伤亡风险。

现代 AI 可以做很多事情,利用相同的基础组件构建不同的解决方案。根据用于训练模型的数据,图像识别算法可以识别和计数濒危的雪豹,或者区分被污染的啤酒和回收再利用瓶子上的磨损痕迹。

AI 还可以为应用程序和工作流添加功能,如语音识别、照片中的对象、手写文字或纸质表格上的字段识别,或生成数据可视化的见解。它可以自动化例行工作,甚至数据分析,从而释放被信息泛滥所压倒的员工的时间,使他们可以专注于工作中有趣和创造性的部分——无论是销售人员、客户支持还是医疗管理人员。它甚至可以帮助编写代码,生成复杂的数据查询,或填写常见的函数余下部分。

使用现代机器学习工具,曾经需要计算机科学家团队进行研究的项目现在已成为您可以在自己的应用程序中使用的服务,将它们视为即插即用的组件。或者如果您需要更多,使用一个通用框架,数据科学家和业务分析师可以共同努力,对定制模型进行微调,并在几小时内使其准备好供使用。

从里程碑到模型到架构

我们将在本书中介绍的 Azure AI 服务基于微软几十年来的研究,这些研究在过去五年间取得了一系列突破。2016 年,微软的一个机器学习模型在识别照片和视频中特定对象方面达到了与人类的平等水平。2017 年,微软的语音识别技术与人类对电话录音进行文本转录的能力相匹敌;2018 年,微软的一个机器学习系统表明它能够阅读文档并对文中信息进行问题回答,达到与人类同等水平。同年,微软在语音合成和语言翻译方面达到了同样的基准。

那些在语音识别、翻译、图像分类和文本理解方面取得的突破,大多是使用监督学习建立的:获取大量示例,仔细标记它们,然后使用它们来训练机器学习模型,执行诸如在图像中识别对象等任务。

大约在 2019 年,自监督学习技术使研究人员能够利用未经标记的大量内容,例如多种语言的公共网站内容,让机器学习模型绘制出单词如何一起使用的模式,即上下文语义。这种方法创建的模型在摘要文档或问答对话(包括机器人和人类之间的)等任务上达到了人类的语言理解水平:这些模型通过预测接下来应该出现的词来工作,推导出人们试图询问的内容,并检索出最佳答案。

同样的方法驱动了分析和解释图像和视频以检索最相关的图像、将视频分割成段落或描述场景中的对象,当模型能够识别它们但尚未经过特定训练以最佳方式描述它们时。因此,您可以生成关于人们手持手风琴、风笛或琵琶的标题,而无需训练集覆盖每种可能携带的乐器的标题。

在此期间,提供这些突破的模型也变得越来越大、越来越苛刻:从 2018 年的 2 亿到 20 亿参数,2020 年的 1.7 千亿参数,以及 2021 年 Megatron-Turing 自然语言生成模型的 5300 亿参数。如果硬件能跟上并且成本不失控,机器学习模型可能会继续增长,达到万亿参数。

除了新模型外,微软还开发了像 DeepSpeed 的零冗余优化器和其他并行技术优化技术,这些技术将模型的不同部分分配到数据并行处理中,以及加速训练深度学习模型的 ONNX Runtime 基础构件。

但即使进行了所有这些优化,这些非常大的 AI 模型仍然非常耗资源,在成千上万台强大 GPU 和可编程门阵列(FPGA)的大型集群上进行训练,通过高带宽网络互连,使用全球分布式调度服务。² 因此,微软训练了少量非常大的模型,并在许多地方重复使用它们,使用迁移学习:将通过自监督学习获得的通用基础语法和上下文技能应用于特定领域。那些经过微调的预训练模型可以与更小的标记数据集一起工作;未来,这可能足够高效,以便为每个用户提供其自己的个性化语言模型。

Azure 还运行在其他地方开发的大型模型:这是唯一可以使用 OpenAI 开创性的 GPT-3 大型语言模型的平台。微软使用它们来支持 GitHub 的 Copilot 代码编写功能,并将自然语言转换为 Power Apps 中的数据分析表达式(DAX)查询(有关 Power 平台的更多信息,请参见第六章)。在 Dynamics 365 中,OpenAI 提供了撰写市场营销内容的建议——即使它所建议的不完美,它也比盯着空白页面更能提供灵感。开发人员可以通过调用 Cognitive Services 的 OpenAI API,在他们自己的应用程序中使用语言生成,发送请求和一些简单文本的示例,然后得到生成的文本,准备好使用(我们将在第四章讨论如何使用 Azure OpenAI 服务)。

提供构建这些非常大型模型所需的大规模的平台,跨训练它们到特定模型,并在生产中运行它们的平台,也是提供开发人员可以自己使用的 Azure AI 服务的基础——再次基于那些非常大型模型。

Azure AI 服务摆脱了为机器学习构建和管理基础设施的负担。它们包括组织期望从企业级平台获得的规模、安全性、合规性和治理水平,如专用吞吐量、一致的延迟、网络隔离、托管身份、认证以及由监管认证支持的保证(我们将在第八章详细讨论这一点作为机器学习的最佳实践的一部分)。

云 AI 服务还可以帮助实现负责任的 AI 交付,因为如果它们被设计为试图确保 AI 产生积极影响并避免不公平等问题,那么使用它们构建的所有应用程序都可以从这些原则中受益,因为每个开发人员不必单独解决相同的问题。这一直是云服务的一大优势,尽管这只是一个起点,在第 8 章中,我们将探讨您可以使用的工具、技术和负责任的部署选择,以在此基础上进行进一步的建设。

各种 Azure AI 服务可以加快使用流行框架和强大的 MLOps 功能训练您自己的模型,简化部署(在云端、移动设备和边缘设备上),提供预训练模型,或者将机器学习问题转化为 API 调用。这意味着您可以增强熟悉的面向服务的架构——通过建立相互通信的服务来扩展 IT——以及 AI 导向的架构,其中您拥有与应用程序输入和程序逻辑并存的机器学习模型和 AI 服务功能。

就像您为数据库考虑数据模式一样,您需要考虑数据集和标签。实验成为您开发过程的一部分,就像调试已经是一样。来自您应用程序的遥测数据可以反馈到您的机器学习模型中,同时告诉您何时出现错误或为新功能提供灵感。

这导致了更复杂的架构(图 1-1 是向应用程序添加手写识别功能的一个示例),可能意味着更复杂的工作流程。但是 Azure AI 服务旨在简化这一切。

当您使用我们在第 4 章中介绍的认知服务时,这种类型的架构支撑了您调用的 API。如果您正在创建自己的机器学习模型,需要利用 Azure Machine Learning 中的组件来创建等效的模型:我们将在第 3 章中为您详细介绍这一过程。无论您使用自己的模型还是调用现成的服务,第 10 章、第 11 章和第 12 章的案例研究将为您展示如何将 AI 服务集成到应用程序和架构中。如果您想了解云 AI 服务运行的架构是什么样子,我们将在第 9 章中深入了解认知服务后端。

将手写识别添加到您的应用程序中需要从头开始进行大量工作,从收集数据到训练模型再到在生产环境中支持它们:Azure AI 服务可以将其转化为您调用的 SDK 或 API

Figure 1-1. 将手写识别添加到您的应用程序中需要从头开始进行大量工作,从收集数据到训练模型再到在生产环境中支持它们:Azure AI 服务可以将其转化为您调用的 SDK 或 API。

准备好了吗?

AI 的潜力巨大;实现这一潜力的复杂性不应成为每个开发人员和组织的负担。在本章中,我们探讨了 Azure AI 背后的研究及利用云 AI 为您的应用程序和工作流增添力量的承诺。这并不意味着简化开发或限制您可以使用的工具和平台。在下一章中,我们将展示 Azure AI 平台的广泛性,然后深入介绍如何使用其中一些特定的服务。

¹ 深度加速(DeepSpeed)优化库是开源的;您可以在 DeepSpeed 找到代码库和教程。

² 详见 “奇点:面向 AI 工作负载的全球规模、预先和弹性调度。”

第二部分:帮助您构建面向 AI 的架构的工具和服务

第二章:理解 AI 的提供和能力

您有很多选择可以构建和使用 AI。在本章中,我们将详细介绍微软 AI 平台的广泛性,特别是在云端。本书后面将详细介绍许多这些工具和服务,但我们也会提及其他可能性,以帮助您选择适合您问题的解决方案。

随着 AI 技术的成熟,与其一起使用的选择也在增多。数据科学家和工程师短缺;开发内部专业知识以构建和运营大规模机器学习系统是昂贵的。借助云 AI 服务,每个组织都无需重新实现相同的机器学习模型,云服务可以训练到高精度并大规模运行,通过明确定义的 API 以极低的成本为用户提供访问。

这些服务简化了构建定制模型或将 AI 工具集成到现有工作流程中,使得领域专家和一般业务用户都可以开发 AI。Azure AI 提供多种选择,适合不同技能水平和不同工具的用户。

适用于各种用户类型的 AI 服务

机器学习现在驱动物联网(IoT),帮助企业分析现状并预测未来,并帮助消费者处理从医疗保健到游戏的各种事务。将 AI 集成到您的应用程序和工作流程中,对于越来越广泛的用户群体来说都是一个选择。

流行的框架使得使用深度神经网络轻松构建和训练定制的机器学习模型变得可能,而像 Azure 这样的云服务提供预训练模型和可定制的服务,可以在最少的代码量下快速为您的应用程序添加机器学习功能。这些工具可以帮助所有用户,从业务分析师和信息工作者到开发人员:

信息工作者

业务应用程序如 Word 和 PowerPoint 已经使用 AI 服务提供写作和设计建议,记录会议内容,并指导用户如何做出更好的演示。低代码和无代码工具让用户能够创建自定义工作流和应用程序,包括能够丰富信息并分析数据的 AI 服务,例如识别名片或分析客户反馈中的情感。

业务分析师

现代业务分析技术现在需要大量的数据科学输入。过去的 OLAP(在线分析处理)立方体和 Excel 电子表格现在变成了依赖复杂模型的大数据实验,以发现关键趋势和数据点。机器学习工具可以帮助构建和运行这些模型,使 AI 成为数据科学的重要工具。通过训练模型或调用预训练模型来丰富或找到数据中的洞察,您可以预测未来趋势或新出现的异常,使企业能够快速调整策略,避免昂贵的问题。开发人员和数据科学家还可以训练定制模型,并在企业内的精心策划目录中向用户提供这些模型。

应用程序开发者

机器学习在许多应用程序中添加辅助技术起到了重要作用。利用计算机视觉工具,我们可以轻松将照片转换为文本,填写表格,管理个人数据。语音工具可以添加语音识别,提供几乎实时的转录和翻译,或者将文本转换为语音,以便无法方便查看屏幕的一线工人和其他人使用。残障和非残障用户都可以利用这些技术:同样的工具可以帮助在汽车中实现免持续控制,或者为智能家居添加语音控制。微软的 AI for Good 基金为希望利用 AI 工具和技术提升可访问性的组织提供财务支持,使用了本书介绍的许多服务。

工业开发者

物联网是数据的强大来源,从摄像头和其他复杂边缘设备到连接传感器的数据流。随着数十亿个连接设备,传统算法难以从日益增长的数据洪流中提取相关数据。机器学习技术可以识别关键数据点,识别错误和问题或预测故障发生前的情况,以确保系统在最小停机时间内安全运行。

微软的 AI 提供

借助微软研究的专业知识,微软在自己的产品和服务中广泛使用 AI,从在 Azure 数据中心预测硬件故障到在 PowerPoint 中设计定制幻灯片布局和检测以前未见过的恶意软件。

通过微软 AI 平台,这些 AI 技术也可以用于希望提高生产力并利用云规模的数据工程师,使用云基础设施和服务或微软的框架和工具将 AI 集成到任何基础设施上的应用程序中。开发人员可以通过 Azure 云服务使用先进的机器学习算法,轻松将其操作化。不具备 AI 专业知识的业务分析师可以使用相同的基础服务,在他们熟悉的 Microsoft 工具内获得数据的高级见解。

在 SQL Server 等熟悉系统中的 AI 功能以及像 Power Platform 这样的低代码/无代码工具,将相同的模型和算法带给更广泛的用户。微软广泛的 AI 平台中各种服务和工具的重叠使开发人员可以选择他们喜欢的工作方式。它还允许在一个服务中完成的工作通过另一个服务进行重复使用。这可以是在容器中运行在云端训练的机器学习模型以进行边缘部署,或者开发人员构建定制的机器学习模型,业务分析师可以将其纳入报告中。

这种灵活性意味着,针对您具体项目可能有几种适合的选择。如图 2-1 所示,开发人员可能会使用托管服务来构建他们自己的 AI 模型,或者利用云基础设施服务来扩展使用开源框架创建的机器学习模型。他们可以利用这些模型来在业务平台上构建可扩展的 AI,利用熟悉的基础设施产品和操作系统中的 AI 工具,或者简单地调用预构建但可定制的 AI API。

随着微软 AI 组合中众多不同工具和服务的增加,查看这些服务为谁设计以及它们提供了什么是很有帮助的

图 2-1. 随着微软 AI 组合中众多不同工具和服务的增加,查看这些服务为谁设计以及它们提供了什么是很有帮助的。

在 Azure 中的托管 AI 服务和基础设施选项

Azure 机器学习是一种托管的云服务,旨在加速和管理数据科学生命周期,您可以在云端或边缘设备上使用预训练模型或训练、部署和管理自己的模型。喜欢使用命令行界面(CLI)的开发人员可以使用 Python、R 和 Jupyter Notebooks,利用像 PyTorch、TensorFlow 和 scikit-learn 等开源框架,并通过 GitHub 和 Azure Pipelines 自动化机器学习生命周期。

您还可以通过 SDK 或 Azure 机器学习工作室 Web 界面与 Azure 机器学习一起工作,支持代码优先和低代码开发。有一个拖放设计器可通过管道进行训练和部署机器学习模型,无需编写代码,还有一个图形化 UI 用于创建自动化机器学习实验和与托管 Jupyter Notebook 服务器的集成。对于部署,模型可以转换为 ONNX 格式,在云端或本地使用 CPU、GPU 或 FPGA 基础设施进行推断作为 Web 服务运行,与 Power BI 共享以用于数据分析,或直接部署到 Azure IoT Edge 设备。

小贴士

Azure 机器学习工作室与旧版 ML Studio 是不同的服务,后者是一个独立的可视化设计工具,通过连接数据集到预配置的算法和模块来构建机器学习模型;模型部署后会作为 Web 服务发布。尽管仍然可用,但 ML Studio 不如集成到 Azure 机器学习中的可视化设计工具强大和灵活,现有用户应考虑迁移。

Azure 机器学习可以与 Azure Databricks 集成,后者是基于 Spark 的托管分析平台,提供丰富的交互式工作空间,用于与其他开发人员共同开发机器学习模型;这些工作空间基于笔记本,可以包含可运行的 Python、R、Scala 或 SQL 代码,以及可视化、说明和解释。Azure Databricks 非常适合运行使用开源机器学习库和 MLflow 进行自动化的大规模密集机器学习工作流程。

通过 Azure Arc,微软的软件解决方案用于通过 Azure 资源管理器管理本地、混合和多云基础架构的组织可以在任何 Kubernetes 环境中运行一系列 Azure 服务。Arc 启用的数据服务允许您在 Arc 管理的 Kubernetes 基础设施上运行 Azure SQL 托管实例和 Azure PostgreSQL 超大规模,组织想在自己的基础设施上运行这些云数据库服务的主要原因之一是为了机器学习。在撰写时处于预览阶段的 Azure Arc 启用的机器学习允许您将 Azure 机器学习作为云服务在自己的基础设施上运行,以处理存储在这些数据库服务中的数据。

不需要托管机器学习服务但希望使用强大的数据科学工具集而无需花时间进行安装、配置和确保所有依赖关系正确的机器学习和数据专家们可以通过 Azure 数据科学虚拟机节省时间。这些预构建的 Windows 或 Linux 映像预装了 Microsoft 和开源数据科学以及开发工具,并且可以立即使用,可在 CPU 或 GPU 加速的虚拟机上运行。

可扩展 AI 的业务平台

并非每个组织都能投资一个数据科学家或机器学习开发人员团队,您也不需要开发专业知识来为您的工作流添加 AI 功能。云服务允许组织利用几乎不需要编码的组件来利用最新的突破。可扩展的机器学习已集成到微软的低代码、无代码和自动化平台,如 Power BI、Power Apps 和 Logic Apps 中。

Power BI 云服务包括数据准备工作流程,可以使用来自 Azure Machine Learning 的自动化机器学习,允许业务分析人员训练、验证和调用二元预测、分类和回归模型来分析其数据。Power BI 自动找到最相关的特征以包含在模型中,选择正确的算法,并调整模型,生成解释字段数据中影响预测的报告,以及模型的性能如何。

Power Apps 和 Power Automate 中的 AI Builder 功能让你可以使用预构建模型,如文本翻译、处理收据(甚至手写的)、或从名片中识别联系信息等。但你也可以使用组织内开发人员提供的机器学习模型,或者训练自己的模型来检测对象、处理表单、提取实体信息,并进行预测或分类。

如果你想了解在 Microsoft Power 平台的不同服务中可以使用的 AI 功能的更多详细信息,请参阅第六章。

大数据和关系数据的 AI

尽管我们没有足够的空间详细讨论这些内容,但构建和使用 AI 的选项正在越来越多的产品和平台中可用,这些产品和平台已经被开发人员和用户广泛使用。数据库和分析平台是进行机器学习的明显场所:在数据所在地运行机器学习模型可以提供最低的延迟和最高的性能,因为数据无需移动。操作系统和应用程序框架也开始包含库来加速本地应用程序中的机器学习推理:

  • SQL Server Machine Learning Services 将支持 R 和 Python 库的分析引擎内置到 SQL Server 中,使开发人员可以像使用任何其他数据库函数一样使用机器学习。如果你已经采用了 SQL Server Big Data Clusters,则可以在 SQL Server Big Data Clusters 上运行 Python 和 R 脚本。

    Tip

    尽管这些都是服务器产品,但你可以在 Azure 虚拟机上进行规模化运行,或者使用 Azure 的等效产品,在 Azure SQL 托管实例中使用 Machine Learning 服务来运行 Python 和 R 脚本进行预测分析和机器学习,使用存储过程或 T-SQL。

  • 如果你使用 Azure Data Studio 编辑和运行 SQL 查询,目前正在预览中的 Machine Learning 扩展允许你导入机器学习模型,进行预测,并创建笔记本来在 SQL 数据库中运行实验。

  • Azure Synapse Analytics 云服务结合了企业数据仓库和大数据分析;这包括使用 SparkML、MLib 和其他类似 scikit-learn 的库训练机器学习模型,但 Azure Synapse Notebooks 和 Azure Machine Learning 之间有集成。无论模型是在 Azure Synapse 内部还是外部训练的,都可以使用批处理评分来运行。

  • 假设您不需要 Azure Machine Learning 在 Azure Databricks 或 Synapse 中的集成。在这种情况下,Azure HDInsight 是一个开源云分析服务,包括 Microsoft 实现的 Apache Spark 和 MMLSpark,Microsoft 的用于 Spark 的机器学习库,可处理 Azure Storage 和 Azure Data Lake 中的数据。

使机器学习更具可移植性

开放神经网络交换(ONNX)标准以便携格式表示机器学习模型,简化了在多平台推理优化模型。您可以将常见框架的模型转换为 ONNX,以利用不同硬件平台上的加速器,无需重写模型以优化每个平台。ONNX Runtime 还提供了在 CPU 上推理的性能提升,无需额外的硬件加速器。

Azure Custom Vision 服务生成 ONNX 模型。您可以在 Azure Machine Learning 中训练和部署 ONNX 模型,创建云托管的 REST 端点,可以像其他任何 API 一样消耗它们(我们在下一章详细介绍这一点),或者使用它们从 Azure SQL Edge 和 Azure SQL 托管实例的数据中进行预测。

ONNX 模型也可以被机器学习框架使用,即使不是模型训练时所用的框架。这意味着它们可以在 Windows 10、Windows Server 2019 和后续版本中使用 Windows ML(WinML)推理引擎在 Windows 应用程序内运行,并利用 GPU 提升性能。

ML.NET 是一个跨平台开源机器学习框架,用于将自定义机器学习模型(包括 ONNX 模型)集成到 .NET 应用程序中,执行情感分析、产品推荐、价值预测、欺诈检测或图像分类等任务。您可以使用图形化的 ML.NET 模型生成器 Visual Studio 扩展构建、训练和部署自定义模型;它使用自动化机器学习来找到最佳算法,并生成代码将 ML.NET 模型添加到 .NET 应用程序中。

提示

跨平台的 ML.NET CLI 可以生成模型和 C# 代码来运行它,但适用场景比 Visual Studio 扩展少。

Infer.NET 是另一个开源的.NET 库,用于概率推断的机器学习,使用统计模型使得结果易于解释,并且随着新数据的到来可以进行学习。它被用于 Halo TrueSkill 排名服务,以找到合适的游戏对手,并且还支持 Azure 机器学习服务,建议您在处理数据时使用哪种机器学习算法。

认知服务

对于希望更多控制如何使用 AI 工具但又不想成为构建和运行机器学习系统专家的开发者,Azure 认知服务提供预构建的机器学习服务,您可以在代码中调用或在自己的服务器和网络边缘设备上运行。通过调用 REST API 或使用 SDK,您可以立即开始使用强大的机器学习模型,涵盖视觉、语音、语言、决策和搜索,无需专业的数据科学知识。

设计为在全球范围内易于使用,在单个应用程序中运行模型或在容器中本地运行,并且经济实惠,因为您按使用量付费,认知服务使您能够利用 AI 领域的最新突破,而无需构建和部署自己的模型。

如果您正在构建自己的机器学习系统,并希望在生产环境中大规模运行,操作化可能需要与开发合适的机器学习模型一样长甚至更长的时间。用于训练和运行机器学习模型的数据可能非常个人化或对您的业务至关重要,因此您需要部署具备强大安全性的基础设施。随着新技术的发展,您还需要定期更新这些系统,定期重新训练模型,以确保它们在处理的数据随时间变化时继续表现良好,或者构建新系统以跟上用户希望工作的不同方式。

认知服务减少了大部分工作,并且提供全球云规模以及边缘选择。您不必训练认知服务中使用的模型;微软提供预训练模型作为服务,并定期使用改进的训练集更新它们,以确保它们保持相关性并且能够处理尽可能广泛的源材料。不断添加新的和改进的算法和模型到不同的服务中;在某些情况下,您的应用程序将会在您不需要进行任何更改的情况下变得更加强大。

它们在全球 30 多个 Azure 区域运行,数据以符合合规方式存储和保留,有助于解决负责任的 AI 和我们在第七章和第八章中讨论的其他最佳实践。服务被本地化为多种语言,部分服务可提供超过 100 种语言支持。例如,语音转文字可提供 30 种语言,并符合 ISO、SOC 和 HIPAA 标准。它们提供严格的服务级别协议(SLA),并保证至少 99.9%的可用性。但如果延迟或法规要求,您也可以将一些最有用的认知服务在本地容器中运行,或者导出模型并构建成应用程序。

尽管它们作为云服务提供,可以通过几行代码调用,但某些特定的认知服务允许您定制数据模型,以获得更好的针对您特定问题的结果:

  • 您可以创建一个自定义视觉模型,它具有在数百万张图片上训练的图像识别能力,并快速重新训练以识别特定的人、物体或地点——您制造或销售的产品,或者零售商店是否遵守有关如何展示物品和促销活动或一次允许多少人进入的规则。

  • 可以教授会话语言理解服务的行话、俚语、地方方言以及那些常常让自动系统困惑的短语细节。

  • 您可以对您的应用程序将要使用的购物中心或赛车场的声学进行建模,以使语音识别更加准确。

  • 您可以创建自定义的语音,使电话服务、AI 助手或任何其他文本转语音场景生成的语音不仅听起来自然,而且听起来像您希望代表您品牌和组织的声音——甚至是与您品牌相关联的名人,无论是真人还是兔八哥。

作为云服务,认知服务不断改进和增加。例如,认知研究技术包括仍在认知服务实验室开发中的实验性 API 和 SDK。这些不是生产级别的 Azure 服务:它们是免费的“原样”预览,旨在提前查看可能或可能不会升级为成熟服务的全新领域。

其他 AI 服务也建立在或与认知服务一起工作,如我们在第六章中涵盖的低代码选项。

Azure 应用 AI 服务将多个认知服务与模型和业务逻辑结合起来,专门为特定任务提供使用,通常有一个专用门户,使业务用户和开发人员都能贡献。Azure 认知搜索服务中的内置 AI 丰富技能用于非结构化内容和原始形式不可搜索的内容,如扫描文档、复杂的 PDF、Blob 或需要翻译的文本,这些技能基于视觉和文本分析认知服务 API 中预训练的机器学习模型。

Azure 机器人服务是一个托管的机器人开发环境,用于利用模板和 Microsoft 机器人框架构建企业对话式 AI。

如果您想立即开始使用 Azure 认知服务和应用 AI 服务,请直接转到 第四章。

如何确定适合您的工具

对于构建机器学习系统有多种不同的选择,选择适合您应用程序的正确工具可能会令人困惑,特别是当您可以从不同的工具和服务中实现类似结果时。一种方法是考虑您希望如何使用机器学习——通过代码还是可视界面,并且您希望有多少灵活性。图 2-2 显示了不同的 Microsoft AI 选项如何适应这个谱系。

使用 Microsoft 的云 AI 服务的不同选项从无代码到专业代码的谱系,随着您在编码中的投入增加,定制选择也更多

图 2-2. 使用 Microsoft 的云 AI 服务的不同选项从无代码到专业代码的谱系,随着您在编码中的投入增加,定制选择也更多

还可以通过考虑可能的约束来帮助,无论是存储训练数据的位置、需要处理实时数据的位置,还是您自己的技能和偏好。

Microsoft 的机器学习工具可以在本地、混合系统或云中使用。您可以使用认知服务的预构建 API,或者使用 Azure 机器学习服务构建自己的模型,在云中运行模型或在自己的硬件上运行——无论是在数据中心还是在网络边缘。

Azure 提供了一系列不同的工具,以满足不同的需求和不同的专业水平。如果您希望通过 API 访问预构建模型,并在传统或低代码开发中使用有限的定制功能,Azure 认知服务提供了视觉、语音、语言、搜索和决策支持的 API。您只需要选择一个 API,选择一个 SDK,并开始编写代码来使用它。简单的基于 Web 的培训工具允许您使用自己的数据自定义多个服务的模型。

Microsoft 的低代码 Power 平台中也支持认知服务 API,例如 Power BI 分析平台以及 Power Apps 和 Power Automate 工具。使基本的机器学习成为即插即用,允许任何能构建 Excel 电子表格的人在其个人应用程序和工作流中使用 AI。

如果你喜欢构建自己的模型,可以使用 Azure 机器学习服务来构建、训练和测试它们。Python 迅速成为机器学习专家的重要工具,但是选择开发语言会影响你使用的技术和工具,仍然有多个选择。

托管的 Azure 机器学习笔记本服务允许你使用一系列流行的机器学习框架来构建和测试模型,基于其 Python SDK。如果你偏好本地开发,SDK 及其 Visual Studio Code 扩展可用于在本地托管的 Jupyter 笔记本上开发和运行大多数机器学习框架的代码。但是,如果你不使用 Python 或 R,还有一个视觉开发界面用于构建模型和类似表单的自动 ML 工具,可以自动训练和调整模型,这样你仍然可以利用云服务的优势。

如何部署机器学习系统将取决于工作负载需要部署到何处,你将处理多少数据,以及你需要系统从中获得何种类型的可操作响应。推理数据是否可以保留在本地,或者你是否需要利用 Azure 的大数据服务和灵活的计算资源?

网络仍然是任何机器学习系统的关键约束。虽然模型可能相对较小,但你可能会传输大量数据。你需要考虑带宽和延迟;你的应用程序是否与其他应用程序共享有限的网络连接?是否需要模型在特定时间内响应?

在 Azure 机器学习服务中运行的模型可以通过 REST API 访问,或者可以导出为 ONNX 以在其他地方使用,从移动设备到其他云平台。

如果推理将在设备上运行,你可以使用 Windows 内置的机器学习工具来加速 ONNX 模型,利用其 WinML API。使用 Azure 进行开发和训练可以利用其灵活的 CPU 和内存选项,允许你根据需要启动开发环境,然后在不再需要时处理它。无需投资于高性能的训练和开发系统;你只需要运行自己的推理环境即可。

边缘运行的应用程序可能需要与在本地容器中运行的工具进行交互。Azure Stack 硬件系列提供了一个容器主机,可以在本地使用认知服务,同时仍然通过 Azure 门户进行管理。本地计算还可以利用如 Intel 的 Movidius 计算机视觉模块或在现代 GPU 上使用 GPU 计算的 AI 加速器。

在处理物联网解决方案时,认知服务容器也非常有用。通过在本地运行一个带有适当认知服务容器的 Azure IoT Hub 实例,您可以处理来自边缘设备的数据流,然后将数据传递给在云中运行的应用程序。

有时候选择将取决于您需要连接的数据源。AI Builder 需要数据通过 Power Platform 存储在 Dataverse 中;Logic Apps 提供类似于 Power Apps 的低代码/无代码体验,并可以与 Azure Machine Learning 集成,并允许您使用来自更广泛范围数据源的数据。像 Azure Percept 摄像头和音频边缘平台这样的新服务使用云无代码开发工具来构建和训练视觉模型,然后可以部署到设备上,并用于传递应用程序中使用的数据流的注释。

微软的 AI 工具和平台设计用于各种技能水平,从低代码开发用于业务分析的预测系统到车辆和无人机中的复杂计算机视觉应用。您可以根据自己的需求选择想要的工具,然后在需要的地方运行它。在本章中,我们试图为您提供微软 AI 组合的广度概述,并在表 2-1 中提供了一个便捷的摘要。

表 2-1. 一览 Azure 机器学习选项

目标用户 它可以为您做什么 图形用户界面? 需要订阅 欲了解更多详情,请参见...
认知服务 开发者、数据科学家 通过网页门户或从任何语言和环境中调用任何服务来使用一些认知服务 仅代码客户端库和 REST API;某些服务包括用于设置/测试的网页门户 Azure 账户 + 认知服务资源 第四章
用于大数据的 Azure 认知服务 开发者、数据工程师 在 Apache Spark 服务(如 Azure Databricks、Azure Synapse、Azure Kubernetes Service 和数据连接器)中使用认知服务的数据 仅代码 Azure 账户 + 认知服务资源 第四章 和 “用于大数据的 Azure 认知服务”
Azure Functions 和 Azure Service Web Jobs 开发者、数据科学家 从无服务器事件驱动代码调用认知服务 API 和客户端库 Azure 账户 + 认知服务资源 + Azure Functions 订阅 第四章
Azure 应用 AI 服务 开发者、业务用户 使用具有任务特定模型的多个认知服务,有时通过 GUI 和领域特定业务逻辑扩展自己的 Azure 机器学习模型 Azure 账户 + 认知服务资源 第五章
Azure Logic Apps 开发者、集成者、IT 专家、DevOps 通过低代码应用调用认知服务,连接器封装了来自业务数据源的 API Azure 账户 + 认知服务资源 + Logic Apps 部署 第六章
Azure DevOps 和 GitHub Actions 开发者、数据科学家、数据工程师 使用持续集成/持续部署(CI/CD)调用认知服务 API;训练、更新、测试和部署自定义认知服务语言理解和语音模型;或构建 Azure 机器学习流水线 仅代码 Azure 账户 + GitHub 账户(根据需要的认知服务资源或 Azure 机器学习) 第八章 和 语言理解服务 (LUIS)语音,以及 Azure 机器学习
Power Apps 开发者、业务用户 在低代码应用中使用特定服务连接器调用认知服务,该连接器封装了 API 或使用预建和自定义模型封装部分认知服务 Azure 账户 + 认知服务资源 + Power Apps 订阅 第六章
Power Automate 业务用户和 SharePoint 管理员 通过低代码自动化工作流从服务特定连接器调用认知服务 API 仅 UI Azure 账户 + 认知服务资源 + Power Automate 订阅 + Office 365 订阅 第六章
AI Builder 业务用户、分析师和 SharePoint 管理员 在 Power Apps、Power Automate 或 Dynamics 365 中使用封装部分认知服务的预建和自定义模型 仅 UI Power Apps、Power Automate 或 Dynamics 365 订阅 + AI Builder 附加组件 第六章
Power BI 业务用户,数据工程师 导入和清理数据,以可视化报告并使用 AI 提供洞见;调用自定义或预构建的机器学习模型;准备数据用于训练机器学习模型 Power BI 订阅 第六章
Azure 机器学习 数据科学家,数据工程师,开发人员 在云端(或在边缘运行)使用 MLOps/DevOps 和广泛的算法和框架构建、训练、部署和服务模型 Azure 账户(VM 定价加 Azure Blob 存储、Azure Key Vault、Azure 容器注册表、Application Insights 和其他所需服务) 第三章
Azure Arc 启用的机器学习 开发人员,数据科学家,数据工程师,IT 专业人员,DevOps 在通过 Azure Arc 管理的自有 Kubernetes 基础设施上构建和训练模型,使用 Azure 机器学习 Azure 账户(需要 Azure 策略、其他 Azure 和 Azure Arc 启用服务) “在任何地方运行 Azure 机器学习”
Azure Synapse Analytics IT 专业人员,SharePoint 管理员,开发人员,数据科学家,数据工程师 无需 ETL 过程,摄取、准备、探索和服务数据以供机器学习 Azure 账户 + Azure Synapse Analytics “Azure Synapse Analytics 中的机器学习能力”
Azure HDInsight 数据科学家,数据工程师 使用 SparkML、MLib 和 MMLSpark 在存储在 Apache Hadoop、Spark、Hive 或 Kafka 中的数据上构建模型;使用 Hive 查询进行 Azure 机器学习模型的特征工程 Azure 账户 + Azure HDInsight “在 HDInsight 上进行机器学习”
Azure Databricks 机器学习 数据科学家,数据工程师 使用 MLflow 或 Azure 机器学习训练、管理、部署和服务机器学习模型 仅限 UI Azure 账户 + Azure Databricks “Databricks 机器学习指南”
SQL Server 机器学习服务 数据库管理员,数据科学家,数据工程师 运行 Python 和 R 脚本、包和框架(如 PyTorch、TensorFlow 和 scikit-learn),针对关系型数据进行机器学习 SQL Server 2017 及更高版本或 Azure 账户 + Azure SQL 托管实例 SQL ML 概述
SQL Server 大数据集群上的机器学习服务 数据库管理员,数据科学家,数据工程师 使用 Spark、MLib 和 H2O AutoML 运行 Python 和 R 脚本,以在 Kubernetes 上的容器中选择和调整模型,数据存储在 Hadoop 分布式文件系统存储池中 SQL Server 2019 及更高版本 + Kubernetes 基础设施(如 Azure Kubernetes 服务) SQL Server 大数据集群
Azure Data Studio 机器学习扩展 数据库管理员,数据科学家,数据工程师 在 Azure Data Studio IDE 中使用 SQL 数据库导入模型,进行预测或使用笔记本 SQL Server 与 SQL Server 机器学习服务 “Azure Data Studio 的机器学习扩展”

本书无法涵盖所有这些选项,还有其他 O’Reilly 的书籍深入探讨了其中几个。但在接下来的章节中,我们将向你展示如何使用利用云端提供灵活性和规模的 Microsoft AI 服务。让我们从 Azure 机器学习开始,这是一个云服务,您可以在其中构建和训练自己的机器学习模型,从云端调用或构建到本地运行的容器中。

¹ 如果你对 Azure 还不熟悉,可以通过微软学习课程 Azure 基础知识快速入门。

第三章:使用 Azure 机器学习、ONNX 和 PyTorch 训练、调整和部署模型

在前一章中,我们试图涵盖来自 Microsoft 的所有 AI 工具和服务的全范围。现在让我们专注于如何使用 Azure 机器学习云服务构建和训练您自己的模型,使用熟悉的机器学习框架和 Azure 以及 Visual Studio 的混合工具。我们将看看如何使用流行的 PyTorch 机器学习框架,以及如何将训练好的模型导出为 ONNX,以便与本地推断运行时(如 ML.Net)一起使用。

理解 Azure 机器学习

微软的机器学习方法是针对不同的用户群体和他们对技术使用的不同技能水平和不同期望,针对不同产品。在一个极端是 Power Platform 的 AI Builder 的任务导向的低代码连接器(我们将在 第六章 中看到),另一端是 Azure 机器学习。设计供经验丰富的数据科学家使用,它提供一个基于云的开发环境,您可以在其中使用流行框架设计、训练、运行和管理机器学习模型。

Azure 机器学习环境最好被看作是一组工具,所有这些工具都使用相同的后端模型托管基础架构,但可以混合匹配以适应您想要的工作方式。如果您是新手的高级机器学习开发者,您可以使用拖放设计器构建模型,就像低代码开发环境一样。经验丰富的数据科学家可以使用数值方法语言 R 来构建和测试模型,通过 Azure SDK 与 R 的开发工具一起工作。同时,Python 机器学习开发者可以在 Visual Studio Code 或任何其他 Python 开发环境中使用 Jupyter Notebooks。

在幕后,Azure 机器学习是一个灵活的环境,支持多种机器学习框架和方法论。这意味着支持流行的开源框架如 PyTorch 和 TensorFlow,并且能够将训练好的模型导出为 ONNX,在任何兼容运行时使用。甚至还有一种命令行选项,使用 Azure CLI 管理您的模型。

提示

我们在 第二章 中介绍了 ONNX。开放神经网络交换格式是一种用便携格式表示机器学习模型的标准,简化了在多个平台上优化推断模型的过程。常见框架如 TensorFlow、PyTorch、scikit-learn、Keras、Chainer、MXNet、MATLAB 和 SparkML 的模型可以转换为 ONNX,以利用不同硬件平台上的加速器(例如 NVidia GPU 上的 TensorRT、Intel 处理器上的 OpenVINO 或 Windows 上的 DirectML),在您希望将其运行时化时,无需重写模型以优化每个平台。

它是一个设计为随着你的发展而扩展的系统,从在本地机器上构建和训练模型,到使用云和 Azure 数据源以及计算。随着你的学习和尝试新技术,你可以将你正在使用的工具带到 Azure,然后将机器学习模型作为托管端点或 ONNX 导出交付。一旦你的模型训练完成,Azure Machine Learning 使其准备在你的应用程序中运行,无论它们在哪里,从具有神经处理器的移动设备到与 Azure Data Lakes 中存储的各种类型的数据或来自 Event Grid 和 Azure IoT 的流数据一起工作。

理解 Azure Machine Learning Studio

Azure Machine Learning Studio 是一个基于 Web 的模型开发和训练工具,专为数据科学家设计。它旨在适应不同的经验水平和编程技能,混合了传统的编程工具与无代码工具。

不要将其与现已弃用的 ML Studio 可视化工具混淆。你仍然可以获得相同的视觉设计体验,但现在与 Azure Machine Learning SDK 完全集成,以及更强大的模型设计和开发工具。如果有的话,Azure Machine Learning 是一个重要的升级,任何仍依赖于 ML Studio 的项目都应该迁移到 Azure Machine Learning。在 Studio 中开发的模型可以通过 SDK 进行修改,而 Studio 工具可以帮助调整使用 Python 或 R 开发的模型。

微软建议使用最新的 Web 浏览器版本与 Azure Machine Learning Studio 一起工作。Studio 的大部分编辑体验依赖于现代 Web 技术,构建在与 Visual Studio Code 相同的 Monaco 代码编辑工具基础上。

Azure Machine Learning Studio 适合所有类型的开发人员。有经验的 Python 数据科学开发人员可以在 Jupyter Notebooks 中工作,使用实时代码开发环境进行代码评估和调试,因此你可以在编写代码时看到代码的效果。或者,你可以从 Azure Machine Learning 设计师中开始使用现有的模型和数据集,它提供了一个拖放界面,你可以从数据集和 Azure Machine Learning 模块构建一个机器学习管道。

另一种方法是提供自动化机器学习,其中 Azure Machine Learning 可以将模型拟合和调整到你的数据。你可以结合 Azure Machine Learning 数据标注服务使用它,这将帮助你准备数据以用于机器学习模型,添加适当的标签以提高训练效果。这组选项对于将机器学习开放给更广泛的受众非常重要。无需任何数据科学经验,因为你将被引导通过上传数据的过程,然后选择最适合你数据的模型,最后在更多数据上测试以确保生成的模型可以使用。

你可以将 Azure 机器学习工作室视为机器学习的一站式平台。你可以在这里构建和管理模型,处理数据集,并添加新的数据源和存储。其他工具用于管理用于构建、测试和运行模型的计算资源。数据科学专家可以访问笔记本来构建、运行和分享实验,并通过日志帮助分析结果。同时,你可以构建流水线,将数据处理和机器学习结合在一起,确保你有最佳的模型解决你的问题。

开始使用 Azure 机器学习

Azure 机器学习提供了一套视觉和基于代码的开发工具。在本节中,我们将看看如何配置和使用它的机器学习环境。

设置机器学习环境

Azure 机器学习服务是 Azure 门户的一部分,像任何其他 Azure 资源一样进行管理。从主屏幕选择添加新资源到你的租户,然后选择“机器学习”。你可以通过它的图标识别它,它是 Azure 标志与玻璃试验烧瓶混合的图标,表示它的数据科学起源。

如果你还没有创建任何机器学习工作区,请点击“创建”按钮开始设置你的第一个工作区。这是你处理数据、构建和测试机器学习模型的地方。这个过程需要设置额外的 Azure 服务来支持你的机器学习开发,并且托管和分享你训练好的模型。首先,将你的工作区分配给一个订阅和一个资源组。如果你只是在探索这项服务,可以使用免费试用账户或来自 Visual Studio 或 Azure 学生账户的信用点。

从门户设置你的工作区名称,并将其分配给 Azure 区域。这将自动创建一个新的存储账户,以及一个用于凭据的密钥保管库和一个用于调试的应用洞察实例。此外,还可以选择一个容器注册表,如果计划将模型导出为用于 Azure 外部的容器。

完成第一页设置后,你可以选择设置公共或私有端点详细信息。私有端点更安全,但需要配置 Azure 虚拟网络和私有 DNS 的链接;你需要与你的网络团队合作(你可能还想和他们讨论第八章中的安全和数据访问的最佳实践)。当你只是试验这项服务时,公共端点应该足够了。

服务的高级设置为您提供了管理帐户访问、数据加密以及是否处理敏感数据的工具。最后一点尤为重要;如果您的数据包含个人身份信息或商业敏感数据,您可以选择使用高业务影响力工作区。这样可以减少发送给 Microsoft 的诊断信息,并应用更高标准的加密。

最后,您可以为您的工作区应用标签,以帮助跟踪其在您组织的账单报表中的成本。如果您跨业务组共享成本并且同时拥有多个机器学习工作区,这点尤为重要。在创建工作区之前,您可以审查您的设置。有用的是,Azure 提供了下载您设置的 ARM 模板的选项,因此您可以自动化未来的部署。

单击创建以构建工作区。这可能需要一些时间来部署。

一旦部署了您的工作区,您可以启动机器学习工作室开始使用您的模型。您可以在门户概述中找到工作室工作区的 URL,请将其书签以便将来快速访问服务。值得注意的是,保存工作区的属性也很重要,因为外部工具可以使用这些属性直接访问机器学习服务。

您可能需要使用您的 Azure 帐户再次登录到机器学习工作室门户;这是一个专门的环境。登录后,您将看到一个欢迎屏幕,在这里您可以选择不同的选项开始构建和训练模型。最受欢迎的三个选项有各自的启动按钮,一个用于在 Notebook 中使用 Python 和机器学习 SDK,一个用于使用自动化机器学习,另一个用于机器学习。

机器学习工作室门户在左侧菜单窗格中详细说明了三种角色:作者、资产和管理。作者角色提供了访问三个关键开发环境的权限,而资产允许您管理用于构建和交付机器学习服务的功能,从数据集、实验和管道到您的模型和用于访问它们的端点。最后,管理部分帮助您控制工作室使用的 Azure 资源,选择合适的计算和存储服务。

还有其他设置 Azure 机器学习环境的方式。一种选择是使用 Azure 机器学习 Python SDK 从您的 Python 开发环境设置一个,另一种是使用 Azure CLI。如何操作可以在平台文档中找到详细说明。

现在,您可以开始构建托管在 Azure 上的机器学习模型。

与 Azure 服务集成

Azure 机器学习工作区是一组 Azure 资源,使用统一的用户界面捆绑在一起。在幕后,有一组处理计算的 VM、用于数据的存储帐户,以及与 Application Insights、Key Vault 和 Container Registry 的集成。

Azure Active Directory(Azure AD)支持角色基础访问控制(RBAC),有助于管理用户对服务的访问,控制谁可以做什么。例如,您可以确保只有数据科学团队成员可以访问用于管理数据的存储帐户。

值得使用引导式体验工具来设置您的第一个训练环境,这样您可以查看需要配置的资源及其配置方式。首先创建一个计算环境。有三个选项:Azure 机器学习计算群集、Azure 机器学习计算实例以及通过 Azure Arc 使用 Kubernetes。Kubernetes 选项非常有趣,因为它允许您在自己的硬件和数据中心上设置自己的机器学习群集。

如果您正在使用 Azure 托管的计算资源,请选择您希望用作主机的 VM 类型。每个 VM 实例每小时收取费用。

计算 VM 可用作通用用途、计算优化或内存优化:

  • 内存优化的 VM 最适合大型数据集的训练,而计算优化的 VM 则适合延迟较为敏感的场景。

  • 您可以通过选择低优先级 VM 来节省费用,但这可能会被其他任务中断。然而,这是值得尝试的权衡。

  • 其他选项允许您选择使用 GPU VM,代码会自动优化以在 GPU 上运行。

选择您想要使用的选项,然后选择名称和您打算使用的节点数量,包括最小和最大值。您还可以启用安全外壳(SSH)访问,并将您的 VM 连接到虚拟网络。

在继续设置开发环境之前,请等待计算实例的创建。一旦创建完成,您可以选择它并设置您的机器学习平台。Azure 机器学习工作室提供四种不同的模型作为基于 Ubuntu 的 VM 映像。您可以选择使用 scikit-learn(有两个选项,其中一个添加了对 LightGBM 和 XGBoost 的支持,这两者都有助于加速训练)、PyTorch 或 TensorFlow。所有四个映像都预先配置了 Azure 机器学习 SDK,并安装了适当的 Python 包。

您现在可以配置您的训练作业,设置实验并上传您自己的代码。代码将需要从上传目录运行的 shell 命令,因此请确保添加适当的参数和任何必要的环境变量。代码也可以从工作区的 Blob 存储中运行。同时,您需要配置您的数据集,为其命名并确保它可以立即使用。

一切就绪后,您可以使用 Azure 资源运行您的第一个机器学习实验。

使用 Visual Studio Code

你不需要登录 Azure 门户即可使用 Azure 机器学习。微软为其 Visual Studio Code 编辑器提供了一组扩展,用于支持其套件中的 Azure 工具。

一旦从 Visual Studio Marketplace 安装,此扩展将在其 Azure 控制面板中添加机器学习控件,与其他 Azure 扩展并列。将所有 Azure 功能集中在一个地方有助于简化找到你需要的内容,尤其是在同一应用程序中经常使用不同的 Azure 功能。此扩展简化了与基于 Python 的机器学习产品的工作,提前安装 Visual Studio Code 的 Python 语言支持对于智能感知代码完成、基于语言服务器的语法突出显示和代码检查以及内置的 Jupyter 笔记本是非常值得的。

接下来,使用你的 Azure 帐户登录扩展以访问 Azure 机器学习资源。你可以设置一个默认工作区,从而可以访问诊断和自动完成,使用扩展添加到 Visual Studio Code 命令面板的 Azure 机器学习命令。你可以快速创建新资源,并管理通过门户创建的资源,使用 Code 来编辑 JavaScript Object Notation (JSON) 架构。一旦设置好,可以根据需要启动和停止资源。

提示

值得确保你已安装了 Code 的 YAML 和 JSON 工具,以帮助管理 Azure 机器学习配置。

在开发环境中使用 Azure 机器学习资源简化和优化了流程。你无需切换上下文;你用于处理 Python 或 JavaScript API 的相同命令面板也控制着你的 Azure 机器学习环境。

同一 YAML 编辑环境用于创建训练作业,将本地 Python 文件上传到你选择的 CPU 或 GPU 计算集群。同样,你需要从 Microsoft 的精选镜像库 中选择一个合适的环境。

Azure 机器学习 Python SDK 用于本地开发

虽然 Azure 机器学习工作室提供了一个构建和训练模型的环境,但经验丰富的 AI 开发人员和数据科学家可能更喜欢使用熟悉的开发环境和工具,将他们自己的算法和数值方法带入 Azure。其中一种方法是使用 Azure 机器学习 SDK for Python,以及你选择的 Python 开发环境。

这使您可以将 SDK 安装到诸如 Visual Studio Code 之类的工具中,并且可以在 Python 命令行上构建和测试您的模型,或者在自己的系统上使用 Jupyter Notebooks 构建、测试和共享模型,使用笔记本作为交互式代码的测试平台。一旦安装完成,SDK 将添加用于处理模型和数据集的开发生命周期工具,以及管理 Azure 云资源的工具。然后,您可以在云中或在您自己的系统上训练模型,如果您拥有大量的 GPU 处理能力,则这是一个有用的选项。

虽然大多数用户更喜欢使用 SDK 交互式地训练他们的模型,但也有使用自动化机器学习调整模型以找到最佳数据集拟合度的选项。如果您是数据科学家,您可能会发现这是从数据交付机器学习模型的有用方式。最后,SDK 提供了从模型到托管在 Azure 的 REST API 的工具,可以从任何代码中调用。

SDK 提供了一系列稳定的生产就绪功能以及实验性代码。在实践中,您可能会使用稳定的功能,将实验留给未来的探索,因为它们接近发布时可能会有错误。

Azure 机器学习平台的许多功能通过 SDK 中的一系列类访问。这些包括像 Workspace 这样的基础类,使用您的 Azure 订阅详细信息创建工作空间对象。如果您计划使用多个模型进行工作,请将配置详细信息保存为一个 JSON 文件,每次创建新的工作空间时都可以调用它。

一旦您有了工作空间,您需要创建一个实验来承载您的模型运行和结果。运行是另一个独立的类,创建一个监视试验的运行对象,通过函数调用来检索其结果。

使用 pip 安装 SDK:

pip install azure-ml core

一旦安装完成,使用导入语句将 azureml.core 引入您的运行环境。然后,您可以从代码中创建一个工作空间:

from azureml.core import Workspace
ws = Workspace.create(name='myworkspace',
                      subscription_id='<azure-subscription-id>',
                      resource_group='myresourcegroup',
                      create_resource_group=True,
                      location='eastus2'
                     )

如果您在多个脚本中使用相同的帐户详细信息,请将配置保存为 JSON 文件,并在每个脚本中加载它。

以下代码片段加载了一个工作空间的配置,然后打开一个实验,并运行该实验:

from azureml.core import Workspace, Experiment, Environment, ScriptRunConfig

ws = Workspace.from_config()
experiment = Experiment(workspace=ws, name='day1-experiment-hello')

config = ScriptRunConfig(source_directory='./src', script='run.py',
         compute_target='cpu-cluster')

run = experiment.submit(config)
aml_url = run.get_portal_url()
print(aml_url)

使用 URL 来监视运行的进度。

还有一些默认未安装的附加包,因为它们仅在特定功能中需要,例如使用自动训练或使用基于 FPGA 的 Azure 机器学习硬件加速模型进行深度神经网络。您需要一个 64 位 Python 环境来使用自动化机器学习训练,因为它需要 LightGBM 框架。还有一个薄客户端选项,用于与远程自动化机器学习配合使用,例如使用内置到 Azure 机器学习工作室中的工具。

保持 SDK 的最新更新非常重要,这样您就可以与当前的 Azure 机器学习功能集保持同步。如果使用其笔记本电脑,这一点尤为重要,因为笔记本电脑依赖于该服务。

使用 Python SDK 的一个好方法是首先使用您选择的数值方法和机器学习框架在 Python 中创建一个模型,其中 PyTorch 是最常见的选择。您需要一个模型脚本和一个训练脚本。训练脚本下载并设置您的训练集,并为您配置 PyTorch。

一旦您完成这些步骤,创建一个控制脚本,使用 SDK 构建、配置和运行您的模型,作为新工作区实验的一部分。您将能够从 Azure 机器学习工作室监视您的实验。

Azure 机器学习和 R

尽管 Python 是数据科学和机器学习的热门选择,但 R 仍然很受欢迎,特别是在构建统计模型和分析大数据时。微软在 Azure 上提供了 R 支持作为其主要数据科学工具之一,具有专门的虚拟机和支持其主要的大数据平台:Azure HDInsight 和 Azure Databricks,以及在 Azure SQL 托管实例内部,您可以在数据库中嵌入 R 代码。

R 曾经是已弃用的 Classic Azure 机器学习工作室的关键元素,其中 R 基础模型可以作为您的机器学习流水线的一部分使用。随着新版 Azure 机器学习平台的推出及其自己的拖放式机器学习工具,情况发生了变化。但是,R 支持并没有完全消失,因为它在目前预览版的 Azure CLI 2.0 中得到了支持,该版本替代了用于 R 的 Azure 机器学习 SDK。

Azure CLI 的 R 支持为您提供了完整的基于 R 的机器学习模型训练和部署环境。您将能够从命令行调用 R 代码,处理数据集和标准的 R 功能。

由于 R 专为统计操作设计,用于构建和训练模型的代码可以非常紧凑。首先使用 Azure CLI 创建适当的计算集群以供您的模型使用。然后,您可以在 YAML 中定义一个作业,加载一个 R 容器并运行您的训练代码。

以下 YAML 加载了一个 R Dockerfile,并在一组车祸数据上运行广义线性模型:

$schema: https://azuremlschemas.azureedge.net/latest/commandJob.schema.json
code:
  local_path: src
command: >
  Rscript accidents.R
  --data {inputs.training_data}
inputs:
  training_data:
    data: 
      local_path: data
    mode: mount
environment:
  docker:
    build:
      dockerfile: file:Dockerfile
compute: 
  target: azureml:cpu-cluster
experiment_name: r-accidents-example
description: Train a GLM using R on the accidents dataset.

它与使用 Python 非常相似,可以将其替换为 R,并为您的作业使用适当的 Dockerfile。这将加载与在 Azure 上工作所需的 R 包。

训练模型的 R 代码如下所示:

library(optparse)  

options <- list(
  make_option(c("-d", "--data_folder"), default="./data")
)

opt_parser <- OptionParser(option_list = options)
opt <- parse_args(opt_parser)

paste(opt$data_folder)

accidents <- readRDS(file.path(opt$data_folder, "accidents.Rd"))
summary(accidents)

mod <- glm(dead ~ dvcat + seatbelt + frontal + sex + ageOFocc + yearVeh 
+ airbag + occRole, family=binomial, data=accidents)
summary(mod)
predictions <- factor(ifelse(predict(mod)>0.1, "dead","alive"))
accuracy <- mean(predictions == accidents$dead)

output_dir = "outputs"
if (!dir.exists(output_dir)){
  dir.create(output_dir)
}
saveRDS(mod, file = "./outputs/model.rds")
message("Model saved")

您可以在用于在 Azure 机器学习中训练 R 模型的示例代码和数据中找到示例代码和数据。

使用 Azure 机器学习工作室构建您的第一个模型

工作室是 Azure 机器学习平台的核心。除了托管您自己的脚本和实验、提供管理和训练环境外,它还包括简化和加速机器学习的工具,使用自动化和可视化开发环境。

使用自动化机器学习

Azure 机器学习提供了一套有用的低代码和无代码机器学习开发工具。一旦您创建了一个机器学习工作空间并分配了计算资源,您可以使用其自动化机器学习工具创建和训练模型,而无需编写一行代码。

首先创建一个新数据集。微软提供以逗号分隔值(CSV)格式的示例数据,您可以使用它来尝试该服务;您可以将数据下载到您的 PC 上,也可以从工作室工作空间内部连接到数据。使用数据创建数据集,以便在 Azure 机器学习中使用。

在 AutoML 页面上,使用您的数据集创建一个新运行。您需要配置您的训练运行,设置实验名称并选择数据集中的目标列。这将是模型的输出数据,并将用于训练模型,使用您的计算资源。接下来,从基本机器学习模型类型的列表中选择任务类型:分类、回归和时间序列。对于大多数数值模型,您将希望选择回归。

你可以微调任务配置,选择使用的算法,是否解释模型以及定义训练运行的结束时间和方式。你会想要阻止大部分可用算法的探索,因为探索所有算法可能需要大量时间,并且可能根据计算集群的规模增加显著的成本。

一旦提交任务,服务将自动运行。您可以在工作区的“模型”选项卡中观看生成的模型。一旦运行完成,根据您的退出标准,您将会展示最佳模型及工具,帮助您确定它是否符合您的要求,显示错误率以及显示预测值和实际值是否匹配的一组图表。

值得进行一系列不同的试验,使用不同的算法。这将使您能够找到最适合您模型的算法,比较工作室仪表板中的不同运行。由于每个训练运行使用相同的数据集,您有一个有效的基准来比较不同的算法和参数集。

一旦模型训练完成并准备好使用,只需点击几下,即可将其部署为 Azure 中的推理服务,作为容器运行或在 Kubernetes 集群中运行。工作室将为您的模型生成适当的端点,带有 REST API 和一组认证密钥。您现在可以使用 Python 在工作室笔记本中测试生成的机器学习模型。

使用设计师

作为编写代码的替代方案,您可以使用无代码的 Azure 机器学习设计师。这为您提供了一个拖放界面,用于连接处理数据和训练各种常见模型所需的各种元素。生成的流水线将所有必要的步骤整合在一起,在 Azure 机器学习工作区中运行它们。

在工作室内,选择“设计师”选项以打开设计师并创建新的流水线。工具会自动创建和命名一条流水线,准备让您添加模块,如 图 3-1 所示。如果您愿意,可以将其从默认的基于日期的名称重新命名。

接下来,选择计算资源进行模型训练。您可以选择现有的目标或创建一个新的目标。有一个选项可以为所有流水线模块使用相同的目标,或者您可以为每个模块选择自定义目标。除非您有预算支持多个计算或 GPU 实例,否则最好坚持选择一个目标。资源在停止运行时会缩减到零,但这会增加它们启动时的时间。

设计师的拖放画布类似于 Azure Logic Apps 等工具使用的画布。屏幕左侧是可以添加到画布中的一组模块。首先拖放数据源,可以是您自己的数据源或一组示例数据集中的一个。选择这些后,您可以开始处理数据,使用内置数据转换来选择用于模型的列。

通过连接一个模块的输出端口到下一个模块的输入端口来连接这些元素。此过程构建了您的流水线。数据处理模块包括用于清理数据的工具,运行清理算法并将数据拆分为单独的训练和测试集。您可以选择每个集合使用的数据分数。

Azure 机器学习的设计师使用拖放工具构建流水线

图 3-1. Azure 机器学习的设计师使用拖放工具构建流水线

接下来,拖放您选择的模型。您可以选择不同类型的模型;选择适合您要进行的预测类型的模型。将您的模型连接到“训练模型”模块,并与训练集链接。这将馈入“评分”模块,该模块使用测试数据集评估生成的机器学习模型。

测试结果可以进行可视化,使您能够快速评估模型。如果结果良好,您可以快速发布它以供使用。您可以选择生成实时或批处理推理流水线。这会将网络服务输入和输出添加到您的流水线中,并移除训练模块。然后,您可以测试推理端点,然后部署到 Azure Kubernetes Service 群集中。

使用 Azure 机器学习与笔记本电脑和 Python

Jupyter 笔记本是一种开源工具,允许您链接文本、图像和代码来构建和共享实时交互式文档。这使它们成为数据科学的理想工具,因为您可以构建一系列笔记本,嵌入所有构建和运行机器学习模型的步骤,以及其文档说明。支持许多不同的语言,尽管 Python 是最受欢迎的之一。

Azure 机器学习工作室可以直接在您的工作空间中托管 Jupyter 笔记本,同时支持 Jupyter 和 JupyterLab 作者环境。笔记本在工作室中有自己的部分,具有用于存储文档和代码的文件系统和基于浏览器的终端。最后,除了您自己的笔记本空间外,还可以快速访问一系列托管 Azure 机器学习教程和样本的笔记本。

要创建新文件,请单击笔记本文件浏览器中的文件创建图标。这样可以上传文件和文件夹,创建新文件夹和新文件。选择创建笔记本文件并为其命名。这将在编辑画布上打开代码和 Markdown 内容,正如您可以在图 3-2 中看到的那样。文件也可以在外部使用 Visual Studio Code 进行编辑。

在 Azure 机器学习笔记本中使用 Python 代码

图 3-2. 在 Azure 机器学习笔记本中使用 Python 代码

与所有 Jupyter 笔记本一样,Azure 机器学习使用单元格来保存代码和内容。您可以使用集成的基于 Web 的编辑器添加新的单元格。它基于微软的 Monaco 编辑引擎(如同 Visual Studio Code 中使用的),因此完全支持代码完成和智能提示。这种组合结果是一个完整的 Jupyter 环境,具备调试工具,可管理和探索变量,是在协作空间中构建和测试原型的快速而强大的方式。可以使用任何支持 Python 的机器学习工具构建模型,例如调用 PyTorch 和 TensorFlow。

Python 代码通过 Python SDK 与 Azure 机器学习进行交互,因此您可以链接一系列单元格,加载 SDK、登录服务,然后设置和运行实验,使用一个单独的单元格来处理您的模型。微软提供了一组常见操作的代码片段,可以加快编写代码的速度,并可选择提交您选择的代码片段以供将来使用。

您还可以在笔记本中添加注释,允许围绕代码进行协作。您可以选择代码部分,并在注释窗格中添加评论。注释功能使您能够轻松创建和管理问题,并具备将其转换为对话线程的工具。一旦完成,笔记本可以导出并使用常见格式共享,用于文档编写或作为生产应用程序中的纯代码。

笔记本可以通过类似 Git 的工具进行管理,确保可以在 Azure 环境之外共享和存储。笔记本还可以在本地 Jupyter 实例上运行,允许脱机开发和测试,然后再利用 Azure 资源训练完整规模的模型。在编辑笔记本时无需担心成本问题;它们只在运行包含代码的单元格时连接到计算实例。

使用不同机器学习框架进行 Azure 机器学习工作

Azure 机器学习旨在支持多种不同的机器学习框架,预构建的计算镜像简化了使用它们训练模型的过程。这些包括流行的 PyTorch 和 TensorFlow 框架。

PyTorch 是基于 Lua-scripted Torch 的开源机器学习库,主要在 Facebook 的 AI 研究实验室开发。它提供 Python 和 C++ 接口,其中 Python 选项最常用。现在还包括对 Caffe2 的支持,支持基于张量和深度神经网络模型。

Microsoft 在内部使用 PyTorch,在 Azure 机器学习的 Python 开发环境中支持它。预构建的计算实例可用于 PyTorch 环境,使您可以快速使用 Azure 机器学习工作室中的工具。这包括通过 Jupyter 笔记本交互式地使用它,或者通过 Azure CLI 使用它。

Azure 机器学习还包括对 Google 的开源 TensorFlow 的支持。这使用 Python 数据结构来训练神经网络。由于使用 TensorFlow 构建和开发模型相对简单,因此它已成为快速开发机器学习模型的流行选择。它的即时执行选项直接与 NumPy 线性代数工具集集成,使其成为数据科学家的逻辑选择。

与 PyTorch 类似,Azure 为 TensorFlow 提供了预构建的计算环境,以及在 Azure 机器学习的 Python 开发环境中的支持。这两个框架的工作方式类似,并具有类似的性能特征。在选择使用哪种选项时,您需要考虑您的数据科学团队有何经验,以及您的预期工作负载与哪个选项更匹配。

首先将 Azure 机器学习库导入到 Python 配置脚本中,并使用它们设置一个工作空间。然后需要编写一个训练脚本,在一组带标签数据上调用 PyTorch 或 TensorFlow。脚本需要与数据一起存储在您的工作空间中。

Azure 机器学习 PyTorch 脚本与任何其他 PyTorch 脚本一样。无需更改现有脚本即可在计算目标上运行,因此任何熟悉编写 PyTorch 转换并使用其解析器的人都可以使用 Azure 机器学习。微软提供了示例脚本和数据以帮助您入门。

TensorFlow 也是如此。再次,在创建数据集引用您的训练数据之前,您将创建一个工作区,然后可以将其注册并与您的团队共享。一旦您的数据集注册完成,创建一个计算集群。

下一步是定义一个计算目标,使用 Python SDK 创建一个集群。由于 PyTorch 和 TensorFlow 都专注于张量和转换,您应该使用 GPU 集群以获得最佳结果(并将成本最小化)。Microsoft 提供了预先安装了 PyTorch 或 TensorFlow 的精选环境,这比创建带有所有适当依赖项的虚拟机要容易得多。您将受限于 Azure 当前支持的每个框架版本,尽管在实践中,除非您计划使用新功能或打算尝试预发布工具,否则这不会太大的影响。

或者,您可以使用 Python SDK 来构建自己的计算环境,使用 YAML 脚本设置适当的依赖项,安装 Python,然后使用 pip 安装您的代码所需的工具。您还需要定义您的计算环境的基础映像。

一旦这些都就位,无论是通过 CLI 还是通过一组笔记本,您都可以创建一个训练作业,包装您的数据和脚本。这将加载您的训练文件夹的内容到您的计算集群,然后运行一组训练运行。您需要为 PyTorch 或 TensorFlow 包含具体的细节。

PyTorch 训练脚本看起来会像这样:

from azureml.core import ScriptRunConfig

src = ScriptRunConfig(source_directory=project_folder,
                      script='pytorch_train.py',
                      arguments=['--num_epochs', 30, '--output_dir', 
                      './outputs'],
                      compute_target=compute_target,
                      environment=pytorch_env)

类似地,TensorFlow 训练脚本看起来会像这样:

from azureml.core import ScriptRunConfig

args = ['--data-folder', dataset.as_mount(),
        '--batch-size', 64,
        '--first-layer-neurons', 256,
        '--second-layer-neurons', 128,
        '--learning-rate', 0.01]

src = ScriptRunConfig(source_directory=script_folder,
                      script='tf_train.py',
                      arguments=args,
                      compute_target=compute_target,
                      environment=tf_env)

您会注意到,TensorFlow 要求您在 args 部分中定义神经网络的结构。

当运行时,这将为您的运行时构建适当的容器,并在集群中进行扩展,将其运行在您的训练数据上。运行的详细信息将实时记录以帮助您监控,完成后将结果复制回您的工作区。如果模型结果符合预期,您可以将其注册供 Azure 使用,或者下载结果模型以在本地使用。您还可以选择将其导出为 ONNX 格式,以便与 ONNX 推理运行时一起使用。

MLOps 简介

MLOps 是将 DevOps 原则应用于机器学习的应用,将软件开发生命周期应用于您的模型开发,并同时使用负责任的 AI 技术(参见第七章)为您的应用开发提供治理框架。这是一套重要的技术,如果要使机器学习成为一种协作和可重复的过程,则可以利用 Azure 机器学习中内置的监控和调整工具。

虽然 DevOps 在现代应用程序开发中很重要,但对于像 Azure Machine Learning 这样的平台来说,MLOps 显然更为重要。模型不同于代码;它们需要维护才能有效运行。我们拥有的数据越多,我们做出的预测也就越多;很容易看出模型失败的地方以及改进它们所需的内容。这项数据科学任务需要融入我们的机器学习应用程序开发生命周期中。

使用 Azure Machine Learning 等工具有助于将 MLOps 流程集成到您的工作流程中,如图 3-3 所示。其管道方法用于构建和测试模型,使您可以访问必要的日志文件数据,同时可调参数帮助快速拒绝失败的模型。Azure Machine Learning 还能够快速打包和部署模型,无论是作为 REST API 端点、准备好的 Kubernetes 推理容器,还是跨平台、跨设备的 ONNX。通过 Azure Machine Learning 与 Azure DevOps 平台的集成,您可以开始自动化这一过程。

Azure MLOps 生命周期描述如何使用 Azure Machine Learning 工具管理模型

图 3-3. Azure MLOps 生命周期描述如何使用 Azure Machine Learning 工具管理模型

Microsoft 的 MLOps 生命周期分为五个步骤:

  1. 使用 Azure Machine Learning Studio 创建/训练/重新训练您的模型。

  2. 注册模型以供应用程序使用;使用 GitHub 和 Azure DevOps 等工具管理模型版本。

  3. 创建评分文件和依赖项,以获取操作的审计跟踪,确保符合监管要求,并为预测结果提供解释性。

  4. 部署和监控,使用日志和其他性能监控工具获取模型操作的可观察性。

  5. 使用监控数据了解模型漂移,并基于真实世界数据和指标确定重新训练模型的最佳时机。

Azure 提供了一套监控工具,可内置到机器学习应用程序中以提高性能,同时 Azure Machine Learning 中的内置日志记录可用于在训练期间和模型作为推理器运行时改进模型。

这些监控工具还可用于在训练期间帮助调整模型,以确保它们最初是稳健的,并且重新训练将成为一个不经常进行的过程,这是一个重要的要求,考虑到训练的计算和 GPU 需求可能相当大。调整工具也是 MLOps 生命周期的重要组成部分,因为它们允许开发人员在训练过程中微调模型和构建在其上的神经网络。值得深入了解这些功能,以了解如何使用日志记录来调整您的模型。

Azure Machine Learning 中的日志记录

Azure 机器学习提供工具来监视训练运行,使用默认的 Python 日志记录工具和 SDK 中自定义的日志记录工具进行实时记录。您可以使用 MLflow 日志记录工具处理这些数据,在 Azure 机器学习工作空间安装适当的包。

pip install mlflow
pip install azureml-mlflow

您可以编写针对 Azure 机器学习服务的日志记录脚本。如果您使用笔记本来构建和测试实验,生成的数据可以在笔记本中查看,使用 Python 可视化工具。或者,您可以通过工作室获取后运行的可视化结果,使用实验选项卡查看数据并比较不同运行,并使用筛选器提取特定数据。笔记本提供交互式日志记录工具,以及用于显示日志数据的小部件。

每次运行的所有日志文件都存储在您的工作空间中,您可以下载这些文件进行额外分析,包括文本文件、JSON 和日志格式文件的混合。

使用超参数进行调整

日志可以帮助通过 Azure 机器学习的超参数来调整模型。管理学习过程的关键元素,这些元素让您能够从实验外部调整模型和神经网络的性能。在学习开始之前设置,这些设置包括学习速率和决策树中分支的数量等。

Azure 机器学习的 HyperDrive 工具可以为您自动调整参数,帮助优化参数,及早终止表现不佳的运行,并自动调整神经网络以获取最佳配置。这包括定义网络中的层数以及每层中的节点数。

在调整参数之前了解机器学习模型的深度架构非常重要。过去这是一个复杂的手动过程,需要大量计算资源。Azure 机器学习的工具允许您将调整视为实验,自动化过程的大部分,并且并行运行测试以找到模型最佳的超参数组合。

使用 Azure 机器学习 SDK 和 HyperDrive SDK 编写的超参数调整实验是用 Python 编写的。您需要定义调整特定超参数的搜索空间,用于调整的指标,如何对训练运行进行采样,以及实验如何终止。每次运行都将是完整的训练运行,加载所有数据并重建模型。

Azure 机器学习工作室提供可视化工具,帮助您确定哪个运行结果对您的模型最佳。其图表可用于展示您选择的指标与超参数数值之间的相关性。

使用超参数确实需要相当水平的机器学习理解,以帮助识别可以帮助提高模型准确性的特定参数。实际上,通过在 Azure 机器学习的自动化机器学习工具中使用自定义模型,您将获得类似的效果。

使用 ONNX 导出

Microsoft CEO Satya Nadella 谈到了“智能云和智能边缘”;正是 WinML 和 ONNX 的结合推动了大部分边缘智能。ONNX 是一个重要工具,用于在许多不同平台上推理经过训练的机器学习模型。它允许您在 Azure 机器学习中使用适当的机器学习框架开发和训练模型,当它们准备好用于通用用途时,将它们导出为 ONNX 格式,以便在目标系统上的本地 ONNX 运行时中使用。从手机到 PC,Windows 为桌面应用程序提供了自己的 WinML ONNX 服务的支持。

您可以从常见的机器学习框架(包括 PyTorch 和 TensorFlow)中导出 ONNX 文件。Microsoft 在内部使用 ONNX 以及 ONNX Runtime,显示出与使用替代推理服务相比的显著性能提升。

机器学习不仅仅创建 ONNX 模型;如果您从另一个机器学习训练服务或自己的系统中导入了 ONNX 模型,您可以在 Azure 机器学习中运行它,用它来管理和控制对服务 API 的访问,同时利用其自动推理扩展和访问 Azure 计算的全球范围。

使用 ONNX 与 WinML

Microsoft 已将一组推断 API 集成到最新的 Windows SDK 中,适用于 Windows 和 Windows Server。这些 API 支持使用预训练的 ONNX 模型,允许您利用 Azure 的规模来设计和训练机器学习模型,然后将其构建到 Windows 应用程序中。

在本地运行模型可以减少网络负载,使您可以将学习放在需要的地方,即使网络带宽很少或没有。通过本地 ONNX 模型,机器学习代码可以在任何需要的地方运行,将其带到网络的边缘。

WinML 具有适用于大多数常见 Windows 开发平台的 API,从使用 C 和 C++的本机访问,到用于 C#代码的 WinRT API。这些提供了对 WinML 运行时及其 ONNX 推理引擎的抽象,该引擎可以直接与 PC 的 CPU 配合工作,或者利用 DirectML 利用 GPU 处理能力。

在使用 WinML 时,将 ONNX 模型作为项目文件的资产包含进去。加载和运行模型的技术取决于您选择的语言,但使用最新版本的 Visual Studio 提供了工具,用于公开模型的输入和输出,以供您的代码使用。无论您使用哪种语言,与 ONNX 一起工作都使用一种通用模式:加载、绑定和评估。

您的代码需要首先从资产存储加载模型。由于 ONNX 模型可能很大,建议围绕异步方法构建您的推断应用程序来处理加载。一旦加载了模型,您可以将输入和输出绑定到它,确保您的输入和输出类支持预期的数据类型。现在,我们可以迭代我们的输入数据,为每个输入值调用异步评估方法,然后使用返回的输出数据,并在应用程序的其余部分中使用结果。

使用 WinML 和 ONNX,您可以仅需几行代码构建独立的机器学习应用程序,使用来自 Azure 机器学习的训练模型,并在您拥有 Windows PC 或服务器的任何地方运行它们。

在机器学习容器运行时中使用 ONNX

便携式机器学习系统是边缘计算的重要工具,正如我们在第二章中展示的那样,将机器学习模型放在需要的地方。为了简化部署,您可以将整个 ONNX 运行时与您的 ONNX 模型一起打包到一个容器中。部署只是加载和在边缘 Kubernetes 系统(如 K3s)上运行容器,或使用独立容器运行时。通过最小化服务停机时间和中断来处理更新。

设置 ONNX 运行时容器非常简单。首先构建一个配置了 Python 的容器映像。使用 pip 安装 ONNX 运行时,无论是用于 CPU 还是 GPU。您可以在ONNX Runtime for Azure Machine Learning找到 Microsoft 的版本。Python ONNX 运行时将模型加载为推断会话,您可以使用它提取模型数据以枚举输入和输出,以及确认模型元数据。

运行模型就像调用推断会话并提供模型输入一样简单。您可以定义要使用的输出,或者简单地接受所有响应。

Microsoft 提供了预构建的 ONNX 运行时容器,用于与预先训练的 Azure 机器学习模型一起使用。基于 Ubuntu 18.04 和 Python 3.7,设计用于使用 CPU 推断,并应该在大多数 Docker 或容器系统上运行。预安装的包还包括 NumPy 和 Pandas,因此您可以使用常见的数值方法处理结果。预构建的 Dockerfile 可以用作构建您自己图像的基础,添加额外的库和代码作为嵌套 Docker 图像。

总结

在本章中,我们探讨了使用 Azure 机器学习中的工具来构建和训练自定义机器学习模型,使用常见框架如 PyTorch 和 TensorFlow,以及其自身的无代码设计工具。但您并不总是想要构建自己的机器学习模型,因此在下一章中,我们将看看您可以调用作为 API 的预构建 AI 云服务:Azure 认知服务。

第四章:使用 Azure 认知服务构建智能应用程序

在前一章中,我们看过像 Azure 机器学习这样的云服务如何帮助你专注于构建和训练机器学习模型,而无需从头开始创建整个机器学习环境。但并非每个开发人员都希望构建自己的机器学习模型,因此在本章中,我们将向您展示如何使用现成的 AI 服务,这些服务可以直接使用或使用您自己的训练数据进行定制,并像调用其他任何 API 一样使用。

使用预建 AI

当今,“AI”一词的使用非常广泛,涵盖了许多不同的方法,但让计算机执行我们曾经认为只有人类能够做到的任务的技术,例如理解和从经验中学习,是基础的。它们包括诸如识别语音和图像以改进客户服务,检测照片中的面孔,甚至使用自拍验证应用程序,理解充满产品名称和行业技术术语的语音,或从文本合成语音的“认知”任务。

想让你的用户拍摄菜单,将其翻译成另一种语言,并展示他们的食物可能的照片吗?创建一个聊天机器人,可以为客户支持提供文本和语音聊天,还可以识别客户发送的产品图片,判断物品是否损坏,并启动退货流程,这些都是你可以通过这些认知任务的 API 将强大的 AI 功能集成到现有应用程序和工具中。

这是 AI 领域的快速发展区域,不断开发出复杂的新算法和技术。使用预建但可定制的 API 作为云服务提供认知任务,为开发人员提供了快速利用 AI 带来的商业价值的方式,并使他们的应用程序具备人性化的一面,而无需成为数据科学家。你不需要构建模型,管理机器学习系统的生产环境——或者保障它。

你不需要训练认知服务中使用的模型(尽管你可以在某些服务中构建定制模型)。微软将预训练模型作为服务交付,并定期使用改进的训练集更新这些模型,以确保它们保持相关性,并能够处理尽可能广泛的源材料。不断向不同服务中添加新的改进算法和模型;你可能会发现你的应用程序变得更强大,而无需进行任何更改,或者会有新的选项可供使用。在某些情况下,开发人员可以像微软内部团队一样快速获得新模型的访问权限。

iOS 和 Android 的 Bing 搜索应用程序可以生成听起来几乎像人说话的语音;这一点非常重要,因为研究表明,听自然语调和清晰发音的结果、方向或像有声书那样更长的内容,会减少很多疲劳感。

使用深度神经网络同时进行语音合成和韵律学(匹配语音中的重音和语调模式),而不是作为单独的步骤,可以产生更自然和流畅的语音。 这是几年前在研究实验室中的一个相对新的发展,新的研究论文仍在不断出现并进行改进。 但在 Bing 团队将神经语音合成添加到他们的移动应用程序几个月前,认知服务的语音 API 已经包括预览英语的两个神经语音合成声音,然后是中文、德语和意大利语的声音。 现在,像 Progressive Insurance 这样的公司使用定制的神经语音:Flo 聊天机器人使用演员 Stephanie Courtney 的声音,这要归功于认知服务。

即使是在人工智能方面有深厚专业知识的公司,也会转向这些服务,而不是创建自己的实现。 当优步希望确保驾驶汽车的人是注册的司机时,即使他们已经剪了头发或换了眼镜,自他们拍摄 ID 照片以来,他们使用 Azure 认知服务中的 Face API 要求司机在手机上自拍。 优步团队广泛使用机器学习,甚至为机器学习开发构建开源工具。 但他们选择认知服务是因为他们能够用几行代码交付新功能,而不是花费几个月时间将人脸检测集成到他们自己的平台中。

通过 Azure 认知服务提供的 REST API 和客户端 SDK(包括 .NET、Python、Java 和 Node.js 等语言),开发人员可以使用和定制最新的 AI 模型,用于计算机视觉、文本和视频分析、语音和知识理解,无需实现、训练或托管自己的模型。认知服务可从 Azure Functions 和 Azure 应用服务调用,或从 Apache Spark、Azure Databricks、Azure Synapse Analytics 等数据处理服务中调用,以丰富或注释大数据。 (它们也适用于 Power Platform 和 Logic Apps 中的无代码和低代码开发者:我们将在 第六章 中介绍如何使用这些功能。)

作为云服务,认知服务可以规模化,适用于成千上万的用户,在全球超过 30 个 Azure 地区的 150 个国家,以符合合规方式存储和保留数据,以便用户控制其数据。API 运行符合严格的 SLA,并保证至少 99.9% 的可用性。服务本地化支持多种语言,某些服务可提供超过 100 种不同的语言和方言。例如,语音转文字可提供 197 种语言,并符合 ISO、SOC2 和 HIPAA 标准。

此外,您还可以将一些最有用的认知服务在本地运行,通过将训练模型直接构建到智能手机应用中,并利用手机上的 AI 卸载硬件运行,或将它们运行在 IoT 设备内部的容器中,这样它们可以直接处理生成的传感器读数。

这对于远程、苛刻的环境特别适用,那里物联网设备最有用,而连接速度慢、昂贵或两者兼而有之。这也解决了数据治理的问题;例如,如果您正在使用图像识别分析保险医疗文件,您在将其带出医院网络以在云中分析时无需担心合规问题。

核心认知服务涵盖语音、视觉和语言技能,包括 Azure OpenAI 服务,以及用于决策和检测异常的服务(您可以在同一应用程序中调用多个服务)。

Azure 应用 AI 服务,我们将在下一章进行详细讲解,将这些核心服务组合成常见场景的工具,如理解视频或处理文件和文档。Azure 表单识别器利用视觉和语言认知服务以及业务逻辑来自动处理表单,正如您在图 4-1 中所见。

不必自己调用多个认知服务来从表单中获取信息,您可以使用 Azure 表单识别器,它包装了多个服务和业务逻辑,并具有预训练模型

图 4-1. 不必自己调用多个认知服务来从表单中获取信息,您可以使用 Azure 表单识别器,它包装了多个服务和业务逻辑,并具有预训练模型。

认知服务可以看作是让任何开发人员构建基于人工智能解决方案的基础组件:应用 AI 服务添加了针对特定任务的 AI 模型和业务逻辑,用于解决诸如数字资产管理、从文档中提取信息以及分析和实时数据的反应等常见问题。

核心 Azure 认知服务

有几十种不同的认知服务,分为以下主要领域,如图 4-2 所示:语音、文本、视觉和决策制定,以及 OpenAI。我们在这里没有足够的空间详细介绍它们所有;¹ 相反,我们将向您展示如何使用一些最流行的服务,但您应该发现与任何 API 和 SDK 一起工作的体验类似。

核心认知服务分为五大支柱

图 4-2. 核心认知服务分为五大支柱

语言

使用语言 API 分析、理解和翻译文本(或者与我们之前提到的语音服务一起使用)。

您可以使用问答服务将您的常见问题解答转换为交互式聊天机器人,不仅提取关键词汇,还可以了解用户说或者输入的意图,使用语言理解实现几乎实时的翻译,使用您所在业务和行业中重要的术语。这包括对复杂 PDF 文件的全文档翻译,保留其布局和格式。

提示

您可以自定义哪些认知服务语言模型?

文本分析 API 可以处理原始文本并提取其背后的情感、关键短语、语言以及它所指的实体。一句话提到“Rover”;它是一只狗还是一辆车?“Mars”是行星还是英国的糖果棒?实体识别可以找到时区、温度、数字和百分比、地点、人物、数量、企业、日期和时间、URL 和电子邮件地址。还有一种专门针对医疗领域的实体识别服务,可以从医生的笔记和电子健康记录等非结构化文档中提取医疗信息,检测可能是诊断、病症或症状、药物名称、身体部位及其他重要的医疗概念。

提示

使用情感分析来筛选客户评论和评价,并在您的网站上展示,或将结果输入 Power BI 以生成可操作的数据。使用观点挖掘选项来提取主题和观点,以获取更多细节。如果一条消息看起来是投诉,您不仅可以看到负面情感评分,还可以看到像“房间”或“把手”这样的术语,以及像“很冷”或“断在我手上”这样的短语,使您能够迅速回应客户的问题。

关键短语和实体并不能完全表达每个短语或句子的意图。我们都有不同的说话和打字方式,使用不同的词来表示相同的意思。当有人通过聊天界面订购披萨,并要求将其送到他们的住所时,他们到底是什么意思?他们真的想要披萨放在一个洞里吗?

LUIS 将关键字映射到您期望用户询问的事物列表,并将对话转换为应用程序或聊天机器人可以响应的方式列表。

例如,将 LUIS 添加到旅行社聊天机器人中可以缩小帮助客户所需的信息范围。像“我需要去希斯罗的航班”这样的声明将被解析为意图“BookTravel”和实体“flight”和“London”。将这些实体预填充到预订引擎中启动预订过程,同时聊天机器人提示用户输入其他信息,例如日期、旅行等级和出发机场。您可以看到 LUIS 如何从文本字符串中提取意图,在图 4-3 中。

LUIS 可以从某人说的话中提取实体和意图

图 4-3. LUIS 可以从某人说的话中提取实体和意图

LUIS 不是通用的机器学习模型;要充分利用它,您必须使用行业、地点和场景特定的数据对其进行训练。特定领域的预构建模型可以帮助您入门,但如果您想要最佳结果,它们还需要额外的训练。

翻译器

Microsoft Translator 是一种基于云的机器翻译服务,支持多语言翻译、转写、语言检测和字典功能:它处理超过 100 种语言和方言。核心服务是 Translator Text API,该 API 在多个 Microsoft 产品中使用,并可通过认知服务获得。同一 API 还驱动语音翻译,接下来我们将讨论这一点。

Translator Text API 使用深度学习驱动的神经机器翻译技术,这种技术在过去十年中彻底改变了机器翻译,通过将单词作为完整句子的一部分进行翻译,而不仅仅是查看每个目标词周围的几个词来解释它,从而实现更准确、更自然、更流畅的翻译。翻译引擎还会多次尝试翻译,通过以前的翻译学习来优化结果。结果是一种更具人类声音的翻译,尤其适用于非西方语言。查看当前支持的语言列表

您可以通过 REST API 访问这些模型。虽然您可以强制通过特定地区进行操作,但 Microsoft 建议使用全局选项,动态将调用重定向到任何可用的端点,通常是最接近请求位置的端点。以下 Python 代码片段调用了从英语到荷兰语和巴西葡萄牙语的翻译:

import requests, uuid, json

subscription_key = "YOUR_SUBSCRIPTION_KEY"
endpoint = "https://api.cognitive.microsofttranslator.com"
location = "YOUR_RESOURCE_LOCATION"

path = '/translate'
constructed_url = endpoint + path

params = {
  'api-version': '3.0',
  'from': 'en',
  'to': ['nl', 'pt']
}
constructed_url = endpoint + path

headers = {
  'Ocp-Apim-Subscription-Key': subscription_key,
  'Ocp-Apim-Subscription-Region': location,
  'Content-type': 'application/json',
  'X-ClientTraceId': str(uuid.uuid4())
}

# You can pass more than one object in body.
body = [{
  'text': 'YOUR TEXT TO TRANSLATE'
}]

request = requests.post(constructed_url, params=params, headers=headers,
          json=body)
response = request.json()

您可以在翻译请求中有多个目标语言,每个翻译都在同一个 JSON 返回中。响应内容指示检测到的源语言,并包括一个翻译块,其中包含每个选择的目标语言的文本和语言标识符:

[
  {
    "translations": [
      {
        "text": "TRANSLATED TEXT IN DUTCH",
        "to": "nl"
      },
      {
        "text": "TRANSLATED TEXT IN PORTUGUESE",
        "to": "pt"
      }
    ]
  }
]

返回的数据可以由您选择的 JSON 库解析。

您可以使用字典查找 API获取额外的翻译,该 API 将返回您提交的短语的替代翻译。返回的 JSON 数据将包含源文本和已翻译的文本,还有一个反向翻译,以帮助您检查翻译是否正确。响应还将提供有关您正在翻译的单词或短语的详细信息。

您可能还希望识别正在使用的语言,这样您就不会在错误的语言配对或无法翻译的内容上浪费 API 调用。

文本转写是一个有用的工具,比如,将日文或中文象形文字或西里尔文字转写为西方转写。在 REST 请求中,设置一个源脚本和一个目标脚本,在 JSON 主体中包含您希望转写的文本。运行后,返回的 JSON 将包含转写的文本。

将不同的功能组合起来,创建您自己的翻译服务——例如,检测日文文本,同时将其转写为西方文字,并进行翻译,同时显示可能可用的备选翻译。

Translator Text API 可扩展;如果您只需标记几个产品名称,可以对这些短语应用标记,以提供它们应该被翻译的方式。但如果您需要覆盖行业特定术语或对您业务至关重要的语言,Custom Translator 可让您扩展默认的翻译神经网络模型。

提示

机器翻译的主要度量标准是双语评估替代(BLEU)分数:从 0(最差分数)到 1(最佳)的数字;这是通过将您的模型翻译与人类翻译人员已有的参考翻译进行比较来计算的。

Custom Translator 支持三十多种语言,并允许您添加特定于您的业务、行业或地区的单词和短语。您可以使用“平行”文档构建新的翻译模型:已经被翻译的文档对,使它们在两种语言中具有相同内容和常见格式。该服务还可以匹配在不同文档中具有相同内容的句子;无论哪种方式,您都需要至少有一万个平行句子。您还可以提供一个特定单词、短语和句子的字典,您始终希望以相同方式翻译;这对于产品名称、需要匹配地区的技术术语或法律底稿非常有用。

训练相对较快,大约几个小时,并且可以显著改善文本和语音翻译。

为每种语言对上传字典、训练、调整和测试文档至自定义翻译器门户,您还可以与同一翻译项目上工作的同事共享访问权限。或者,您可以上传训练数据(如图 4-4 所示),并在点击“创建模型”时,由自定义翻译器构建调整和测试集。

将数据集上传到自定义翻译器门户,并点击“创建模型”开始训练;一旦训练完成,您可以查看各种指标以了解模型的准确性

图 4-4. 将数据集上传到自定义翻译器门户,并点击“创建模型”开始训练;一旦训练完成,您可以查看各种指标以了解模型的准确性。

您还可以通过 API 添加训练数据,甚至使用该 API 构建自己的服务界面,将其添加到您自己的文档门户或将提交作为文档翻译工作流程中的自动步骤。

除了翻译文本片段外,您还可以翻译整个文档并保留文本格式。文档翻译适用于 PDF、Word、PowerPoint、CSV/Excel、Outlook 消息、OpenDocument、HTML、Markdown、RTF、以及分隔符和纯文本文件。它们的大小可达 40 MB,每批次最多 250 MB,但不能使用密码或信息保护进行安全。将文档存储在 Azure Blob 存储容器中(我们在图 4-5 中展示了建议的云架构工作流程):您可以翻译单个文档或整个容器。

使用 Translator 构建文档翻译工作流的典型 Azure 架构

图 4-5. 使用 Translator 构建文档翻译工作流的典型 Azure 架构
警告

所有对文档翻译服务的 API 请求都需要一个只读密钥用于认证访问,并且使用带有您资源名称、主机名和 Translator 子目录的自定义域终结点(https://.cognitive⁠​services.azure.com/translator/text/batch/v1.0)。这不同于全球翻译器终结点(api.cognitive.microsofttranslator.com)或 Azure 门户中的密钥和终结点页面上列出的终结点。

翻译质量很高,但您可能希望将其作为第一步使用,并在使用之前让母语人士对其进行改进。如果您直接使用它们,无论是自定义还是标准翻译,都重要告知用户他们阅读的内容是使用机器翻译(并提供方法让用户告知翻译问题)。

Azure OpenAI 服务

如果您曾使用 GitHub Copilot 扩展程序生成代码建议或在 Duolingo 学习语言时纠正语法,您就已经见识过 OpenAI 的 GPT-3 大语言模型的运行情况。微软的几款产品已经基于 OpenAI 推出了相关功能。Dynamics 365 营销使用它来建议包含在营销信息中的内容。Power BI 让经验较少的用户能够用自然语言表达他们想要对其数据做什么,并为他们编写复杂的 DAX 查询(这是一个学习曲线陡峭的任务)。

OpenAI API 允许你将 GPT-3 应用于广泛的语言和代码任务,包括提取、分类和翻译,只需发送几个自由文本示例(称为提示),它会分析并用于模式匹配,预测最佳文本包含在响应中,也以自由文本形式交付。这种技术被称为“上下文”学习。通过在每个 API 调用中包含先前的响应,可以轻松保留上下文,因此如果您的应用界面允许,用户将能够迭代地询问他们的数据问题。

提示

如果你想更深入地了解 GPT-3,请查看另一本 O'Reilly 的书籍,GPT-3:利用大语言模型构建创新的 NLP 产品,作者是 Sandra Kublik 和 Shubham Saboo。

它对于内容生成非常有用,可以帮助需要创意写作或生成文章或对话摘要的用户,也许可以从客服电话中提取要点并创建行动项或分类需要人工审查的重要问题。它可以通过文档搜索找到用户问题的答案,将用户查询意图与文档的语义关系匹配,并提取关键词或生成摘要,通常是为了概括长文本或提取关键要点。你可以为教育和培训场景创建一个“我不理解这个”的按钮,OpenAI 可以用不同的措辞重新表达内容来帮助解释。简单的排名和答案提取不需要 OpenAI 的强大功能:当你需要更具生成性和开放性的问题时,使用它可以获得更大的灵活性和力量。

提示

虽然 GPT-3 模型在英语方面表现最佳,但它们也有一定的法语、德语、俄语和其他语言的知识。尽管 Codex 模型在 Python 方面最有能力,但它们可以在包括 JavaScript、Go、Ruby 和 SQL 在内的十几种语言中生成代码。模型的新迭代版本定期发布,因此务必查看最新指南文档。

您可以选择四种基本的 GPT-3 模型(Ada、Babbage、Curie 和 Davinci),它们可以理解和生成自然语言,以及 Codex 系列的模型,它们可以理解和生成代码,将自然语言提示转换为代码或用自然语言解释代码。使用 Codex 提示开发人员审查和完善建议的代码,或通过解释其工作方式并提供按需代码示例,使内部 API 和服务对技能较低的开发人员更易访问:

  • Ada 是最快的 GPT-3 模型,非常适合不需要太多细微差别的任务,例如解析文本和更正地址:您可以使用它提取诸如机场代码之类的模式。

  • Davinci 是最强大的模型。它可以执行其他模型能够完成的所有任务,通常需要更少的提示,并在需要更深入理解内容的任务上提供最佳结果,例如提取要点并生成不同长度的内容,如建议的标题或营销信息,或者以特定受众的正确语调总结内容:你可以选择适合学生的摘要,或者要求更商业或专业的语调摘要。但它也是最大的模型,需要更多的计算资源。

您可以尝试不同的模型,以找到在速度和能力之间的最佳权衡。在从快速原型设计到创建可扩展到生产环境的定制模型时,您还可以选择不同的提示方法。

要使用该服务,请按照与任何其他 Azure 认知服务相同的步骤创建 Azure OpenAI 资源。一旦资源创建完成,Azure 将生成访问密钥和终结点,供您自己的代码使用。

要处理文本,服务首先将文本分解为称为标记的块。一个标记大致相当于一个短词或标点符号。

例如,像“doggerel”这样的词将被标记为“dog”、“ger” 和 “el”,而“cat”将是一个单一的标记。调用中使用的标记数量将决定操作的成本和响应速度。API 调用受标记数量限制,这取决于输入、输出和参数的长度。使用 此 OpenAI 工具 查看文本如何被分解为标记。

与其他认知服务不同,OpenAI 模型使用自由文本作为输入和输出,使用您提供的自然语言指令和示例作为提示来设置上下文并预测可能的下一个文本。

这段代码将使用 Davinci 自然语言模型生成文本,您包含的提示将决定使用哪种三种上下文学习技术:零-shot、少-shot 或一-shot 学习。

不要把这当作通常机器学习意义上的重新训练模型——你是在生成时提供提示,而不是更新模型中的权重。相反,模型根据你在提示中包含的上下文生成关于返回最佳文本的预测,因此提供不同的提示示例将会给出不同的结果:

import os
import openai

openai.api_key = os.getenv("AZURE_OPENAI_API_KEY")

response = openai.Completion.create(
  engine="text-davinci-001",
  prompt="{Customer's Prompt}",
  temperature=0,
  max_tokens=100,
  top_p=1,
  frequency_penalty=0,
  presence_penalty=0,
  stop=["\n"]
)

零射击

你不必在提示中给出一个例子。对于快速原型设计,只需说明目标,模型就会生成响应。准确性和重复性将严重依赖于你的场景。使用自己的数据进行微调的模型将允许您更准确地使用零射击提示。

少射击

通常,您需要在提示中添加几个例子,以展示您希望响应中的格式和详细级别,以使为您生成的文本更相关和可靠。输入长度有最大限制,但根据示例的长度,您可以包含大约一百个(尽管您可能不需要那么多)。

一射击

如果您希望显示响应的格式,但不希望服务需要多个示例,可以提供一个示例。

OpenAI 服务是随机的:即使使用相同的提示,您也不一定每次都会得到相同的结果(因此,如果在聊天机器人或接口中使用,应该感觉新鲜而不是可预测的)。如果在发送提示时要求多个结果,您可以通过温度参数控制这些结果的变化程度:数值越高,您将看到的变化越大。

警告

没有保证会得到与您请求的响应数量一样多的响应:有时返回的响应可能为空白,因此您需要检查并在代码中处理它。

尝试使用来自不同模型的零、一和少射击提示,看看哪个可以为您带来最佳结果,然后使用 API 提交一个带有您的提示和完成示例的微调作业,以获取一个您可以用于测试和生产的定制模型。

警告

因为 OpenAI 服务生成的文本听起来像是人类写的,所以确保生成的内容适合您使用的方式并确保它不会被滥用是非常重要的。了解如何为此创建负责任的 AI 策略,请参阅第七章。

演讲

语音识别是应用 AI 研究最早的领域之一,但直到近年来深度学习使其强大到足以广泛应用。微软研究的首个成功实现深度学习而非传统语音识别算法的案例,帮助转变了整个行业。2017 年,由微软研究人员构建的系统不仅超越了个人,还超越了团队,准确地转录了行业标准 Switchboard 数据集中的录音电话对话。

Azure 语音服务涵盖了语音转文字、文字转语音以及多语言实时语音翻译。您可以根据特定的声学环境(如工厂车间或背景道路噪音)定制语音模型,以识别和发音专业术语;我们将在下一章节讨论如何实现这一点。或者,您可以识别特定的讲话者,甚至使用语音认证来进行访问和安全验证,具体操作包括讲话者识别和验证。语音服务可通过语音 SDK、语音设备 SDK 或 REST API 使用。

使用 Azure 语音识别工具需要使用认知服务语音 SDK。以下代码片段加载了一个语音识别器,用于检测用户话语中的意图,并使用 LUIS 作为后端进行识别过程。在这里,我们正在控制一个基本的家庭自动化应用程序,试图打开和关闭某项服务。该应用程序将使用用户的首次提交来驱动我们的假设后端服务。最后,在操作失败或取消之前,我们会检查是否识别出了意图或检测到有效的语音:

import azure.cognitiveservices.speech as speechsdk
print("Say something...")
intent_config = speechsdk.SpeechConfig(
  subscription="YourLanguageUnderstandingSubscriptionKey",
  region="YourLanguageUnderstandingServiceRegion")
intent_recognizer = 
  speechsdk.intent.IntentRecognizer(speech_config=intent_config)
model = 
  speechsdk.intent.LanguageUnderstandingModel(app_id=
  "YourLanguageUnderstandingAppId")
intents = [
  (model, "HomeAutomation.TurnOn"),
  (model, "HomeAutomation.TurnOff"),
  ]
intent_recognizer.add_intents(intents)
intent_result = intent_recognizer.recognize_once()
if intent_result.reason == speechsdk.ResultReason.RecognizedIntent:
  print("Recognized: \"{}\" with intent id '{}'".format(intent_result.text, 
        intent_result.intent_id))
elif intent_result.reason == speechsdk.ResultReason.RecognizedSpeech:
  print("Recognized: {}".format(intent_result.text))
elif intent_result.reason == speechsdk.ResultReason.NoMatch:
  print("No speech could be recognized:
        {}".format(intent_result.no_match_details))
elif intent_result.reason == speechsdk.ResultReason.Canceled:
  print("Intent recognition canceled:
        {}".format(intent_result.cancellation_details.reason))

语音转文字

以前,转录需要经过训练的人员花费数小时的时间,并使用专门的设备将语音转换为文本,这一过程更像是绘制手势而非常规打字。这种方法昂贵,即使商业服务也不能总是达到最佳人工转录的 95%准确率。

Azure 的语音转文字工具支持实时流式音频数据或预先录制的音频文件。一个订阅即可覆盖所有认知服务的语音服务,因此您可以访问语音转文字服务以及翻译和文字转语音服务。

核心语音转文字服务使用与 Teams 和 Word 相同的技术提供实时转录,因此在多种语音和多种语言的条件下得到了验证。请参阅第十一章,了解它如何在一些非常大的组织中与语音翻译一起使用。

虽然您可以指定要使用的语言,这可能会提供更准确的识别,但服务的默认设置是使用具有自动语言检测功能的通用模型,适用于大多数情况。支持的语言列表很长,并且在不断增长,涵盖大多数欧洲语言、阿拉伯语、泰语、中文和日语。并非所有语言都具有相同级别的可用定制功能,但即使不定制您正在使用的语言模型,您也应该能够在办公室或家庭应用程序中获得可接受的结果。

语音转文本可通过一组 SDK 和 REST API 使用。由于该服务主要用于流式数据,最简单的方法是使用 SDK,因为这些 SDK 允许您直接访问音频流,包括设备麦克风和本地音频录制文件。REST API 适用于快速语音命令,将语音控件添加到移动应用程序或 Web 上。如果您在 LUIS 中构建了自定义语言理解模型,您可以与语音服务一起使用这些模型来提取说话者的意图,从而更容易传达用户所要求的内容。

调用 SpeechRecognizer 时使用与 Azure 的异步连接,SDK 中处理与设备麦克风的连接并识别数据,直到发现一定量的静音。调用可以发送短语音或长话语进行识别,一旦异步过程完成,转录文本将被传送。SDK 将识别的语音返回为字符串,并包含对识别失败的错误处理。

文本转语音

语音合成对于工业环境非常有用,因为用户可能无法查看设备屏幕,或者可能正在佩戴 HoloLens。这对于无障碍功能也非常重要。越来越多地,它也用于为聊天机器人和其他消费者与品牌互动的方式赋予产品和服务一个可识别的声音。

文本转语音服务将文本转换为自然且听起来接近人类的合成语音。您可以从一组标准和高质量的“神经”语音中进行选择,或者如果您希望表达您品牌的个性,您可以创建您自己的语音。

目前提供超过 75 种标准语音,覆盖超过 45 种语言和地区设置。如果您想尝试新的神经合成语音,您可以在四种语言和地区设置中选择五个选项。

神经文本转语音是对标准语音合成的强大改进,提供人类感的语调和表达,使计算机生成的语音听起来不那么令人疲倦。如果您正在使用语音来传递长篇内容,例如为视觉障碍者叙述场景或从网络内容生成有声书,这是理想的选择。它还是在预期有大量人类互动时的有用工具,适用于高端聊天机器人或虚拟助手。神经音色使用深度神经网络合成语音,并对该语音应用重音和语调模式,从而使生成的语音听起来更加流畅和自然。

标准语音合成支持更多语言,但显然是人工的。您可以进行实验,找到合适的参数集,使其具有您想要的感觉,调整速度、音调和其他设置,包括添加停顿以增加更自然的感觉。

要充分利用文本转语音功能,您可能会在调用多个认知服务的应用程序中使用它:例如使用语音识别从用户中提取请求,通过 LUIS 传递请求以生成可用于应用程序中的意图,然后使用神经音色或您自己的自定义音色进行响应。如果将其提供给用户作为聊天机器人,请考虑使用 Azure Bot Service,该服务提供了与这些服务集成的综合体验。

使用来自 C#的语音 SDK(使用基于.NET 标准的 SDK,适用于 Windows、Linux、macOS、Mono、Xamarin、UWP 和 Unity)、C++、Java、Go、Python、Objective-C/Swift 或 JavaScript,使您的应用程序能够访问语音识别、文本转语音、语音翻译和意图识别。SDK 的某些版本支持不同的功能,您可能会发现更复杂的操作需要直接访问语音服务 API。

翻译和统一语音

当今的认知服务仍然只是微软研究项目时,微软展示的第一个深度学习服务之一是实时语音翻译工具。使用修改版的 Skype,英语说话者可以实时与中文说话者交流,使用字幕来翻译对话。

现在,这些翻译服务已经从研究阶段发展成为产品和服务,例如在 Microsoft Translator 应用程序中展示的图 4-6 中,并且语音翻译 SDK 在语音服务中可以让您为 C#、C++和 Java 应用程序添加实时翻译服务。使用神经机器翻译技术而不是传统的统计方法,这种方法利用数百万句子的大型训练集,提供更高质量的翻译。

语音翻译工具采用四步流程,从语音识别开始,将口语转换为文本。然后,通过 TrueText 引擎将转录的文本规范化,使其更适合翻译。接下来,文本通过使用面向对话优化的模型的机器翻译工具处理,然后作为文本传送或通过语音服务的文本到语音工具转换成语音。实际的翻译由 Translator Text API 完成,我们在“Translator”中详细介绍过。

Microsoft Translate 移动应用可以翻译口语或照片中的文本

图 4-6. Microsoft Translate 移动应用可以翻译口语或照片中的文本

语音翻译工具与标准语音识别工具类似,使用 TranslationRecognizer 对象处理音频数据。默认情况下,它使用本地麦克风,但您可以配置它使用替代音频源。要进行翻译,您需要设置源语言和目标语言,使用标准的 Windows 语言类型(即使您的应用程序不运行在 Windows 上)。

您需要安装 Azure Speech Services SDK 来使用翻译工具,并将您的密钥和区域详细信息存储为环境变量。对于 Python,使用:

pip install azure-cognitiveservices-speech

在完成这些设置后,设定语言,然后运行语音识别器并将语音转换为翻译文本。此处的示例代码使用您 PC 上的麦克风将法语翻译为巴西葡萄牙语。您可以选择多种目标语言,尤其是如果您服务的用户群体多样化的话。如果需要,翻译文本可以传送到语音合成器:

import os
import azure.cognitiveservices.speech as speechsdk
speech_key, service_region = os.environ['SPEECH__SERVICE__KEY'], 
  os.environ['SPEECH__SERVICE__REGION']
from_language, to_languages = 'fr', 'pt-br'
def translate_speech_to_text():
  translation_config = speechsdk.translation.SpeechTranslationConfig(
      subscription=speech_key, region=service_region)
  translation_config.speech_recognition_language = from_language
  translation_config.add_target_language(to_language)
  recognizer = speechsdk.translation.TranslationRecognizer(
      translation_config=translation_config)
  print('Say something...')
  result = recognizer.recognize_once()
  print(get_result_text(reason=result.reason, result=result))
def get_result_text(reason, result):
  reason_format = {
    speechsdk.ResultReason.TranslatedSpeech:
      f'RECOGNIZED "{from_language}": {result.text}\n' +
      f'TRANSLATED into "{to_language}"": {result.translations[to_language]}',
    speechsdk.ResultReason.RecognizedSpeech: f'Recognized: "{result.text}"',
    speechsdk.ResultReason.NoMatch: f'No speech could be recognized:
    {result.no_match_details}',
    speechsdk.ResultReason.Canceled: f'Speech Recognition canceled:
    {result.cancellation_details}'
  }
  return reason_format.get(reason, 'Unable to recognize speech')
translate_speech_to_text()

翻译作为事件交付,因此您的代码需要订阅响应流。流数据可以实时显示为文本,或者您可以使用它来生成合成翻译,如果有的话,可以使用神经语音。通过使用 API,您可以在几行代码内生成从头开始实施将成为大型项目的内容。同样,Azure 的云定价模型意味着,在您未考虑昂贵的客户端翻译服务的应用程序中添加语音是经济实惠的。

作为语言 API 的一部分,我们查看的自定义翻译模型也可用于语音翻译。

视觉

想知道图像或视频中有什么?不同的视觉 API 和服务可以识别人脸、情绪和表情、物体和著名地标、场景和活动,或者文本和手写。您可以获得完全训练的图像识别深度学习网络的所有功能,然后可以根据仅有几十个示例自定义它,以识别您需要的特定对象。用它来发现可以帮助诊断植物疾病的模式,或者对盲人分类世界并进行叙述,或者生成可以自动化图像归档和检索的元数据摘要。

Cognitive Services 中的视觉 API 和技术与 Bing 的图像搜索、OneNote 中的图像 OCR 文本以及 Azure Streams 中的视频索引相同。它们提供端点,接收图像数据并返回标记的内容,您可以在应用程序中使用,无论是菜单中的文本、某人脸上的表情,还是视频中正在发生的事情的描述。

除了 API 外,许多流行平台还提供 SDK。如果您正在使用自定义的机器学习工具和分析框架,如 Anaconda 或 Jupyter Notebooks,Python 有相应的支持。Windows 开发人员可以通过 .NET 访问计算机视觉服务,通过 Node.js 访问 JavaScript,通过 Java 访问 Android,通过 Swift 访问 iOS,还有针对系统编程的 Go 支持。

在这些 API 的背后是一组深度神经网络,经过训练执行图像分类、场景和活动识别、名人和地标识别、OCR 和手写识别等功能。

许多计算机视觉任务由单个 API 命名空间 Analyze Image 提供,支持最常见的图像识别场景。当您调用 API 命名空间中不同的端点时,将使用适当的神经网络对您的图像进行分类。在某些情况下,这可能意味着图像会经过多个模型,首先识别对象,然后提取附加信息。这样一来,您可以使用超市货架上的图片,不仅识别展示的包装类型,还可以识别销售的品牌,甚至检查特定产品是否按正确顺序摆放(这在手动审核时既耗时又昂贵)。

Analyze Image API 试图检测和标记各种视觉特征,并使用边界框标记检测到的对象。在示例 Cognitive Services 亭中使用 Vision API 进行实验,如 图 4-7 中所示。这些功能包括:

  • 标记视觉特征

  • 检测物体

  • 检测品牌

  • 图像分类

  • 图像描述

  • 检测人脸

  • 检测图像类型

  • 检测领域特定内容

  • 检测色彩方案

  • 生成缩略图

  • 检测感兴趣的区域

你可以调用 Analyze Image 端点将许多这些任务组合在一起——例如,提取标签、检测物体和面部——或者你可以通过使用其特定端点单独调用这些功能。其他操作,如生成缩略图,需要调用特定任务的端点。

使用 Vision API Explorer 查看 Analyze Image 返回图像的信息

图 4-7。使用 Vision API Explorer 查看 Analyze Image 返回图像的信息

对于比简单面部识别更高级的计算机视觉 API 需求,使用独立的面部 API 来比较两张面孔,通过面部搜索在存档中查找相同人物的图像,或者将自拍与存储的图像集进行比较,以通过面部识别而不是密码来识别某人。当你想要了解物理空间中的运动和存在时,空间分析 API 会从 CCTV 或工业摄像头摄取视频,检测并跟踪视频中的人物在空间中的移动,并在他们与你在空间中设置的感兴趣区域互动时生成事件。你可以使用这些功能来统计进入空间的人数,观察他们通过某个区域的速度,或跟踪遵守社交距离和戴口罩指南的情况。

警告

使用面部识别、空间分析和视频分析服务时,特别需要负责任地使用:请查看第七章的指导,了解如何处理此类问题。

要开始使用计算机视觉,使用 pip 下载 SDK。你还需要 pillow 图像处理库。

pip install --upgrade azure-cognitiveservices-vision-computervision
pip install pillow

使用了 在 SDK 和所需组件就绪后,你可以开始编写代码。首先导入库,然后添加你的密钥和终端 URL,最后进行服务验证:

from azure.cognitiveservices.vision.computervision import ComputerVisionClient
from azure.cognitiveservices.vision.computervision.models 
  import OperationStatusCodes
from azure.cognitiveservices.vision.computervision.models 
  import VisualFeatureTypes
from msrest.authentication 
  import CognitiveServicesCredentials

from array import array
import os
from PIL import Image
import sys
import time
subscription_key = *"PASTE_YOUR_COMPUTER_VISION_SUBSCRIPTION_KEY_HERE"*
endpoint = *"PASTE_YOUR_COMPUTER_VISION_ENDPOINT_HERE"*
computervision_client = 
  ComputerVisionClient(endpoint, CognitiveServicesCredentials(subscription_key))

设置好后,你现在可以开始分析图像了。我们将使用一个图像 URL 作为起点:

remote_image_url = "INSERT_IMAGE_URL_HERE"

我们的应用程序将使用计算机视觉 API 的物体检测功能。一旦图像处理完成,它将显示已检测到的内容及其位置。你可以使用这些数据快速在图像上添加叠加框和字幕:

print("===== Detect Objects - remote =====")
detect_objects_results_remote = computervision_client.detect_objects(remote_image_url)
print("Detecting objects in remote image:")
if len(detect_objects_results_remote.objects) == 0:
  print("No objects detected.")
else:
  for object in detect_objects_results_remote.objects:
    print("object at location {}, {}, {}, {}".format( \
    object.rectangle.x, object.rectangle.x + object.rectangle.w, \
    object.rectangle.y, object.rectangle.y + object.rectangle.h))
提示

大多数计算机视觉工具返回机器可读的信息,但有时你需要文本,这些文本可以用作字幕或音频描述的读出。通过调用/analyze端点或独立的/describe端点来使用此功能。描述作为 JSON 文档返回,以信心水平的有序列表形式,同时附带可用于额外上下文的标签。

当您使用图像分析请求图像的标记时,返回的数据是一个单词列表,您可以使用它来分类图像,例如创建一个包含所有包含汽车零件或在室外拍摄的图像集的画廊。通过为图像提供多个标记,您可以为图像集创建复杂的索引,然后用于描述所描绘的场景,或在存档中查找特定人物、物体或标志的图像。

我们可以将以下代码片段添加到我们的对象识别代码中,以生成带有其置信水平的对象标记列表:

print("===== Tag an image - remote =====")
# Call API with remote image
tags_result_remote = computervision_client.tag_image(remote_image_url )

# Print results with confidence score
print("Tags in the remote image: ")
if (len(tags_result_remote.tags) == 0):
  print("No tags detected.")
else:
  for tag in tags_result_remote.tags:
    print("'{}' with confidence {:.2f}%".format(tag.name, tag.confidence * 100))

要使用此 API,您需要上传静态图像或提供图像 URL 链接。API 将返回包含识别对象的 JSON 文档,以及您可以用作截止值的置信度值,用于定义何时应用标记(或何时向用户显示标记)。选择一个较高的阈值以避免虚假阳性和匹配不良干扰标签和搜索结果。

对象检测还可以获取图像或 URL;它返回对象的边界框坐标及其之间的关系:例如“树”是否在“房子”旁边,或“汽车”是否在“卡车”的前面。品牌检测 API 是产品标志的专业版本。如果您想为特定类别的图像改进识别,可以训练定制视觉模型:我们将在下一章节介绍如何执行这些步骤。

图像分类是比其他图像分类工具更高级的方法:它有助于过滤大量图像集,以查看图像是否相关,以及是否应使用更复杂的算法。类似地,分析图像 API 可以告诉您图像是否是照片、剪贴画还是线条艺术。

决策制定

需要在某些事情开始出问题时检测问题并获得警告吗?您可以使用异常检测 API 来发现欺诈、检测 IoT 设备中传感器故障、捕捉服务或用户活动中的变化模式、在故障开始时检测中断,甚至在金融市场中寻找异常模式。这是微软用来监控其自有云服务的异常检测,因此它可以处理非常大规模的数据。

设计用于实时或历史时间序列数据,使用单个或多个传感器的多个指标,该 API 确定数据点是否异常,并确定是否需要将其作为警报传递,而无需提供标记数据。

如果你在使用异常检测的 Python,你还需要安装 Pandas 数据分析库。使用 pip 安装它和 Azure 异常 SDK。这里的代码片段还使用本地环境变量来存储你的密钥和端点数据。在运行应用程序之前,请先创建这些变量。你还需要一个包含时间序列数据的 CSV 文件,并将其路径传递给你的代码。

此代码将分析一组具有每日粒度的时间序列数据,查找数据中的异常。然后它将指示在文件中发现异常的位置,使您可以将数据传递给进一步的分析,并警告负责生成数据的设备或服务的相关人员:

import os
from azure.ai.anomalydetector import AnomalyDetectorClient
from azure.ai.anomalydetector.models import DetectRequest, TimeSeriesPoint, 
  TimeGranularity,
  AnomalyDetectorError
from azure.core.credentials import AzureKeyCredential
import pandas as pd
SUBSCRIPTION_KEY = os.environ["ANOMALY_DETECTOR_KEY"]
ANOMALY_DETECTOR_ENDPOINT = os.environ["ANOMALY_DETECTOR_ENDPOINT"]
TIME_SERIES_DATA_PATH = os.path.join("./sample_data", "request-data.csv")
client = AnomalyDetectorClient(AzureKeyCredential(SUBSCRIPTION_KEY), 
  ANOMALY_DETECTOR_ENDPOINT)
series = []
data_file = pd.read_csv(TIME_SERIES_DATA_PATH, header=None, encoding='utf-8', 
  parse_dates=[0])
for index, row in data_file.iterrows():
  series.append(TimeSeriesPoint(timestamp=row[0], value=row[1]))
request = DetectRequest(series=series, granularity=TimeGranularity.daily)
print('Detecting anomalies in the entire time series.')

try:
  response = client.detect_entire_series(request)
except AnomalyDetectorError as e:
  print('Error code: {}'.format(e.error.code), 
        'Error message: {}'.format(e.error.message))
except Exception as e:
  print(e)

if any(response.is_anomaly):
  print('An anomaly was detected at index:')
  for i, value in enumerate(response.is_anomaly):
    if value:
      print(i)
else:
  print('No anomalies were detected in the time series.')

Personalizer 服务利用强化学习来选择向在线购物者推荐哪种产品,优先显示哪些内容给特定访客,或者在哪里放置广告。它可以处理文本、图像、网址、电子邮件、聊天机器人回复或任何有一个较短的行动或选择列表的地方,内容足够提供排名使用的上下文信息,服务有足够的流量可以继续学习。每次 Personalizer 服务进行选择时,基于购物者或读者的反应(他们是否点击了链接、滚动到底部或购买了产品,选择了不同的东西或四处查看然后选择了所提供的东西),服务会获得一个介于 0 和 1 之间的奖励分数,用于改进已经训练好的模型。我们将在第十二章中看到 Personalizer 服务的实际应用,它为在线市场推荐提供支持。

内容审核

无论您是想保持聊天室的家庭友好性,还是确保您的电子商务网站不提供印有不幸或冒犯性短语的产品,内容审核服务都能提供帮助。图像和视频索引器 API 可以检测到成人或“性感”内容,这可能不适合您的受众。还有一个图像审核工具,可以识别可能具有冒犯性或不愉快的图像,包括使用 OCR 查找冒犯性语言。

图像和视频上传到服务并传递到分析图像 API。将返回两个布尔值:isAdultContent 和 isRacyContent,以及置信度分数。

首先通过 pip 安装内容审核库:

pip install --upgrade azure-cognitiveservices-vision-contentmoderator

您现在可以开始构建一个与 Azure 协作以审核您站点上内容的服务。在这里,我们提供了一个要检查可识别面孔的图像列表:

import os.path
from pprint import pprint
import time
from io import BytesIO
from random import random
import uuid
from azure.cognitiveservices.vision.contentmoderator 
  import ContentModeratorClient
import azure.cognitiveservices.vision.contentmoderator.models
from msrest.authentication import CognitiveServicesCredentials
CONTENT_MODERATOR_ENDPOINT = *"PASTE_YOUR_CONTENT_MODERATOR_ENDPOINT_HERE"*
subscription_key = *"PASTE_YOUR_CONTENT_MODERATOR_SUBSCRIPTION_KEY_HERE"*
client = ContentModeratorClient(
  endpoint=CONTENT_MODERATOR_ENDPOINT,
  credentials=CognitiveServicesCredentials(subscription_key)
)
IMAGE_LIST = [
  *"image_url_1”*,
  *"image_url_2"*
]
for image_url in IMAGE_LIST:
  print("\nEvaluate image {}".format(image_url))
print("\nDetect faces.")
evaluation = client.image_moderation.find_faces_url_input(
  content_type="application/json",
  cache_image=True,
  data_representation="URL",
  value=image_url
)
assert isinstance(evaluation, FoundFaces)
pprint(evaluation.as_dict())

内容审核不仅适用于图像;它还可以处理文本内容。这可以找到更多不只是成人或性感内容的内容;除了寻找含有冒犯性语言的内容(包括有意拼写错误以逃避审核的术语),它还扫描个人可识别信息(PII),这在许多司法管辖区受到规定的管制。您可以添加自定义术语 - 例如,如果您不希望包括提到竞争品牌的帖子。您可以像处理图像一样创建 API 封装器。更全面的 Azure 内容审核服务包括用于经常提交的内容的自定义列表,您无需每次分类即可直接拒绝。

提示

您可以自定义哪些认知服务决策模型?

  • Metrics Advisor(您必须登录 Azure 账户才能打开此网址)

  • Personalizer: 在 Azure 门户下个性化你的模型。

结语

在本章中,我们看了看使用 Azure 认知服务可以实现的内容,包括预构建或定制模型,通过 API 或 SDK 调用,但我们将它们视为独立的选项,这可能不是你在实际应用中想要的。单个认知服务很强大,但通常你会想要结合多个认知服务来处理更广泛的场景。你可以在代码中自行实现这一点,但有些服务开发人员使用得如此普遍,以至于 Microsoft 已将它们捆绑成应用 AI 服务。继续阅读以了解你可以用它们做些什么。

¹ 如果你想了解更多关于不同认知服务及其如何使用的细节,请查阅在线文档或查看我们之前的书籍,使用认知 API 构建智能应用

第五章:使用 Azure 应用 AI 服务处理常见场景

在前一章中,我们看了可以用于特定任务的各个认知服务。现在,我们将专注于涵盖从文档或视频中提取信息等常见场景的高级应用 AI 服务。

Azure 应用 AI 服务

单个认知服务功能强大,但通常您会希望结合多个认知服务来处理更广泛的情景。如果您正在制作聊天机器人,您可能会从 QnA Maker 开始,然后使用 LUIS 使机器人更好地理解用户试图实现的目标,并使用语音服务使人们能够与您的机器人交谈和输入。由于这是一个非常流行的业务场景,微软建立了 Azure Bot Service 作为一个集成环境,将所有这些工具汇集在一起。

机器人服务是 Azure 应用 AI 服务之一,它基于核心认知服务,无论是结合多个服务还是将业务逻辑和 UI 包装在单个服务周围以处理常见的业务问题。

例如,Azure Metrics Advisor 基于异常检测器 API 构建,并提供一个基于 Web 的工作空间,简化了从多个来源摄取数据和配置设置(例如您希望模型对异常值敏感程度如何),以及构建解释不同指标如何相互关联的图表。正如您在 图 5-1 中所看到的,它还将异常分组及根本原因分析建议与其他细节整合到一个事件中,您可以深入研究图表和数据树以进行自己的分析。这样可以更容易地看到指标的情况,在出现异常时,以及您应该采取什么措施;您还可以设置通知,以通知相关工程、服务或业务团队。

虽然使用异常检测器 API,但 Metrics Advisor 将认知服务 API 与业务逻辑结合在一起,并将其呈现在 Web 工作空间内

图 5-1. 虽然使用异常检测器 API,但 Metrics Advisor 将认知服务 API 与业务逻辑结合在一起,并将其呈现在 Web 工作空间内

您可以将数据点标记为正常或异常,以训练模型,因为它会为您提供建议;您还可以标记趋势变化的拐点,注意时间序列数据的季节性(夏季和冬季的可接受温度水平或交付延迟可能非常不同),并对多个连续点进行反馈,以便在只能在其周围的点的上下文中看到异常的情况下处理。

你可以使用 Azure 度量顾问分析时间序列数据,非常适合跟踪业务指标、物联网监控或任何类型的 AIOps;你可以在问题发生时发现问题并防止停机或设备损坏。三星使用度量顾问来监控其智能电视服务的健康状况。通过多变量分析,你可以监控多个系统和数据源,覆盖像智能建筑这样的复杂场景,你可能需要包括温度、房间占用率以及不同的供暖和冷却系统,以了解异常低的电力使用是否意味着存在问题。

除了度量顾问门户网站,你还可以使用 REST API 查看所有这些信息,这可以与现有的分析工具或业务应用程序集成,比如你为利益相关者建立的关键绩效指标仪表板。

警告

在撰写本文时,表格识别器是唯一可以在边缘设备或自己的服务器上运行的应用 AI 服务,如果你有无法存储在云端的文件,或者需要在网络连接差的地方处理文件。

Azure 视频分析器

你可以从视频中提取大量信息。如果你有一个拥有成千上万资产的视频库,使用 Azure 视频分析器可以提取元数据进行索引或控制播放;使用面部、情绪和口头语言来使你的视频可搜索;或者使用索引来触发自动化操作。将所有这些整合在一起,你可以处理多个小时的视频,涵盖十几个主题,提取人物和主题,添加字幕,并在其他内容旁边放置链接,从而帮助解释视频中的内容。

洞察力以层次结构呈现,从汇总开始,显示了为视频和音频发现的洞察力(如面部、情绪、情感、品牌、主题或关键词),以及它们在视频中发生的时间码。随着深入挖掘,你可以通过查询不同的洞察力维度获得更详细的信息,例如从识别的语音中提取的转录、视频中出现的个人名单,甚至是视频中显示的 OCR 信息。

洞察力可以涵盖视频、音频或两者。视频洞察力可以检测人物并在每一帧周围绘制边界框以帮助追踪他们,在检测和分组面孔后提取缩略图图像,识别名人或为其训练的自定义面部模型,识别物体和动作,并进行 OCR 文本。你可以利用检测到的人员信息进行趋势分析(了解客户在商店中移动的方式或他们在结账队列中等待的时间长短),或者帮助分析事故或抢劫等关键事件。

视频制作中还有一些特定的见解:识别节目的开头或结尾片头,检测关键帧和空白帧,并标记组成视频的场景和镜头。

音频见解可以清理嘈杂的音频,检测语言并转录音频(可以使用自定义语言模型),翻译转录文本或将其转换为字幕,检测如鼓掌(或沉默)等声音以及情绪(基于语音和其他音频提示),或者识别谁说了哪些话并生成每个人说话频率的统计数据。视频分析器还可以检测非语音的音频效果:警报声、玻璃破碎声、狗叫声等。

结合的见解从屏幕上显示的语音和文本中提取关键词、品牌和情感,并列出视频转录中涵盖的主要主题。

提示

在这个GitHub 存储库中找到一个预构建的解决方案,它使用 Video Analyzer、Azure Machine Learning 的数据标记 AutoML Vision 解决方案、认知服务和 Azure Functions 创建自定义视频搜索:它已经训练好可以识别狗的品种,但您也可以使用自己的自定义视觉模型。

在需要执行工作场所安全、管理视觉检查或优化流程(如在机场登机口周转飞机)的工业场景中,Azure Video Analyzer 使您能够构建智能视频应用程序,集成物联网解决方案(使用 IoT Edge 模块和您可以在图 5-2 中看到的架构)和视频分析,无需建立和运行实时视频管道的复杂性。

Azure Video Analyzer 将 IoT 边缘与云 AI 服务结合起来,帮助您理解空间内发生的情况

图 5-2. Azure Video Analyzer 将 IoT 边缘与云 AI 服务结合起来,帮助您理解空间内发生的情况

当飞机降落时,机场工作人员必须协调将乘客和行李从飞机上卸下,并连接到本地电源,进行飞机清洁、安全检查、加油、补给餐饮、以及为出港航班装载货物、行李和乘客。通过视频分析跟踪这些工作意味着机场团队可以知道飞机周转是否比平常花费更长时间,因此他们可以分配更多工作人员或者警告航空公司可能存在的延误,甚至在问题发生时检测到安全问题。视频分析器还可以生成指标以跟踪时间内的绩效表现。

您可以分析现有的闭路电视和 RTSP(实时流媒体传输协议)IP 摄像机的实时或录制视频;如果您处理实时视频,可以在边缘处进行高延迟处理,或在边缘上记录相关视频片段以适应带宽有限的部署。视频分析使用认知服务定制视觉和空间分析 API,以及您自己的定制模型,用于检测和跟踪人员和物体,当物体越过某条线时触发事件或通知,识别和加标语音,并从这些转录中挖掘见解,帮助您理解发生了什么。

您还可以通过插入视频分析器播放器小部件在 Power BI 中查看视频和分析结果,该小部件通过 REST 调用您的视频分析器端点。您可以从视频分析器门户获取嵌入代码,选择仪表板,小部件设置,并向下滚动至选项 2 - 使用 HTML;添加您自己的令牌,并将其作为 Web 内容瓦片插入 Power BI 仪表板中。

认知搜索

员工仍然平均每年花费两周的时间查找信息,企业文件搜索很少像网络搜索引擎那样有效。通过使用机器学习来丰富您想要索引和搜索的非结构化文档,提取结构,转换信息并添加元数据,您可以使文档搜索功能更强大。这使您可以根据文档中提到的人员或组织对文档进行分类,或使用文本搜索图像中的对象。新字段被添加到源文档中,通过例如实体关系对它们进行丰富。将大量文档转化为信息图,通过其中提到的人员、产品和其他实体进行链接,您不仅仅可以查找文档,还可以更轻松地理解文档内容及其彼此之间的关系。

Azure 认知搜索是基于高效、广泛使用的“最佳匹配 25”算法构建的全文、基于关键字的搜索引擎:非常适合关键字,但在查找“如何在 Exchange 中添加用户”或“如何预订假期时间”等自然语言查询最匹配文档时效果不佳,因为很多不相关文档也包含这些关键字。因此,它还使用语义搜索,利用大型基于转换器的语言模型(与 Bing 使用的技术相同)。语义排序将最符合搜索词意义的文档排在搜索结果的顶部,语义答案从顶部文档中提取相关部分,根据其回答查询的效果对它们进行排名,并从可能很长的文档中提取最佳匹配并突出显示在结果的顶部,语义标题使用机器阅读理解突出显示搜索结果中包含的相关词或短语的预览中。

语义搜索支持 Microsoft 文档中的搜索功能,根据相关概念群集重新排列顶部结果,因此您可以从所有关于特定产品或主题的文档中看到一些非常相关的结果。在 图 5-3 中,您可以看到当您在阅读可视化工具或管理员控制台相关内容时,搜索具有多重含义的常见词语建议非常不同的页面。

认知搜索可以处理 PDF、PowerPoint、Word 文档、JPEG、CSV 和文本文件以及其他业务文档,从多个来源提取数据,包括 SharePoint Online 索引器、Azure Files 索引器,或通过使用 Power Query 连接器。它使用认知服务 OCR API 从图像中提取文本,并使用文本分析 API 提取关键短语,并检测位置、人员和组织。它还包括自动完成和拼写校正、地理空间搜索以及分面,这些功能为结果添加类别和过滤器。

在认知搜索中的语义排名功能建议,如果您在阅读有关用户功能时搜索“关键词”,则找到有关使用 Power BI 的文档,但如果您在查看管理员文档时查找有关身份验证密钥的信息

图 5-3. 在认知搜索中的语义排名功能建议,如果您在阅读有关用户功能时搜索“关键词”,则找到有关使用 Power BI 的文档,但如果您在查看管理员文档时查找有关身份验证密钥的信息。

有 .NET、Java、Python 和 JavaScript 的 SDK,或者您可以通过用于索引、查询和 AI 丰富化的 API 使用认知搜索。以下是查询中的关键属性:

queryType

设置为“语义”以进行语义排名和回答,“简单”或“完整”。

searchFields

对要应用语义排名的字段的有序列表。首先放置标题或任何摘要字段,然后是 URL、文档正文和任何其他字段。

queryLanguage

写作时,“en-us” 是唯一支持的值,但这将允许多种语言。

speller

设置为“词典”以在查询项上进行拼写校正或“无”。

answers

设置为“抽取”以进行语义答案和标题或“无”。

假设您希望突出显示关于“模拟游戏”的创建者的一些信息,该游戏旨在测试计算机是否表现出智能行为:阿兰·图灵。以下是用于获取语义排名结果(指定要排名的字段)、语义答案和标题以及自动更正原始查询中的任何拼写错误的查询:

POST https://[service name].search.windows.net/indexes/[index name]
    /docs/search?api-version=2020-06-30-preview 
Your POST will need a JSON body with the query details:
{  
   "search": " Where was Alan Turing born?",  
   "queryType": "semantic", 
   "searchFields": "title,url,body", 
   "queryLanguage": "en-us", 
   "speller": "lexicon",
   "answers": "extractive" 
}

响应以 JSON 形式返回,可供您的应用程序使用。这里我们展示了搜索阿兰·图灵出生地的响应:

{
  "@search.answers": [
    {
      "key": "a1234",        
      "text": "Turing was born in Maida Vale, London, while his father, Julius…",
      "highlights": " Turing was born in <strong>
      Maida Vale, London</strong> , while …",
      "score": 0.87802511
    }
  ],
  "value": [
    {
      "@search.score": 51.64714,
      "@search.rerankerScore": 1.9928148165345192,
      "@search.captions": [
        {
          "text": " Alan Mathison Turing, (born June 23, 1912, 
               London, England—died June 7, 1954…",
          "highlights": " Alan Mathison Turing, (born June 23, 1912,
               <strong/>London, England</strong>—died June…",
            }
      ],
      "id": "b5678",
      "body": "…"
    },
    … 
  ]
}

认知搜索不仅仅是智能查询结果的关键:您还可以通过使用文本翻译等认知服务或通过 Web API 自定义技能接口调用另一个应用 AI 服务(如表单识别器)来增强要搜索的内容。如图 5-4 所示,使用 Azure 机器学习编写自定义技能应用程序作为 HTTP 触发器,每当索引新文档时,您都可以自动创建翻译并将其索引化。

您可以在创建索引或稍后连接时将 Azure 认知搜索的认知技能添加到其中

图 5-4。您可以在创建索引或稍后连接时将 Azure 认知搜索的认知技能添加到其中
提示

Microsoft 建立了JFK 文件,作为从多种格式的大量数据中提取信息的示例。但是,如果您现在开始像那样的项目,您可能希望在技能中使用第四章中的 OpenAI 服务来提出比 JFK 文件当前支持的更复杂的问题。

Azure 表单识别器

几乎每个组织都必须处理客户、员工或供应商填写的表格。如果您希望自动化这些流程,您需要能够从可能是打印或手写的纸质表单中提取信息,以便将其存储在数据库中并用于触发工作流程。如果您有像合同和保险报价这样的法律和财务文件,则通常包含您需要提取的数据表。即使它们不是表单,Azure 表单识别器也可以处理 70 多种语言的这两种情况。

在下一章中,我们将展示业务用户如何通过 Power 平台中的 AI Builder 功能使用同一服务,这里称为表单处理,但开发人员也可以通过调用 Form Recognizer REST API 或客户端库 SDK(如 C#,Java,JavaScript 和 Python)将文档处理集成到他们自己的应用程序中。您还可以使用 API 和 SDK 来训练自定义模型,并在 Logic Apps、Microsoft Power Automate 和 Microsoft Power Apps 中使用连接器。

表单识别器使用认知服务 OCR、文本分析和自定义文本 API 来查找表单和表格中的字段,并提取每个字段中的文本或手写文本作为键值对,因此它可以识别护照上的姓名字段和显示的姓名。

Form Recognizer 提供了预构建模型,用于发票、销售收据、名片和身份证,或者您可以自行训练自定义模型,以提取文本和布局信息。这样,您可以忽略发货表单顶部的地址和送货细节、表格上的标题以及底部的模板信息,只提取您需要的字段,如发票编号、提供的项目和价格。

Tip

使用 Form Recognizer 示例工具可以尝试预构建、布局和自定义模型。您可以通过 Form OCR 测试工具此处或者在 Docker 容器中使用以下命令来试用:

docker pull mcr.microsoft.com/azure-cognitive-services
  /custom-form/labeltool:latest-2.1

工具的代码也可以通过OCR Form Tools获取。要使用该工具,您需要在 Azure 门户中配置 Form Recognizer 资源,并复制 API 密钥和终结点到相应字段中。如果要训练模型,您还需要 Azure Blob 存储用于训练文档(或者如果在容器中运行工具,则可以使用本地存储)。选择要处理的文件,您将看到提取的字段、表格和文本的预览,并使用高亮显示显示它们在表单上的位置。您可以将 JSON 输出下载为文件。如果需要本地处理文档,还可以在容器中部署 Form Recognizer 服务。

对于文档,Form Recognizer 提取包括具有合并单元格或无可见边框的复杂表格在内的表格、复选框和类似的标记,以及文档的文本和结构。您可以在图 5-5 中查看数据的外观。

预构建模型可以从不同类型的表单中提取重要信息:名片模型查找姓名、职位、地址、电子邮件、公司和电话号码;官方身份证模型查找身份证号码、姓名、国家到期日期和出生日期,但在收据上提取所有文本、时间和日期、商户信息、项目明细、销售税和总数。发票模型也提取所有文本,并查找如发票编号、客户详细信息、供应商详细信息、发货地址、账单地址、总额、税费、小计和项目明细等字段,因为可能包含合同条款或其他重要细节。您可以使用 FormRecognizerClient 调用这些模型,返回包含 RecognizedForm、FormPage、documentResults 和 pageResults 部分的 JSON 输出。

Forms Recognizer 可以检测文档中的表格和字段;这是预构建模型自动从银行对账单中提取交易表格

图 5-5. Forms Recognizer 可以检测文档中的表格和字段;这是预构建模型自动从银行对账单中提取交易表格。

首先安装 Form Recognizer 客户端:

pip install azure-ai-formrecognizer

接下来,设置你的端点和订阅密钥的变量。现在你可以调用 FormRecognizerClient,使用定制模型、预训练收据模型,或者使用默认识别设置而不使用特定模型。

下面的代码片段登录到一个端点,并尝试识别上传收据中的内容:

form_recognizer_client = FormRecognizerClient(endpoint, AzureKeyCredential(key))
receiptUrl = *"URL TO A RECEIPT IMAGE"*

poller = form_recognizer_client.begin_recognize_receipts_from_url(receiptUrl)
result = poller.result()

for receipt in result:
  for name, field in receipt.fields.items():
    if name == "Items":
      print("Receipt Items:")
      for idx, items in enumerate(field.value):
        print("...Item #{}".format(idx + 1))
        for item_name, item in items.value.items():
          print("......{}: {} has confidence {}".format(item_name, item.value, 
          item.confidence))
    else:
      print("{}: {} has confidence {}".format(name, field.value, 
      field.confidence))
警告

表单可以是 JPG、PNG、PDF 或 TIFF 文件;在文本 PDF 中获得最佳结果,但表单识别器可以扫描图像和 PDF 中的 OCR 文本和手写文字。文件大小必须小于 50 MB,页面尺寸不能大于 A3,图像至少为 50 × 50 像素,但不能大于 10,000 × 10,000 像素,长文档只会扫描前 200 页。

如果你有特定的表单类型要处理,你可以用至少五个样本(和另一个用于测试的示例)训练一个定制模型。你可以使用表单识别示例工具中的图形界面,或者使用 FormTrainingClient 通过 REST API 调用。

下面的代码片段将在存储在 Azure 存储账户中的表单图像上训练一个识别器模型:

trainingDataUrl = "PASTE_YOUR_SAS_URL_OF_YOUR_FORM_FOLDER_IN_BLOB_STORAGE_HERE"
poller = form_training_client.begin_training(trainingDataUrl, 
         use_training_labels=False)
model = poller.result()
print("Model ID: {}".format(model.model_id))
print("Status: {}".format(model.status))
print("Training started on: {}".format(model.training_started_on))
print("Training completed on: {}".format(model.training_completed_on))
print("\nRecognized fields:")
for submodel in model.submodels:
  print(
    "The submodel with form type '{}' has recognized the following fields: 
    {}".format(
      submodel.form_type,
      ", ".join(
        [
          field.label if field.label else name
          for name, field in submodel.fields.items()
        ]
      ),
    )
  )

# Training result information
for doc in model.training_documents:
  print("Document name: {}".format(doc.name))
  print("Document status: {}".format(doc.status))
  print("Document page count: {}".format(doc.page_count))
  print("Document errors: {}".format(doc.errors))

在训练时,你不一定需要为你的表单进行标记;表单识别器使用无监督学习来理解布局,并检测字段和条目之间的关系。对于许多表单,这将产生足够好的结果。

如果你有更复杂的布局,或者字段没有 Form Recognizer 可以使用的名称(因此它没有键来分配这些值),你可以在标记的表单上进行训练;同样,你需要五个相同类型、相同结构的标记表单。表单识别器仍然会学习表单本身的布局,但会使用你的标签来识别字段和表格。

要在表单识别示例工具中尝试此功能,请创建一个新的自定义项目(你需要包含训练数据的 Azure Blob 存储容器的详细信息,以及你的 Form Recognizer 端点用于连接设置)。在左侧窗格中选择 Tags Editor 图标,这样你就可以看到表单列表(你可以在图 5-6 中看到这一点)。这将提取文档的文本和表格布局信息,并在文本元素周围绘制边界框。点击表格/网格图标,预览提取的任何表格信息。

在表单识别示例工具中,标记你的示例表单中的字段和表格

在表单识别示例工具中,标记你的示例表单中的字段和表格。

在右侧的标签编辑窗格中为要提取的每个字段的键值对创建标签(可以为每个标签设置格式和数据类型)。您还可以为表格创建标签(即使它们没有表格布局):点击“添加新表格标签”图标,然后选择表格的行数是固定还是可变以及标签是在行还是列上。使用格式和数据类型标记表格中的各个字段。

然后在中间的主编辑窗格中选择要应用标签的文本元素或表格单元格以及在标签编辑窗格中要使用的标签。如果字段有标签,请勿包含该标签:只需包含字段中的内容。如果训练表单上有空字段,有时会填写,请将其标记为标签。

从窗口左侧的工具栏中选择“训练”图标,然后单击“训练”以训练您的自定义模型。完成后,请检查平均准确度和置信度值;如果值较低,您可以标记更多文档并重新训练模型。您还可以在工具栏中单击“分析”图标,以在表单上尝试您的模型(但不要使用您训练过的表单之一)。

提示

如果您对类似表单的不同布局有多种不同的布局——来自不同供应商的发票或不同服务的运输标签——您可以为每个自定义模型(带标签)进行训练,并将它们分配给一个组合模型。这样,您可以通过单个模型 ID 调用它们所有,并且表单识别器运行分类器来选择当前表单使用的模型。

Azure 机器人服务

Azure 机器人服务汇集了构建、测试、部署和管理自定义聊天机器人(具有对话界面的 Web 应用程序)的所有不同工具和服务,可以连接一个或多个渠道:可以是 Facebook、Teams,在您的网站上嵌入,用于呼叫中心,或通过 Alexa 或 Google Assistant 作为服务公开。查看在图 5-7 中如何完美结合。

您可以使用 Microsoft Bot Framework SDK 或 Bot Framework Composer 创建机器人,后者是一个具有视觉设计界面的 IDE,可在 Windows、macOS 或 Linux 上运行(或作为 Web 应用程序在云中运行),并允许您直接发布机器人。您可以通过在 Bot Framework Composer 的画布上拖动动作并按照提示与认知服务集成来开始构建机器人,或者创建 Power Virtual Agents,然后通过 SDK 进行扩展。您甚至可以将 Power Virtual Agent 主题作为 Bot Framework Composer 中构建的机器人的 Bot Framework 技能使用。

组成会话型 AI 体验的组件

图 5-7. 组成会话型 AI 体验的组件

Bot 服务简化了使用认知服务如 Speech、QnA Maker、语言理解和视觉在机器人中的应用,从而您可以处理更复杂的输入并更好地理解用户需求。您可以通过 Composer 中的包管理器选择 Bot 框架的技能和组件,或者发布您自己的组件到 NuGet 和 npm,或者作为私有订阅集成到您组织中构建的其他机器人中。

您可以使用 Bot Framework Analytics 跟踪机器人的健康状态和行为,这些使用 Application Insights 查询和 Power BI 仪表盘。

如果您之前没有构建过机器人,Bot Framework Composer 包含了 QnA 机器人、管理日历的机器人模板,或者包含多种能力的全功能企业助理机器人模板。或者您可以使用开源的 Virtual Assistant 项目模板,用于 C# 和 TypeScript,其中包含业务逻辑和处理用户请求。

Immersive Reader

密集复杂的文档可能难以理解。一些人需要更大的字体或更好的对比度来快速在屏幕上阅读。使用与 Edge、Teams 和 Word 中相同的辅助工具,可以使您自己的托管文档应用程序更易于阅读。Immersive Reader 可以以多种语言大声朗读内容,将其翻译成更多语言(超过 60 种),或者使用高亮显示和颜色聚焦注意力以隔离内容并使其更易读。您可以查看 Edge 浏览器如何集成 Immersive Reader 的示例在 Figure 5-8。

Edge 中的阅读模式使用 Immersive Reader 减少干扰,使专注于文本变得更加容易,还可以进行颜色编码以显示语法,甚至可以翻译成不同的语言

图 5-8. Edge 中的阅读模式使用 Immersive Reader 减少干扰,使专注于文本变得更加容易,还可以进行颜色编码以显示语法,甚至可以翻译成不同的语言。

Immersive Reader JavaScript 库是一个 Web 应用程序,您可以将其作为 iframe 集成到 C#、JavaScript、Kotlin、Java(Android)或 Swift 应用程序中;您还需要构建一个按钮来关闭 Immersive Reader UI 并配置 Azure AD 身份验证。该服务解析带有 ID 标签的 HTML 文档。

(虽然我们在本书中的其他示例中使用了 Python,但在这里我们使用 JavaScript 来配合 Immersive Reader SDK。)

您可以直接在 Web 应用程序中使用 SDK,或者通过 npm 或 Yarn 加载它用于 Node.js 应用程序。

在网页中,使用以下行加载库:

<script type='text/javascript' 
  src='https://contentstorage.onenote.office.net/onenoteltir
  /immersivereadersdk/immersive-reader-sdk.1.1.0.js'></script>

要在您的网页中使用库,添加一个 HTML 元素来加载 Immersive Reader 启动按钮。这将调用 SDK。您可以编写文档对象模型解析代码以处理页面上的现有内容,或者从其他来源分块加载内容。您的内容需要是一个内容字符串:

<div class='immersive-reader-button' onclick='launchImmersiveReader()'></div>

这会启动以下功能以在沉浸式阅读器中显示一些文本。您需要传递认证令牌和服务端点的 URL 以及一些内容:

function launchImmersiveReader() {
  const content = {
    title: 'Immersive Reader',
    chunks: [ {
      content: 'This is Immersive Reader in action.'
    } ]
  };
  ImmersiveReader.launchAsync(*YOUR_TOKEN*, *YOUR_SUBDOMAIN*, content);
}

使用迁移学习在几分钟内训练视觉、语音和语言模型。

许多认知服务 API 和部分应用 AI 服务在配置资源后即可使用;另一些服务可以通过使用自有数据进行训练来改进。你可以在 LUIS 中使用预建立的领域和词典,如音乐或日历条目,并且服务会从用户询问的内容中学习。但你也可以构建自定义词典,覆盖用户可能谈论的实体、他们希望完成的任务以及他们可能表达意图的方式。同样,你可以告诉 Microsoft Translator 有关你业务中使用的产品名称和术语,以使翻译更加实用,或者训练 Form Recognizer 服务识别你经常使用的表单布局。

对于视觉和语音识别,你可以训练一个定制模型。这利用迁移学习,采用已经通过大规模训练集学习的深度神经网络模型,然后去掉一个或多个最终层,这些层用于输出预测或分类,替换为针对你特定任务训练的新层。这样,你可以利用大规模训练的大模型,并用相对较少的数据快速调整以解决你的问题。

创建定制视觉模型。

如果你需要识别图片,比如你公司生产的产品范围及其可能遭受的损坏类型,或者你希望即使公司标志歪斜在卡车侧面也能找到,标准的图片标记服务可能不够精确。

计算机视觉 API 无法区分受特定疾病感染的叶子与未充分浇水的植物叶子,或受精的鸡蛋中的健康卵囊与发育不正常的卵。它也无法检测电路板是否正确焊接,或者处理工业过程中产生的泡沫量是否适合农业用水。

定制视觉服务允许您基于一小组标记图像构建自定义分类器,显示确切的对象、条件和概念。您可以用它处理客户发送的图像,将其与廉价摄像机配对,以替代或补充如分光计之类的昂贵设备,将模型导出到智能手机以为员工提供即点即答的应用程序,或使用容器将训练模型嵌入无人机或智能摄像头中进行实时识别。

自定义视觉使用迁移学习,从多层预训练的 ResNet 模型中移除一些最终层,专门用于特定领域(食品、地标、零售、成人或一般图像识别分类器),然后重新训练您上传并标记对象或场景的少量图像。为了获得最佳结果,您的训练集可以仅包括 30 到 50 张图像,最好涵盖不同的摄像机角度、光照和背景变化,物体大小的多样性,以及单个和分组主题。如果相机角度固定,请标记始终在镜头中的常见物体,如背景中的设备。

您可以创建多个模型并层叠它们以改善易混淆类别的区分度(如西红柿和甜椒或三明治和蛋糕层)。您可以构建用于检测对象或对其进行分类的模型,并将图像分类为单一类别(多类别分类)或应用与图像匹配的多个标签(多标签分类)。通过自定义视觉门户(如图 5-9 所示),或者通过代码上传图像。

自定义视觉门户

图 5-9. 自定义视觉门户使得上传和标记训练图像变得轻松

通过设置概率阈值滑块来调整何时认为预测是正确的。将阈值设置高有利于精确度而不是召回率(分类会正确,但找到的数量较少);将其设置低有利于召回率,因此大多数分类将被找到,但可能会有误报。尝试不同设置,并使用最适合您项目的阈值作为从模型检索结果时的过滤器。

警告

我们在第七章中看到的负责任人工智能考虑事项可能最适用于图像识别,特别是面部识别和空间分析。重要的是要有一个平衡的数据集,涵盖您想要分类的对象范围,不要引入任何虚假的相关性(例如将尺子或硬币放置以显示比例),否则您的自定义模型将表现不佳。我们在第八章中更详细地讨论这一点,作为机器学习最佳实践的一部分,还包括理解训练性能和实现准确可靠的结果。

对于具有挑战性数据集或需要非常精细分类的情况,门户中的高级训练选项允许您指定自定义视觉服务在训练模型时要花费的时间长短。一旦您对模型的准确性感到满意,您可以从门户的性能选项卡将其发布为预测 API,并获取预测 URL 和预测密钥以在您的代码中调用。

以下代码片段展示了如何构建自定义视觉模型,首先标记和上传数据,然后进行训练。训练完成后,模型可以发布并用于分类图像。一旦您在 Azure 门户中使用自定义视觉创建资源,首先导入自定义视觉库:

pip install azure-cognitiveservices-vision-customvision

这将使您能够向您的代码添加特定的库,用于训练和预测。在将它们添加到代码之前,您需要从门户获取各种密钥和终结点详细信息。

自定义视觉服务的大部分功能可以通过编程方式处理,例如创建您的训练项目:

publish_iteration_name = "classifyModel"
credentials = ApiKeyCredentials(in_headers={"*Training-key*": training_key})
trainer = CustomVisionTrainingClient(*ENDPOINT*, *credentials*)
# Create a new project
print ("Creating project...")
project_name = uuid.uuid4()
project = trainer.create_project(project_name)

现在可以将您的训练标签添加到项目中。我们将构建一个能够区分空客飞机和波音飞机的模型:

jumbo_tag = trainer.create_tag(project.id, "Boeing 747")
superjumbo_tag = trainer.create_tag(project.id, "Airbus A380")

每个标签都需要一组训练图像,每次上传最多 64 张图像:

base_image_location = os.path.join (os.path.dirname(__file__), "Images")

print("Adding images...")

image_list = []

for image_num in range(1, 11):
  file_name = "jumbo_{}.jpg".format(image_num)
  with open(os.path.join (base_image_location, "Boeing 747", file_name), "rb") 
  as image_contents:
    image_list.append(ImageFileCreateEntry(name=file_name, 
    contents=image_contents.read(), tag_ids=[jumbo_tag.id]))

for image_num in range(1, 11):
  file_name = "superjumbo_{}.jpg".format(image_num)
  with open(os.path.join (base_image_location, "Airbus A380", file_name), "rb") 
  as image_contents:
    image_list.append(ImageFileCreateEntry(name=file_name, 
    contents=image_contents.read(), tag_ids=[superjumbo_tag.id]))

upload_result = trainer.create_images_from_files(project.id, 
  ImageFileCreateBatch(images=image_list))
if not upload_result.is_batch_successful:
  print("Image batch upload failed.")
  for image in upload_result.images:
    print("Image status: ", image.status)
  exit(-1)

接下来,我们训练模型。这可能需要一些时间来运行:

print ("Training...")
iteration = trainer.train_project(project.id)
while (iteration.status != "Completed"):
  iteration = trainer.get_iteration(project.id, iteration.id)
  print ("Training status: " + iteration.status)
  print ("Waiting 10 seconds...")
  time.sleep(10)

一旦模型训练完成,就可以发布了:

trainer.publish_iteration(project.id, iteration.id, publish_iteration_name, 
  prediction_resource_id)
print ("Done!")

现在我们可以对模型运行预测,使用飞机的图像来测试其操作:

prediction_credentials = 
  ApiKeyCredentials(in_headers={"Prediction-key": prediction_key})
predictor = CustomVisionPredictionClient(ENDPOINT, prediction_credentials)

with open(os.path.join (base_image_location, "Test/test_image.jpg"), "rb") 
  as image_contents:
  results = predictor.classify_image(
    project.id, publish_iteration_name, image_contents.read())

  # Display the results.
  for prediction in results.predictions:
    print("\t" + prediction.tag_name +
       ": {0:.2f}%".format(prediction.probability * 100))

所有这些可以构建成一个应用程序,或分成单独的训练和预测应用程序。

在线运行模型的优点是,在更新模型时,无需重建应用程序,但在高延迟可能会引起问题的图像和视频识别情况下,本地部署可能是更好的选择。如果您想将自定义视觉分类器嵌入应用程序以在设备上本地运行它,可以将其导出为适用于 Android 的 TensorFlow、适用于 Web 和使用 JavaScript 框架构建的应用程序的 TensorFlow.js、适用于 iOS 11 的 CoreML、适用于 WinML 的 ONNX 或作为 TensorFlow 模型和从 Python 调用模型所需的服务的 Windows 或 Linux 容器(也可以在 ARM 硬件上运行)。这意味着使用一个紧凑的域可能略低于标准域的精度;如果您一开始没有选择紧凑域,可以转换为它,但您将不得不重新训练模型,因此如果想要离线使用自定义视觉模型,请提前计划。

自定义视觉还支持 Microsoft 的 Vision AI DevKit,这是一个 300 美元的智能摄像头开发和测试平台,拥有部署自定义视觉模型和在网络边缘运行它们所需的所有硬件。

创建自定义语音模型

语音识别的一个难点在于人们说话的多种方式。语音风格、韵律、口音和词汇都有所不同,您的领域可能有不寻常的术语,或者您可能需要识别可能会与日常用语混淆的产品名称。语音录制的场所可能会带来额外的挑战;在驾车通道的背景噪音或商场的声学环境或大厦前台的接待处,这些都与某人在手机上说话完全不同。与使用默认语音模型不同,您可以为特定任务构建自定义语音模型。可以利用定制语言模型理解口音或处理特定词汇,这是在现有训练模型基础上的延伸。

提示

您可以使用无代码的 Speech Studio 可视化环境 定制 Custom Speech、Custom Commands(用于语音控制应用程序)和 Custom Voice(用于文本转语音)服务,然后使用 Speech SDK、Speech CLI 或 REST API 在您的应用程序中调用它们。

您可以添加声学模型,以考虑各种环境中准确识别的复杂性:在车辆、工厂车间或户外工作时。如果您在一个预期嘈杂环境中使用语音识别 —— 比如在车内使用语音识别,或者使用特定设备可能会以特定方式处理声音 —— 那么肯定需要添加自定义声学模型,而且如果您这样做,您可能想要在容器中本地运行这些模型。您还可以构建自定义语言模型,无论是为了特定的技术词汇还是为了提高对口音语音的识别。

对于训练,您可以上传音频文件,或只需包含行话、技术术语和其他特定于您领域的短语的句子的文本,这些短语可能无法被正确识别。文本训练更快速 —— 几个小时而不是几天 —— 所以从这里开始看是否足以满足您的需求(并非所有 Azure 区域都有专用的音频训练硬件)。为了获得最佳结果,包括使用特定词汇的文本,在不同的句子和上下文中涵盖您期望这些术语被使用的方式。您可以提供高达 1.5 GB 的原始文本数据。

对于音频训练,您需要在与您的代码识别语音的相同条件下录制五个或更多音频文件。这意味着人们在环境中说话,或对着您计划使用的设备说话。您也可以使用此方法来调整语音识别到单一声音,这是转录播客或其他音频来源的有用技术。但如果您想识别多个说话者,则需要录制多种声音的录音:不同的口音、方言、性别和年龄,甚至可能是在一天中不同时间或急于时录制的人的声音,因为压力会影响语音模式。

数据需要以 8 kHz 或 16 kHz 的 WAV 文件格式存在,并使用单声道录音。将它们拆分成 10 到 12 秒的片段以获得最佳结果,并以静音开头和结尾。每个文件需要一个唯一的名称,并且应包含一个单独的话语:查询、名称或简短句子。将文件打包到一个小于 2 GB 的单个压缩文件夹中,然后上传到 Speech Services 网页门户中显示的 图 5-10。

在 Speech Studio 中上传语音样本和转录以创建自定义模型

图 5-10. 在 Speech Studio 中上传语音样本和转录以创建自定义模型。

每个文件都需要以正确格式的转录作为陪伴:文件中的单行文本,以音频文件名开头,然后是一个制表符,再接着是文本内容。上传完毕后,请使用 Speech Services 门户应用自定义语音并选择压缩文件夹作为适应数据。运行导入过程将您的数据添加到 Speech Service 中,这些数据将自动处理。然后,您需要一个数据集来进行测试:其中包括长达五小时的音频和一个人工标记的转录。

语音识别的准确率通常通过词错误率(WER)来衡量。计算模型的所有错误,无论是多加一个不该有的词(插入),少了一个应该有的词(删除),还是识别错误的词(替换),然后除以测试转录中的单词数,再乘以 100 得到比率。如果你希望频繁重新训练模型以提高准确率,请设置一个 CI/CD 工作流来训练和测试模型,以查看 WER 是否有所改善。

提示

使用 此模板 创建一个 DevOps 工作流,以使用 GitHub Actions 训练、测试和发布 Azure 自定义语音模型。

如果您需要在嘈杂的环境中或使用像对讲机这样的低保真设备识别人们在说什么,还可以使用您的数据创建一个自定义声学模型:从 Azure 的基础模型创建一个新模型,一个用于定向语音,一个用于对话语音,并添加您自己的声学数据。自定义声学模型可以与默认语音模型或自定义识别模型配合使用。

一旦您的自定义模型训练完成,部署一个可以在您的代码中调用的自定义端点。

总结

在本章中,我们介绍了一些最有用的预构建云 AI 服务,这些服务可以从 Azure 调用(或在您自己的基础设施上的容器中运行部分服务),您可以使用 API 和 SDK 从自己的应用程序中调用这些服务。

但是,你不必成为一个从头开始构建应用程序的开发者才能使用认知服务和应用 AI 服务;其中一些服务也可在微软的无代码和低代码工具中使用,例如 Power Platform 和 Logic Apps。在下一章中,我们将看看业务用户如何与开发者合作或独立操作,利用这些预构建的云 AI 服务进行分析、自动化,并使低代码应用程序更加强大。

第六章:人人都能学机器学习:低代码与无代码体验

云 AI 服务不仅适用于熟悉编写调用 API 的专业开发人员,例如我们在第四章中介绍的认知服务。企业用户和企业开发团队都在采用低代码和无代码工具,这些工具使创建使用云 AI 服务的定制应用程序变得更加简单和快速,就像他们使用存储或任何其他功能一样。在本章中,我们将向您展示如何在 Power 平台和逻辑应用程序中使用 AI。在许多情况下,您仍将使用认知服务;您无需成为经验丰富的开发人员即可利用它们,但我们还将探讨这些开发人员如何将其专业知识带到这些平台上,以帮助企业用户取得更多成就。

注意

在本章中,我们展示了多种使用人工智能功能和服务的方式,这些功能具有重叠的功能。在选择要使用的工具时,请始终考虑您想要实现的目标、您熟悉使用的工具以及您需要从创建的任何 AI 模型中获取结果的位置。如果您需要一个带有可视化图表的报告来帮助人们理解情况并使用数据进行决策,Power BI 是开始的地方,但您在 Power BI 中使用的模型可能是通过该服务或其他地方构建的。Power BI 还具有用于准备和转换数据的工具,这些数据将在其他 Azure 服务中使用。如果您需要一个应用程序或工作流来执行或自动化数据和 AI 可以帮助的操作,请考虑使用 Power Apps 和 Power Automate。当您习惯于使用 Azure 并且您需要使用机器学习的数据未存储在或无法从 Power 平台访问时,逻辑应用程序可能是合适的工具。

微软 Power 平台

微软的业务应用服务——Power BI、Power Apps、Power Automate 和 Power Virtual Agents——总称为 Power 平台。Power BI 用于构建仪表板和报告以可视化和分析数据;Power Apps 是一种低代码图形服务,用于构建响应式应用程序;Power Automate 用于工作流和流程自动化(包括桌面应用程序);Power Virtual Agents 是一个引导式无代码界面,用于创建聊天机器人(使用基于认知服务的 Bot Framework Composer 进行低代码扩展)。

这些无代码和低代码工具构建在 Azure SQL 等 Azure 服务之上,它们可以单独使用或组合使用来分析数据、通过定制应用程序对数据进行操作、自动化业务流程,并以其他方式扩展和定制 Office 365 和 Dynamics 365。正如您在图 6-1 中所看到的,它们还可以通过连接器、控件和其他使用 Azure Functions 等云服务的组件进行扩展,以便经验更丰富的开发人员可以为低代码用户提供更强大的功能。

Power Platform 服务依赖并与许多其他微软服务集成,对不同级别的开发人员都有用

图 6-1. Power Platform 服务依赖并与许多其他对不同级别开发人员有用的微软服务集成

不同的 Power Platform 服务利用 Azure AI 服务来处理和丰富数据,包括图像识别、表单处理或文本分类等功能,以为非结构化内容添加结构化标签。

Power BI 广泛使用 AI 功能;内置的 AI 可视化功能使用户能够对数据集进行自然语言查询,识别数据中的异常值和关键影响因素,或帮助用户深入分析根本原因。几种认知服务已集成到 Power BI 中用于数据准备,业务分析师可以直接在 Power BI 中使用自动化机器学习为 Azure Machine Learning 创建机器学习模型。

Power Apps 和 Power Automate 都包括 AI Builder,这是一个类似向导的低代码 AI 平台,用于丰富和分析存储在 Microsoft Dataverse 中的数据,提供预建和自定义 AI 模型。Power Apps 使用与 Azure OpenAI Service 中可用的 Codex 模型相同的模型来根据您想要运行的数据查询的描述生成 DAX 公式。对于那些习惯于使用 API 并进行 Azure 订阅配置的用户,他们可以在 Power Apps 内使用认知服务来处理应用中使用的数据,并且认知服务集成正在 Power Automate 中预览中。

Power BI 和 AI

AI 是商业智能的天然选择,因为它真正意味着基于数据做出更好的决策,而数据集变得越来越大:来自 Web 分析、社交媒体流、物联网和连接的智能设备的遥测数据,以及熟悉的销售数据。由于有如此多的数据需要处理,商业智能工具不再仅仅以它们提供的数据可视化来评判;这些现在已经是主流,而是通过机器学习提供的高级分析正在区分更强大的商业智能方法。

AI 可以帮助探索数据;它可以自动在大型数据集中发现模式,帮助用户理解数据含义,并预测可能的未来结果。

注意

根据 Gartner 的估计,到 2022 年,40%的机器学习模型开发和评分将在使用机器学习的产品(如 Power BI)中完成,而不是在构建机器学习系统的工具中(Gartner Analytics and BI Magic Quadrant 2020)。

这种增强型分析技术将被广泛应用,尽管分析师可能需要时间来开始利用它。但就像可视化使理解数字的重要方面变得更容易一样,数据故事以叙述的方式呈现数据分析的发现,带领人们理解可能复杂的见解,既描述又(理想情况下)解释它们。随着数据讲述变得更加普遍,其中大部分将由先进的分析工具自动创建。

正如您在图 6-2 中所见,Power BI 为不同级别的用户提供了 AI 功能。它已经在数据建模层使用 AI 生成见解(快速见解识别异常值、趋势、相关性、季节性和其他指标),使用自然语言允许用户通过提问查找数据点,并提供可以包含在报告中的 AI 驱动可视化。它甚至可以为您粘贴到 Power BI Web 服务上的数据选择并生成整个报告,包括选择和生成可视化。

Power BI 广泛使用 AI 为多个功能提供支持,并为不同级别的用户提供适当的工具

图 6-2. Power BI 广泛使用 AI 为多个功能提供支持,并为不同级别的用户提供适当的工具
提示

通过数据流将数据带入 Power BI 在线服务存储在 Azure Data Lake Storage Gen2 中,因此数据科学家和工程师可以直接在 Azure Machine Learning、Azure Databricks 和 Azure SQL Datawarehouse 中使用它,如果 Power BI 中的低代码 AI 功能不符合您的需求。

您还可以调用认知服务来丰富数据,或在数据准备流程的一部分使用预训练和定制的机器学习模型。

Power BI 中的 AI 可视化

有许多地方可以在 Power BI 中使用 AI,即使您甚至没有意识到,如在表格和散点图中的聚类,通过将相似结果分组来发现数据中的新测量。线形图使用 AI 添加趋势线和预测时间序列。还有特定的 AI 驱动可视化可以添加到报告中。

Q&A 可视化使用自然语言让 Power BI 用户以他们自己的话询问报告中的问题(或使用可视化建议的问题,因为它在数据中发现了这种模式)。报告作者可以管理与数据相关的关键术语,并添加同义词以提高数据集的语言理解能力(这可能是组织内部使用的术语,或者是映射术语,如“区域”和“国家”,如果数据中仅使用一个)。如果这些问题创建了特别有用的可视化,您可以将其添加到报告中以供重复使用。

其他可视化,如分组柱状图,具有分析或洞察按钮,您可以单击这些按钮查看变化的解释,例如特定数字的增加或减少,或查找具有不同分布的数据集的部分。

自动化洞察将所有 Power BI 人工智能功能整合在一起。使用我们在第四章中介绍的 Cognitive Services 代码在 ML.NET 本地运行(参见第三章了解如何利用它来为您的机器学习模型服务),在打开报告时自动运行并显示您需要查看的重要洞察。您还可以单击功能区中的获取洞察按钮,查看当前视觉的任何额外洞察,或将这些 AI 可视化添加到 Power BI 报告封面:

  • 关键影响者帮助您理解驱动结果的因素,特别是当您希望比较可能影响指标的因素时。它对您的数据进行推理,排名这些因素,并显示哪些是关键驱动因素。

    Image

  • 异常检测自动检测时间序列数据中的异常,显示在折线图中。它还建议一个或多个异常的解释,以帮助您进行根本原因分析。

    Image

  • 分解树汇总数据并利用人工智能建议跨维度深入探讨最有用的属性(在层次结构中添加级别时,请查找灯泡图标)。用它来探索数据,更好地了解其如何结合在一起,查看需要包含在特定可视化中以展示像产品缺货率这样的指标的内容,或进行根本原因分析。

    Image

  • 智能叙述使用关键要点和趋势构建数据故事,解释为自动生成的文本,您可以编辑并添加额外的值。

    Image

在 Power BI 中使用人工智能进行数据准备

Power Query Editor 利用人工智能规范化和转换数据,以加载到 Power BI 中。它可以使用模糊匹配合并相似列,在 Excel 和 JSON 文件中检测表格,即使数据未格式化为表格,或者使用示例从 HTML、文本和 CSV 文件中创建表格。要使 Power Query 能够根据您的示例确定需要应用的数据转换,请在 Text/CSV 连接器对话框中单击使用示例提取表格,并填写示例。

如果您拥有 Power BI Premium,您可以在数据准备期间从 Cognitive Services 调用多个预训练的机器学习模型。(您无需订阅 Cognitive Services,因为数据转换是在 Power BI 服务上完成的,但您需要启用 AI 工作负载,这也启用了 AutoML)。

如果您正在使用 Power BI Desktop,则可以在功能区的主页和添加列选项卡上使用这些 AI 洞察;在在线服务中创建或编辑数据流时,请使用在线 Power Query Editor 中的 AI 洞察按钮获取相同的文本分析和可视化模型。

Power BI 中第一个集成的认知服务包括情感分析、关键词提取、语言检测和图像标记,用于从文档、非结构化文本、图像和社交媒体提取信息。正如它们的名称所示,它们可以识别图像中的对象、检测语言、识别关键词短语,并确定用户反馈和评论中的正面或负面情感。

AI 洞察结果被添加为表中的新列;如果提取了多个图像标签或关键词短语,则将它们中的每一个返回到复制了原始行其余数据的行上。

  • 语言检测返回最多 120 种语言的语言名称和 ISO 标识符;你可能希望将数据进行翻译或将其排除在进一步处理之外,这需要特定语言的期望。

  • 关键词提取返回在非结构化文本中找到的关键词列表;在较大的文本块上效果最佳,而情感分析则使用机器学习分类,在一两个句子上给出介于 0(负面)和 1(正面)之间的分数,可以获得更好的结果。

  • 图像标记识别图像(上传或来自 URL)中的对象、人物、动物、动作、场景和位置(室内和室外),并返回一个或多个标签。

在 Power BI 中使用自定义机器学习模型

你可以从 Power BI 中调用在 Azure 机器学习中构建的自定义模型,只要创建它们的数据科学家生成一个 Python 模式文件,并将其与模型的部署 Web 服务一起发布,并授予你对模型的访问权限。他们可以在 Azure 门户中完成这些操作:你需要读取对 Azure 订阅和机器学习工作区的访问权限。

当你在 Power BI Desktop 或在线服务中启动 Power Query 编辑器会话时,Power Query 会发现你可以访问的所有 Azure 机器学习模型,并将它们公开为动态的 Power Query 函数。在首页或“添加列”选项卡的 AI 洞察库中选择 Azure 机器学习,以深入研究这些函数;你也可以在高级编辑器中调用 M 函数。

当你在 Power BI Desktop 中使用模型对数据进行评分时,将会在其自己的列中看到模型的预测结果,你可以像处理其他数据一样在报告和可视化中使用。这个列的名称是从模型名称自动生成的,因此你可能希望给它一个更有帮助的名称,如“预测”。

提示

Power BI Desktop 可以运行 Python 和 R 脚本,并将它们创建的数据集导入数据模型:这可以包括运行机器学习模型的脚本。

在 Power BI 中构建您自己的自定义模型

您在 Power BI Premium 中分析的数据可用于训练机器学习模型,然后可以用该数据流处理新数据。这利用了 Azure 机器学习中的自动监督机器学习功能,但您不需要 Azure 机器学习订阅,并且可以直接从 Power BI 构建、验证和调用模型。

AutoML 已集成到 Power BI 数据流中,您可以创建二元预测、通用分类和回归模型。您可以用二元、类别和数值数据来训练这些模型,这些数据存储在数据流中,其中的行都标记有已知的历史结果 —— 发票是否准时支付、风险高低如何、发票支付日期是哪天。为您认为是预测所需结果的任何指标添加计算列。

AutoML 会自动将数据拆分为训练和验证数据集,提取最相关的特征,选择适当的算法,并调整和验证模型。它还会生成一个 Power BI 性能报告,解释模型可能的表现情况;此报告显示了影响预测结果的关键因素,这样您就可以看到模型生成预测的方式,以及训练和验证的关键指标和细节。正如图 6-3 所示,服务会引导您完成整个过程。

AutoML 在开始之前解释了构建模型的步骤

图 6-3. AutoML 在开始之前解释了构建模型的步骤

首先在数据流表格的“操作”列中选择 ML 图标,然后选择“添加机器学习模型”。这将打开一个向导,引导您选择要预测的字段以及它适用的实体(如在线访客的收入或订单的交付日期)。正如图 6-4 所示,AutoML 将建议适合的模型类型和用于输入的列(并警告任何与输出密切相关以至于可能依赖于它的输入);在为模型命名并训练之前,您可以进行更改。

AutoML 将建议最适合的模型类型(并警告您的训练数据可能不适合)

图 6-4. AutoML 将建议最适合的模型类型(并警告您的训练数据可能不适合)

如果您对报告中显示的模型表现满意,可以在数据流刷新时将其应用于任何新的或更新的数据。在模型报告中选择应用,并选择要针对模型运行的表,或在“机器学习模型”选项卡中的操作下点击“应用 ML 模型”按钮。这将创建两个新的数据流表格:一个包含预测结果,另一个包含模型评分的每一行的个性化解释。

您还可以像使用从 Azure 机器学习共享给您的模型一样,在同一工作区中从 Power Query Editor 使用其他 Power BI 用户训练的模型,但您将看不到解释或训练报告。

提示

将来,您将能够从Power BI 使用 Jupyter Notebooks 导出机器学习模型,而不仅仅是嵌入报告。这意味着了解某个领域的分析师可以原型化一个机器学习模型,如果证明有效且受欢迎,他们将其移交给数据科学家进一步开发和标准化,以供更多人使用。

AI Builder

认知服务使得没有机器学习专业知识的开发人员可以访问 AI,通过将它们作为预打包的 API 提供:AI Builder 将同样的一些 AI 服务子集带给那些不是专业开发人员且不习惯调用 API 的用户,通过将它们打包到低代码和无代码场景中,轻松地将 AI 添加到业务流程或应用中。

Power Platform 中的不同服务用于分析、采取行动以及自动化数据处理。所有这些场景都可以利用 AI 模型,因此低代码 AI Builder 接口用于训练、测试和发布模型,已集成到 Power Apps Studio 和 Power Automate 网站中。

提示

AI Builder 预测模型支持 Dynamics 365 中的某些功能(我们在本章后面介绍的名片识别模型与 Dynamics 集成,因为名片的详细信息在该处尤为有用)。

您可以使用这些模型处理文本和图像,使它们更有用,或者自动化任务,如处理客户申请、构建联系人列表、填写费用报告、进行库存管理、处理基本支持请求,或者在社交媒体上提到您的产品或组织时获取警报——但最受欢迎的 AI Builder 模型是表单处理。

您还可以利用历史数据进行预测,预测将来相同场景可能发生的情况。为了处理更复杂的场景,您可以同时使用多个模型——例如,构建一个应用程序,通过提交需要分析、标记并传递给正确团队响应的照片来报告事件。完整的模型集显示在图 6-5 中。

AI Builder 模型分为四大类,未来还将包含更多场景

图 6-5. AI Builder 模型分为四大类,未来还将包含更多场景。

AI Builder 模型适用于存储在 Microsoft Dataverse 中的数据(Power Platform 的数据存储,以前称为通用数据服务)。该服务有几个常见业务场景的预构建模型,您可以在无需训练的情况下使用。其中一些适用于文本:关键短语提取、语言检测(识别文档使用的语言)、情感分析和翻译。其他模型从图像中提取文本并进行处理:文本识别(OCR,包括手写识别)、收据处理(专门用于英文美国收据的 OCR)、ID 读取器(用于从护照和美国驾驶执照中提取身份信息)和名片阅读器模型。稍后在本章中,我们将看看如何在 Power Apps 和 Power Automate 中调用这些模型。

提示

许多但不是所有的 AI Builder 模型都建立在认知服务之上(例如 AI Builder 表单处理模型使用 Azure 表单识别器)。就像认知服务定期添加新功能和更多服务一样,将来 AI Builder 将会获得更多模型,并扩展现有模型的功能。在撰写本文时,一些模型仅适用于英文文本和美国实体(如驾驶执照),但将来将支持更多语言和国家。

自定义 AI Builder 模型(您自己训练和发布的)在您有组织或场景特定数据时非常有用。它们可用于预测、表单处理和物体检测,可以识别并计数图像中的内容。这些内容可以是常见物体、零售货架上的产品或品牌标志。

为了进行预测,AI Builder 学习历史数据中的模式,并确定其中一个模式是否与当前数据匹配。您可以使用预测模型进行二元结果的预测,如欺诈检测或根据过去的付款情况预测账单是否及时支付,或用于多结果的预测,如预测下一批货物是否按时、提前或延迟到达。您还可以预测一些数字答案:您需要保留的库存数量、货物到达需要多少天、一个客服代表在一班班次中可以处理多少通话而不会降低客户满意度。结果的数据类型可以是是/否、选择、整数、小数或浮点数,或货币。

有两个预构建的 AI Builder 模型,您可以定制它们,使其与您自己的数据更好地配合:

实体提取

识别文本中的特定数据,以从文档中提取结构化信息。

类别分类

确定文档中包含的信息类型,以理解产品评论、路由请求、处理反馈、检测垃圾邮件和离题内容,或者丰富要用于预测分析或客户流失模型的数据。

预构建的实体提取模型将识别大约 25 种不同的实体:年龄、体重、持续时间、人名或组织名、URL、电子邮件地址、街道地址、城市、邮政编码(美国格式)、美国州、国家和地区、大陆、电话号码(美国格式)、常见事件、持续时间、天数、日期和时间、金额、基数和序数、百分比、温度、速度、语言、颜色名称和布尔值(是或否响应)。使用自定义提取模型,您可以修改这些实体类型,略过对您无用的任何实体,或创建自己的实体。

预构建的分类模型最初涵盖客户反馈,并可将文本标记为问题、赞扬、客户服务请求、文档、价格和账单或与员工相关的内容。如果您想要用自定义标签对文本进行分类,您可以为最多 200 个类别训练一个自定义模型。

要确定是否需要为实体提取或分类训练自定义模型,请在 Power Apps 中使用您自己的文本测试预构建模型。选择您感兴趣的模型,通过粘贴一些典型数据来尝试它。如果在您的数据上结果不够准确,您可以通过创建自定义模型来改进它们。

您还可以在 AI Builder 中使用 Lobe 的机器学习模型,或者从 Azure 机器学习中引入自定义模型(比如我们在第三章中讨论的那种),如图 6-6 所示。

通过调用 REST 端点将 Azure 机器学习中的自定义模型带入 AI Builder

图 6-6. 通过调用 REST 端点将 Azure 机器学习中的自定义模型带入 AI Builder

训练自定义表单处理模型

在 AI Builder 中训练自定义模型的过程大体上是类似的:您需要足够的数据来对模型进行训练,并且需要将其存储在 Dataverse 中。

第一步是创建模型:在 Power Apps 或 Power Automate 中打开 AI Builder 并选择构建(如果您在 Power Apps 中创建画布应用程序,则可以选择所需的模型类型,然后点击“新建模型”以打开 AI Builder)。选择您想要处理的数据类型(文档、文本、结构化数据或图像),并选择您想要提取的信息类型;在这里,我们正在创建一个表单处理模型来从表单中提取自定义数据。为其命名,并指定表单上的字段、表格和复选框位置及其内容。

对于预测,您需要选择结果;对于分类,您选择要使用的文本和标签;对于对象检测,您需要指定对象的类型和它们的名称。

不同的模型需要不同数量的数据:要训练表单处理模型,您至少需要五个相同格式的样本文档(JPEG、PNG 或最好的是 PDF)。如果您有具有相似信息但不同布局的表单(比如来自使用自己模板的不同供应商的发票),您可以将它们包含在一个模型中。您需要为要从表单中提取的字段和表格创建名称;AI Builder 将识别您的样本文档中的所有字段和表格,并通过绘制周围的选择标记每个字段或表格单元格的名称。

提示

这是一种被称为“机器教学”的技术,它通过让人类引导训练来缩短机器学习训练过程。

在您处理示例时,AI Builder 可能会开始建议字段或表名,因为它创建其模型,您可以在 图 6-7 中看到它的工作原理;您可以确认或更改这些建议以进一步训练它。

AI Builder’s form processing model starts to learn from your sample documents while you’re still labeling them

图 6-7. AI Builder 的表单处理模型在您标注它们的样本文档时开始学习

有一些限制,但作为云服务,AI Builder 正在频繁更新和改进。最初,表单处理仅适用于英语:现在它支持超过 70 种语言。当我们开始撰写本章时,表单处理还不能理解表单上的复选框,它无法处理复杂的表格(其中单元格合并以创建标题或存在嵌套表格),而且跨两页的表格必须被处理为两个表格——但在本章完成之前,复选框和复杂表格的支持已经实现,而在您阅读本书时,两页表格可能已经可以工作了。

提示

如果你正在使用 SharePoint Syntex 服务来管理大量内容,它会与 AI Builder 和 Power Automate 集成,这样你就可以从 SharePoint 文档库开始创建和使用 AI Builder 表单处理模型,并自动处理表单。每个使用这些库的人员都需要 SharePoint Syntex 许可证,因为它允许库中具有编辑权限的任何用户创建表单处理模型。创建模型会在库中为表单上的字段(除非已存在)创建新列,并创建一个 Power Automate 流,将 AI Builder 从表单中提取的信息转换为文档元数据。将表单的图像上传到文档库,它会自动处理并将其转换为 SharePoint 中的结构化数据。表单处理适用于像发票这样每次都有相同布局的文档,以及打印表单;对于像合同这样包含起止日期和供应商信息但布局不太结构化的复杂文档,您可以使用SharePoint Syntex 内容中心中的文档理解分类和提取模型(基于语言理解认知服务)。

评估和改进模型

即使使用 AI Builder 等服务,训练一个定制模型以使其尽可能有效可能需要多次尝试;结果取决于您拥有的训练数据。一旦完成模型训练,您可能会发现需要更多具有不同示例的数据。您需要大致相同数量的数据来支持所有不同的类别和结果,并确保您提供的数据是平衡的、多样化的,而且不具有意外的相关性——例如一个对象总是显示在桌子上,而另一种对象则被摄影在地板上,除非这些对象总是在这些位置上找到。您可能需要在不同的光照条件和角度下拍摄照片,或者从不同类型的客户中获取文本样本,以获得高质量的模型。我们将在第八章中详细讨论数据质量和数据集平衡,以及数据管理的其他考虑因素。

当您首次完成训练模型后,您可以在详细页面上查看性能和质量分数;您还可以选择“快速测试”以查看您的模型在实际操作中的表现。

如果您对模型的质量满意并希望开始使用它,请在“上次训练版本”下选择“发布”。如果您认为可以通过更多数据改进模型,请选择“立即重新训练”以更新模型。选择“新版本”以重新创建和训练模型:您可以拥有每个模型的一个已训练但未发布的版本和一个已发布的版本。

如何支付 AI Builder

AI Builder 是所谓的 Power Platform 提供的服务:您必须具有允许您创建 Dataverse 环境以使用 AI Builder 的 Power Apps、Power Automate 或 Dynamics 365 许可证,但您还必须根据使用量支付费用。Power Apps 或 Power Automate 订阅许可证包括一些 AI Builder 信用点,其他 Microsoft 产品如 SharePoint Syntex 也包括这些信用点,您可以购买单位为 1,000,000 的信用点作为每月的附加功能(在撰写时的费用为 500 美元)。这些信用点适用于整个 Power Platform 租户,而不是个别用户,管理员可以选择它们是否立即可用,或者必须分配给包含将使用它们的应用程序或流程的环境。如果存储在特定环境中的 Power App 使用 AI Builder 处理来自 SharePoint 等数据,如果您需要这种治理级别,您可以从 Power Platform 管理中心为该环境分配信用点(您还可以在那里查看跟踪使用情况的报告)。如果您试图估算各种应用程序所需的 AI Builder 容量,可以使用 AI Builder 计算器。例如,训练和测试模型以及处理 1,000 个表单将需要大约一百万个信用点,但这取决于模型的复杂性和它们需要多频繁地进行重新训练。

使用 AI Builder 模型

您发布的大多数模型都可以在 Power Apps 和 Power Automate 中供您自己使用。如果您希望将它们提供给其他用户使用,则需要从 AI Builder 的模型页面共享它们:这样其他人就无法查看您的训练数据,也无法编辑或重新训练您的模型。

提示

如果有其他人要使用您创建的使用 AI Builder 模型的应用程序,则您需要与他们分享模型以及应用程序。

在 Power Automate 中使用 AI Builder

Power Automate 是微软的无代码机器人流程自动化工具,具有标准和高级连接器的混合。使用 Power Automate,您可以连接功能块,从源连接器接收输入,并通过可选的转换路由输出。

所有 AI Builder 模型都可以作为 Power Automate 中的转换器使用。您可以将它们视为模板流,使用默认流程进行发布或根据您的特定需求进行修改。

一旦经过训练和测试,模型就可以发布,以便在 Power Automate 流程中使用,它将显示为连接器:单击“在流程中使用此项”以从 AI Builder 模型创建工具转到流程设计屏幕。

例如,您可以将流连接到电子邮件邮箱,自动化类似提交费用的流程。当接收到带有附件的消息时,使用收据处理模型从任何附件收据中获取数据,并将其输入到会计系统中,同时通知负责费用审批的经理。

AI Builder 预测模型可以安排生成预测或立即运行;在这两种情况下,预测结果都存储在 Dataverse 中。如果您需要按需预测,可以在 Power Automate 中创建一个流程,通过选择“新步骤”时显示的操作列表中的“预测”,实时调用 AI Builder 中的预测模型。

使用 AI Builder 构建流程与构建任何其他流程类似。在 Power Automate 菜单栏中,选择“构建”,然后选择预构建模型或训练五种不同的基础模型之一:分类、实体提取、表单处理、对象检测和预测。您会发现其中大多数模型都专注于处理文本,因为微软在 Power Platform 中采用了基于解决方案的 AI 方法,如在 Power Automate 的文档自动化工具中所示。

在 AI Builder 屏幕中(如图 6-8 所示),选择预构建模型,如名片阅读器。这将弹出一个向导,选项是在流程中使用或在应用程序中使用。不同的模型有不同的字段,因此在围绕 AI Builder 模型配置流程时要小心。

选择“在流程中使用”以在 Power Automate 中使用模型。这将打开一个模板屏幕(参见图 6-9),您可以在其中找到使用您选择的 AI Builder 连接的预构建流程。

一旦您部署了预构建模板,您可以自定义它以构建您想要的应用程序。从模板开始可以简化从头开始构建流程时需要做的一些决策。

AI Builder 模型告诉您它们与哪些 Power Platform 服务兼容

图 6-8. AI Builder 模型告诉您它们与哪些 Power Platform 服务兼容

Power Automate 具有内置的用于自定义的 AI Builder 模型流程

图 6-9. Power Automate 具有内置的用于自定义的 AI Builder 模型流程

如果您喜欢在自己的流程中使用 AI Builder,则它像任何其他连接器一样对待。预构建模型作为连接器可用,提供可包含在流程中的操作。从连接器选择工具中选择您想要的连接器(参见图 6-10),然后继续构建流程。

在流中像任何其他连接器一样使用您的 AI Builder 模型

图 6-10. 在流中像任何其他连接器一样使用您的 AI Builder 模型

如果您使用 AI Builder,无需改变工作方式:在构建流程方面,它就是另一个连接器和另一组可用的操作。

在 Power App 中使用 AI Builder

Power Apps 提供了与 AI Builder 协作的另一种低代码方法。您可以使用 Power Apps 工具构建应用程序用户界面,使用预定义组件,而连接器和操作将其链接到外部应用程序和服务,包括 AI Builder。基于 Excel 函数和 SQL 的声明性函数编程语言提供了一种向 UI 添加业务逻辑、将其与数据和服务链接以及响应用户交互的方法。

在撰写本文时,几乎所有 AI Builder 模型都可用于 Power Apps 中(未来还会增加更多):

  • 名片识别器

  • 类别分类

  • 实体抽取

  • 关键短语抽取

  • 收据处理

  • 情感分析

  • 文本识别

  • 表单处理

  • 对象检测

大多数情况下,它们适用于画布应用程序,这些应用程序使用标准 UI 组件构建,但名片识别器模型也可以用于模型驱动的应用程序,其中应用程序数据模型会自动创建应用程序 UI。

发票处理模型需要一个 Power Automate 流程,但您可以从 Power App 调用该流程。AI Builder 预测模型按需运行以生成预测结果,并将其写入您的 Dataverse 存储中,因此 Power App 可以像处理任何其他 Dataverse 数据一样使用这些预测结果——例如,显示客户是否可能会延迟支付特定发票以及运输和交付详细信息。如果您希望应用程序生成新的预测结果,可以创建一个 Power Automate 流程,并在应用程序中使用该流程,但不能直接从应用程序调用预测模型。

将 AI Builder 集成到 Power App 画布应用程序中,就像使用任何其他 Power Apps 组件一样。AI Builder 可从插入菜单中获取,并可以将预构建模型拖放到应用程序画布上。例如,名片识别器会在您的画布上放置一个新的控件,您可以在其中上传名片的图片(如 图 6-11 所示)。或者,您可以使用自定义模型,在应用程序中训练表单处理器和对象检测器模型以供使用。

一旦就位,请在控件的 OnChange 属性中添加一些代码,以将其链接到数据连接器。该模型将提取数据到一组预定义的属性中,这些属性可用于提取和传输特定数据,例如名字和邮政编码。

在 Power App 中放置名片识别 AI Builder 模型控件

图 6-11. 在 Power App 中放置名片识别 AI Builder 模型控件

您可以通过使用公式栏(创建画布应用程序时编写表达式的地方)在 Power Apps Studio 中集成一些 AI Builder 模型。目前,这对某些语言模型可用,但将来可能包括更多场景:

  • 情感分析

  • 实体抽取

  • 关键短语抽取

  • 语言检测

  • 类别分类

公式栏具有属性列表,显示所选控件的属性以及一个公式字段,您可以在其中构建要为所选属性计算的公式,该公式可以包括值、条件格式设置、应用程序操作(如在应用中导航到不同屏幕或运行 Power Automate 流程)—或调用连接器来调用 AI Builder 模型。

在 Power Automate 中使用认知服务和其他 AI 模型

您可以使用 Power Automate 处理 Microsoft Graph 中的操作,并通过 Azure 以及 Power Platform 和其 Dataverse 数据层进行操作。这包括使用认知服务等 AI 服务。

如果一个服务有 API,您可以在 Power Automate 中使用它,可以使用预构建的连接器或者构建您自己的自定义连接器。并非所有基于 AI 的服务都是显而易见的;有些被捆绑为应用程序端点,例如 Microsoft 的 AI 动力翻译器。如果您使用 Azure 机器学习模型构建器创建了自定义模型,那么您将准备好将适当的 API 定义转换为自定义连接器,直接从 OpenAPI 定义转到可插入到 Power Automate 流程的模块。

使用低代码和无代码开发工具如 Power Automate 使用自定义连接器可以帮助控制使用情况,特别是如果您正在使用 API 管理工具来控制如何使用 AI API 以及谁有访问权限。

Microsoft 现在还提供了一个免费的 Power Automate 桌面工具,可以在您的个人电脑上运行流程,提供一组基本的免费连接器以及更复杂操作的订阅计划。该工具提供了 Azure 认知服务 API 的一个子集,包括基本的计算机视觉和文本分析工具。它还可以作为云托管的 Power Automate 流程的触发器使用,在将数据传输到服务之前进行本地处理。

Power Automate 提供了一组认知服务连接器,其中一些仍处于预览阶段。这些连接器提供了对 API 的简化访问,支持大多数常见用途。您需要一个认知服务账户密钥来使用它们,并且有一些限制防止您将它们用于复杂任务。例如,计算机视觉连接器每个连接只能使用 1,200 次,在每 60 秒内限制会更新。这意味着您不能将其用于视频流,但您可以将其作为用于检查超市货架是否需要堆叠的 Power Automate 流程的一部分使用。更复杂的连接器具有更低的限制,因此在部署应用程序之前务必仔细阅读文档。如果需要超出限制的功能,最好考虑在传统应用程序中直接使用认知服务 API。

各种认知服务连接器提供与 Azure API 大部分相同的服务。一旦将连接器拖入流程中,您可以配置支持的服务,选择适当的操作并配置连接器参数。您应该将每个连接器视为单一功能应用程序;因此,如果您使用人脸识别连接器,您将需要单独的流程来添加新的面孔并从图像中检测人物。

Microsoft 通过提供一组模板简化了使用其认知服务连接器的入门过程。这些模板由 Microsoft 或 Power Automate 社区开发,涵盖一组常见场景。例如,一个模板提供简单的 OCR,将图像转换为基于文本的 PDF 并将其存储在 OneDrive 中。您可以将这些模板用作快速起步,尝试使用它们提供的服务,然后将它们用作构建自己应用程序的基础。这些模板提供了有效的实践学习环境,展示了如何构建和使用基于 AI 的流程。

目前,Microsoft 为以下认知服务提供预配置的连接器:

  • 计算机视觉

  • 内容审核员(预览版)

  • 自定义视觉(预览版)

  • 人脸 API(预览版)

  • LUIS(预览版)

  • 翻译器 V2(预览版)

  • QnA Maker(预览版)

  • 表单识别器(预览版)

  • 文本分析(预览版)

  • 视频索引器(预览版)

虽然大多数服务都是预览版,但它们已经可以使用,其参数和操作不应有任何更改。

所有认知服务连接器都设计用于流的中间位置;它们不提供触发器,并且可以向其他连接器输出结果。

您可以通过几个步骤创建一个基于 AI 的 Power Automate 流程。在以下示例中,我们创建一个流程,用于监视 OneDrive for Business 文件夹中上传的图像文件,然后使用计算机视觉连接器识别图像中的对象。

首先,登录到 Power Automate 并创建一个流程。首先为其命名,并选择一个初始触发器(见图 6-12)。您可以搜索触发器或从常用触发器列表中选择。我们将选择在 OneDrive for Business 中创建文件时触发流程。

创建流程后,您将进入 Power Automate 图形编辑器。这将显示您的触发器,准备让您登录到 OneDrive 并选择要监视的文件夹。您需要在 OneDrive 中创建文件夹,然后在 Power Automate 的下拉菜单中选择它(参见图 6-13)。

启动新的 Power Automate 流程,请选择您的触发器

图 6-12. 启动新的 Power Automate 流程,请选择您的触发器

选择要识别图像的 OneDrive 文件夹

图 6-13. 选择要识别图像的 OneDrive 文件夹

接下来,在“新步骤”对话框中搜索“计算机视觉”连接器。您需要在 Azure 账户中创建资源,如 图 6-14 中所示,但它在免费层中是可用的。

在 Azure 门户中创建您的计算机视觉资源

图 6-14. 在 Azure 门户中创建您的计算机视觉资源

在 Azure 中创建新的计算机视觉资源后,复制其身份验证密钥(您将找到两个,使用第一个)和端点 URL。这些将需要用于配置计算机视觉连接器。

返回到 Power Automate,在选择“检测对象”之前,添加密钥和端点 URL。这将返回与上传图像相关联的标签。在连接器中,选择图像源和图像内容,链接到流触发器提取的上传图像的文件名(参见 图 6-15)。

使用文件名选择要识别的新图像

图 6-15. 使用文件名选择要识别的新图像

配置完成后,在最后添加一个连接器,向预定义地址发送包含识别对象和文件句柄的电子邮件消息:参见 图 6-16 ,了解您在此处的不同选项。

使用 Flow Checker 确保您基于 AI 的流程的基本结构是正确的,并运行测试以查看它是否有效。您可以点击每个运行步骤以查看您的流程执行情况,可以选择查看从 Azure 计算机视觉服务返回的数据,包括任何置信水平和备选对象检测。

相同的过程可用于创建更复杂的流程,通过触发器和连接器将认知服务集成到其他应用程序中,使其成为您的流程自动化工具的一部分。

填写电子邮件地址并选择要包含的元数据——仅包括计算机视觉检测到的对象,或类似于识别概率的详细信息

图 6-16. 填写电子邮件地址并选择要包含的元数据——仅包括计算机视觉检测到的对象,或类似于识别概率的详细信息

自定义连接器

如果找不到用于服务的预构建连接器,或者想要使用自定义 AI 模型,可以使用自定义连接器调用 API(请注意,这需要 Power Apps 的高级订阅)。Power Automate、Power Apps 和 Logic Apps 都共享相同的自定义连接器模型。您需要使用 API 的 OpenAPI 或 Postman 定义,或者从 Power Platform 的自定义连接器门户开始工作。在门户中创建的自定义连接器仅在 Power Platform 内可用。

要创建一个新的自定义连接器,请打开自定义连接器向导。接下来,导入您的 API 定义,然后检查生成的连接器。您将需要在此过程中添加任何身份验证详细信息,使用适合您的 API 的正确身份验证方法。如果您使用的是托管在 Azure 上的 AI 服务,可能需要它的 API 密钥。

您需要查看连接器的整体设置,以控制用户在创建使用您的连接器的流程时可以看到什么。完成后,深入查看连接器设置,以审查请求和响应部分。在这里,您将看到发送到 API 的数据以及成功操作的预期返回数据。

一旦自定义连接器准备就绪,您可以使用 Power Apps 或 Power Automate 进行测试。更简单的服务可以使用内置工具,例如通过 HTTP webhook 调用 API。

在 Power Apps 中使用认知服务

如果您需要 AI 服务,而 AI Builder 中没有提供的话,Power Apps 可以集成使用认知服务。对于此类需求,Power Apps 支持与 Power Automate 相同的连接器;但它们的使用方式大不相同。

如果您还没有设置过,首先在 Azure 门户中创建一个认知服务 API 帐户。这将启用 Power Apps 中的连接器,并且您可以在设计工具的数据部分找到它们。搜索您打算使用的服务,当您将连接器添加到您的 Power App 时,从 Azure 门户中添加适当的账户密钥和终结点 URL。如果您已在另一个 Power App 或 Power Automate 流中配置了连接,则无需再次添加这些数据。

一旦添加,您的认知服务 API 连接器将被视为数据源,并且与 Power App 中的其他数据源集成。无需编写代码来处理数据转换;平台会自动为您处理这些。

您可以在 Power Apps 网站上访问在线工作室构建 Power Apps。这是一个自定义开发环境,支持拖放控件布局,以及将公式和动作附加到您添加到应用程序画布上的控件。有两种画布选项可供选择:手机版,适用于手机,以及平板版,也适用于从 Web 运行的应用程序。平板电脑和手机应用程序可以从 iOS 和 Android Power Apps 应用程序运行。

通过从插入菜单中选择控件来构建应用程序 UI。这将它们添加到工作室画布上,您可以在那里自定义外观并向控件添加操作。例如,按钮具有 OnSelect 操作,而 Gallery 将连接到数据源,可以是连接器(如图 6-17 所示),数据库,SharePoint 列表或 Power Apps 集合。

将认知服务计算机视觉 API 连接器添加到 Power App

图 6-17. 将认知服务计算机视觉 API 连接器添加到 Power App

一旦您完成应用程序的布局并添加了连接器到认知服务,您可以开始使用附加到控件属性的公式添加应用程序逻辑。这些公式可能会是相当复杂的代码片段,特别是当您尝试同时运行多个 API 函数时,例如在客户服务应用程序中从文档中提取关键短语并检测情绪时。

注意

在 Power Apps 画布应用程序中使用认知服务需要一些对 Power Apps 公式语言 Power Fx 的了解(这也是公式栏中使用的内容)。它与 Excel 中熟悉的工具密切相关,表达式以 = 开头,但 Power Fx 也包括一些 SQL 元素来处理 Excel 函数无法处理的数据情景,控制描述借鉴了 .NET 的 XAML GUI 环境。与 Excel 不同的是,它具有可以响应用户输入并影响状态的命令式编程命令。如果您已在 Excel 中构建过任何应用程序或使用 LAMBDA 和 LET 函数创建公式,那么您应该不会觉得使用它有多难学,而且如果您在 Azure 机器学习中创建自己的机器学习模型,可以使用 Power Fx 从任何控件引用它们。

为了简化与连接器的数据交互,使用集合来存储结果。ClearCollect 函数将创建并填充一个集合或重置现有集合以接收新数据。ClearCollect 将调用一个使用来自应用程序字段或其他数据源(包括外部数据源和其他集合)的认知服务连接器的 API,并在触发时存储结果以供应用程序使用。

结合 Power Apps 和 Power Automate

Power App 是一组异步事件驱动函数的集合。每个公式都是由控件上的操作或来自数据源触发的。您的输出字段将连接到保存操作结果的数据源,并在运行操作时自动更新。

如果您愿意,您可以将 Power App 用作 Power Automate 流程的触发器和端点。这种方法允许您在不编写代码的情况下使用认知服务,同时使用 Power App 在 PC(通过网络)、手机和平板电脑上构建用户友好的应用程序前端。使用这种方法,原型流程可以快速转变为产品,将代码要求降到最低,并提供了无论是迁移到 Power App 模型还是自定义代码模型都不会改变用户体验的选项。

通过这种方式使用流程还可以解决一些 Power App 的限制。例如,它可以提供一种快速的方式来保存并转换相机捕获的图像,并与计算机视觉 API 一起使用。从 Power App 相机控件生成的位图需要转换为支持的格式,然后才能使用,而流程可以负责这一点。

逻辑应用与人工智能

乍一看,Azure 逻辑应用和 Power Automate 看起来相似。与 Power Automate 类似,逻辑应用是一种业务应用集成工具,旨在通过低代码可视化编程环境自动化常见工作流程,通过连接不同的应用程序 API。它甚至提供了许多相同的连接器。但在这些相似之处之外,逻辑应用更类似于微软的原始工作流集成工具 BizTalk,并已设计用于与 Azure 的无服务器函数及其日益增长的基于消息的应用程序开发工具套件(如事件网格)配合使用。

基于消息的编程模型具有悠久的历史,使其成为像 Azure 这样的任何分布式编程环境中的关键元素。消息队列有助于管理连接,确保一致性并保持处理顺序。这使它们成为构建应用程序工作流程、从连接器传递数据和在必要时修改消息内容的理想模型,并且它们已经发展成为 Microsoft Azure 物联网工具中的重要元素。诸如 CloudEvents 标准和发布订阅事件网格等技术提供了管理消息和触发事件驱动应用程序的框架。

Azure 逻辑应用是这种方法的重要组成部分,提供了一种快速构建这些连接、添加工作流和基本处理以响应事件并触发其他应用程序操作的方式。机器学习在这种场景中起着重要作用,通过向复杂数据流添加智能过滤器或改进应用程序输入的质量。通过使用预测模型识别重要数据,逻辑应用可以快速启动警报甚至触发纠正措施。

由于它基于 Azure 无服务器和事件驱动平台,逻辑应用已成为一个重要的集成工具,可以将 Azure 服务与外部 API 和您自己的代码混合使用。使用无代码和低代码技术,逻辑应用可以集成 API 连接器和消息,在必要时使用函数添加自定义代码片段。当与 Azure 边缘和物联网工具一起使用时,它们还成为将网络边缘信号链接到公共云中的大规模计算的有效方式。

此外,与 Azure 管理工具的连接器意味着逻辑应用也可以用作自动化应用和服务管理的一种方式,响应来自应用程序和服务的信号,并根据需要修改和配置资源。您还可以在安全的 Azure 网络中使用逻辑应用,使用集成服务环境将您的逻辑应用与全球平台隔离开来。

Microsoft 为逻辑应用提供了一系列认知服务连接器,构建在类似于 Power Automate 的连接器模型之上。相关的逻辑应用连接器包括:

  • 计算机视觉

  • 内容审核员

  • 自定义视觉

  • 人脸 API

  • 表单识别器

  • LUIS

  • Microsoft 翻译 V2

  • QnA Maker

  • 文本分析

  • 视频索引器 V2

您可以在逻辑应用文档中找到连接器列表。预构建的连接器为构建基本的机器学习驱动应用程序提供了一种快速的方式,特别是围绕文本和计算机视觉。这些都是不需要实时操作且可以轻松在基于流程的应用程序中使用的服务。

虽然它们并未涵盖所有可能的认知服务,但您可以使用自定义连接器与其他服务的 REST API 以及使用 Azure 的机器学习工具开发的自定义机器学习模型进行工作。

要在 Azure 逻辑应用中使用认知服务,请从包含您想要使用的认知服务 API 的资源组的订阅开始。然后可以在同一资源组中创建一个新的逻辑应用。这将打开逻辑应用设计器,这是一个基于 Web 的图形工具,用于选择和配置触发器和连接器。从一个连接器开始,将数据引入您的逻辑应用中。这可能是一个上传的计算机视觉文件或带有文本分析 JSON 文档的 HTTP 连接,甚至是连接到另一个应用程序输出的连接。

该站点使得选择连接器变得很容易,Azure 基于以往的交互提供关于您可能想要使用的内容的建议。从您的流触发器开始,例如将文件上传到 Azure 存储博客,或更新数据库中的记录。

一旦您有一个事件源用作触发器,您将构建逻辑应用流程,首先添加基本流程逻辑,然后为您选择的认知服务添加连接器。您需要配置连接器,使用来自您服务订阅的数据。首先添加一个名称,然后添加您的认知服务帐户密钥和服务终结点的 URL。这些信息可以在 Azure 门户中找到,并可以复制到连接器配置中。

配置连接详细信息后,点击“创建”来构建您的认知服务连接器。您现在可以构建其余部分的应用程序,并从服务输出中添加新步骤。例如,如果您正在使用逻辑应用来检测帮助台查询中用户的情绪,您的应用程序可以将所有情绪消极的消息传递到数据库,以备进行额外的优先处理。在这种情况下,您正在使用逻辑应用和认知服务来过滤事件;其他应用程序可能使用其他类型的触发器和数据。

Logic Apps 是一个将多个 Azure 服务快速集成在一起的理想工具,可以用来原型化更复杂的应用程序或快速构建解决紧急问题的解决方案,而无需大量开发资源。您可能需要编写的大部分代码已经作为服务的一部分存在,因为 Logic App 连接器是建立在提供触发操作和流程所需信号的 Azure 内部 API 之上的;例如,无需编写代码来监视文件系统的更改,因为任何更改都可以用来触发 Logic App。

Logic Apps 中的 Azure 服务集成也使它们成为系统管理工具,可以通过在日志数据上提供智能和主动过滤器来帮助规模化运行应用程序,使用预测的机器学习模型来管理 Azure 部署。例如,当一个虚拟机显示一定模式的错误时,机器学习模型用于预测故障,可以触发切换到另一个实例,然后进行重启或使用替换镜像进行新的部署。通过基于机器学习的预测工作,应用程序的停机时间被最小化,用户也保持对问题不知情。这将需要使用自定义连接器,并使用像 Azure 的自动化机器学习训练这样的工具。

如果您正在使用自定义的机器学习模型与 Logic Apps,您将需要创建一个 HTTP 连接器来向服务发送查询。微软的工具使得构建 REST 连接变得简单,使用 POST 方法向机器学习 API 端点发送查询。无需构建调用的 JSON;所有这些都由 Logic App 连接器使用 API 架构处理。您可以从 Azure 机器学习工具中获取端点 URL 和所需的密钥。建议使用 API 测试工具如 Postman 在将其添加到 Logic App 流之前尝试任何 API,使用得到的详细信息确保您发送了正确的查询数据。

自定义调用将需要使用 Logic App 连接器来解析返回的 JSON,使用已知的架构设置流变量,这些变量可用于驱动应用程序的其余部分。解析的数据可以写入数据库或用于构建消息,这些消息可以传递给其他应用程序或无服务器函数。

虽然 Logic Apps 中内置的认知服务工具简化了与 Azure 机器学习功能的子集的工作,但 HTTP API 支持进一步扩展了功能。您可以使用自己的机器学习模型、尚未具有连接器的较新认知服务,或者像 Azure AutoML 这样的技术。在这些情况下,需要一些 JSON 知识,您需要解析架构并处理 API 载荷。

Logic Apps 的一个优势是它们是构建机器学习应用程序的低成本选择。每个操作和连接器的定价都是几分之一美分,企业许可的连接器比标准连接器更贵。大多数基于 Azure 机器学习的连接器都属于标准价格带,因此,如果您正在构建相对简单的机器学习应用程序,比如作为呼叫中心工作流的一部分,您可能每天只需花费几分钱。

与 Power Apps 和 Power Automate 类似,Logic Apps 无服务器方法消除了构建以机器学习为动力的应用程序所带来的大部分风险。结合需要最少培训的低代码方法,这种平台使您能够轻松填补应用程序组合中的空白,同时协助内部团队在必要时构建自己的工具。即便如此,如果您想利用 Logic Apps 的许多关键功能,特别是将其作为集成工具并需要与 REST API 一起工作时,仍然需要一些编程经验。

提示

微软的 Azure Percept 工业物联网硬件为计算机视觉和计算机音频服务提供了一个低代码开发环境,基于 Logic Apps 并在设备上的本地容器中运行。您可以在 Percept Studio Web 应用程序中选择预构建模型,并直接部署到 AI 加速的 Percept 硬件上,并通过 Azure IoT Hub 进行管理。

总结

在本章中,我们看到了如何在 Microsoft 的低代码和无代码平台上使用其机器学习工具。通过将托管端点与简单的连接器结合,您可以自由选择所需的功能,而无需具备高级编程技能。微软进一步提升了解决方案的重点,例如 AI Builder 的预构建模型和定向文档自动化解决方案的选择。

即使有了这些工具,您仍然需要考虑使用 AI 对用户、客户和其他受系统影响的人员的影响。在下一章中,我们将探讨有助于您实现最佳结果以及通常性能的负责任 AI 工具和技术。

第七章:负责任的人工智能开发和使用

在前面的章节中,我们已经看到如何使用关键的微软云 AI 服务。但同样重要的是考虑如何构建和使用 AI 的整体情况,这样你就可以充分利用这些云 AI 服务而不会遇到问题。

AI 和机器学习是强大的技术,可以使软件更有用,系统更高效,人们更加高效。但它们也可能侵犯隐私,带来安全问题,复制和放大偏见,自动化决策可能对个人或整个群体产生负面影响,或者偶尔出错。

提示

这是一个庞大而复杂的话题,你不必掌握每一个细微差别来使用云 AI 服务。不要被所有问题压垮:你不需要做到所有事情,但同样,也不要认为你什么都不需要做来应对负责任的人工智能。

AI 的潜力越大——如诊断癌症、检测地震、预测关键基础设施的故障或引导视觉障碍者穿越陌生地点——就越有责任确保它的正确性,因为 AI 正在扩展到医疗、教育和刑事司法等领域,其中社会影响和后果非常重要。但即使是 AI 的日常使用,如果系统不公平、不负责、不透明和不安全,也可能无意中排除或伤害用户。

像 Azure OpenAI 服务背后的 GPT-3 模型这样的大型语言模型非常强大。事实上,它们非常优秀,通常会让人觉得是人类在写回答。但它们经过了书籍和许多网页内容的训练,这意味着某些观点在训练数据中被大量呈现,而更边缘化的观点则少见甚至完全缺失。这意味着结果可能不准确、不公平或极具攻击性,但语言可能非常令人信服——因此,你需要仔细考虑在哪里使用服务以及采取哪些预防措施,这样你就可以从其提供的强大功能中受益,同时不会让用户暴露于潜在的问题回应中。

除了社会和伦理影响外,还有法律问题需要考虑。欧洲委员会已提出了被称为首个人工智能法律框架的提案,但欧盟《通用数据保护条例》的第一原则已经要求个人数据以公平、合法和透明的方式处理。

很多企业在没有花时间了解的情况下采用人工智能工具,而不确保其良好管理和道德公正,可能对企业及其声誉造成风险。一份关于金融服务中人工智能采用的报告¹显示,存在对负责任人工智能缺乏紧迫性的令人担忧现象,因为存在偏见的人工智能工具可能会错误地排除人们参与改变生活的经济机会。研究中有三分之二的高管无法解释具体的人工智能模型决策或预测如何做出;只有五分之一的组织设有人工智能伦理委员会或监控生产中模型的公平性。

显然,这里存在一个光谱:有些情景和技术比较直接,而有些则更为敏感,需要您进行更多工作来评估结果和影响。

随着人工智能工具变得越来越普遍,利用人工智能做出决策的企业需要努力保持客户和员工的信任,承担确保其人工智能模型、系统和平台可信、公平且能向受影响的人解释的责任。首先要了解潜在问题和意外后果,然后在构建和测试系统时考虑风险,确保系统按照预期的方式运行,适用于所有用户,而不会歧视或伤害他们。

请记住,负责任的人工智能有两个方面:您需要负责任地开发您的人工智能系统,但也需要确保系统的负责任使用,无论是由您自己的员工还是客户使用。当您使用预构建的云人工智能服务时,您也需要负责任地处理。

对于一些非常敏感的人工智能服务,比如定制神经语音,在这种服务中,您实际上复制了真实人声,可以用其发表言论,甚至可能是在其不会讲的语言中,需要遵循特定的程序,以确保不被滥用。

您需要申请并获得 Microsoft 的批准才能使用定制神经语音服务。然后,您必须向 Microsoft 提供使用者签署的释放文件,以证明您已获得知情同意,并且您必须遵守使用语音的行为准则。这包括始终明确表明这是合成语音,甚至限制您可以使用它做什么。让您的客户使用您的名人语音创建自定义消息,比如发送生日祝福或使他们的语音信箱更有趣,可能看起来是个好主意,但如果有人创造了恶意或冒犯性消息,并声称其是真实的呢?

大多数云端 AI 服务不会有这种限制,但可能在某些设置下无法以你希望的方式提供结果。这意味着进行与用户需要知道的内容相同的思考过程是有帮助的,同时还要考虑可能出现的问题以及你希望制定的政策来避免或减轻这些问题。

小贴士

实现负责任的 AI 不仅仅是技术问题;还涉及到强烈的文化和组织方面的因素。理解 AI 的影响并接纳多元化的视角,以确保 AI 功能能够对每个人都有效,可能需要在思维方式上做一些改变。让高级别人物参与进来有助于确保人们和项目对结果负责。你需要清楚地了解 AI 和项目指标:什么算是成功?如果你正在处理负责任 AI 和透明度很重要的领域,那么可能会出现错误和失误,因此组织在问题出现时如何处理就显得尤为重要,以确保项目有机会纠正问题并改进。

理解负责任的 AI

第一个具体针对 AI 的法规仍在起步阶段,我们将在下一章中进行讨论,但除了法律问题,你还需要考虑伦理和性能 —— 这两者并不像你想象的那样完全分离。

AI 可能会产生意外影响的方式有很多,负责任的 AI 涵盖了一系列问题:偏见、歧视、公平性、包容性、责任、透明度、可解释性、可靠性与安全性、隐私与安全性。其中一些理念比较直接 —— AI 系统应该能够可靠且安全地运行,并且保护隐私。其他一些则更为复杂且相互关联,因此尽管我们将工具分解成不同的主题,你会发现它们之间有很多交叉点。

AI 系统应该公平地对待所有人(即使不知道 AI 系统会让某人生活更加困难,如果发生了这种情况,你也要对此负责)。这与包容性有关 —— AI 系统应该赋能每个人 —— 但也与透明度和责任相关。AI 系统应该是可理解的,并且人们(或组织)应对 AI 系统负责,这意味着必须解释和证明决策和行动,回答问题,并承担可能的后果。

在 AI 系统中优先考虑公平性可能意味着在其他优先事项之间做出权衡,并审视假设,因此除了透明地说明正在使用 AI 和从用户那里收集的数据之外,还有必要尽可能透明地表明这些优先事项和假设。

当我们谈论“解释”AI 系统时,这对不同的人可能意味着不同的事情。机器学习专家可能希望看到导致特定预测结果的模型权重,以及所使用的算法和训练集的详细信息,模型的性能分数以及其他技术信息。但对于银行客户来说,这些都不会解释为什么他们的贷款被拒绝以及他们可以做些什么,对于业务用户来说,这些信息也不能解释为什么系统预测某个订单不能及时准备好,以及预测的可靠性如何。

负责任的 AI 提升了性能和结果

不要将负责任的 AI 仅仅视为你只在抽象层面关心的伦理方法。将这些原则付诸实践是你如何构建和部署更好产品、实现精确、有效、可靠的机器学习,为你提供所需的答案。这些好处远不止遵循合规性,接下来的章节我们将更详细地讨论如何提供负责任的 AI 是实现机器学习最佳实践的关键部分。

关于透明度。你可能需要能够解释决策的方法,包括任何自动化或基于机器学习系统推荐的决策,这可能是法律要求的。从商业角度来看,你希望客户能够信任你的组织,因此你需要提供透明度,并清楚地说明决策的制定过程以及其对人们的影响。数据科学家需要能够向业务团队解释模型,这些模型将用于预测、推荐或其他机器学习特性,以便他们能够放心地依赖于它们——但是具有更高解释性的模型也更容易调试和改进。

实验和迭代

你对使用的机器学习有越多的可见性,你可能会得到更好的结果,因为你了解输入数据、背景和模型的任何限制。机器学习是一个实验的过程,你从如何使用数据指导决策的假设开始,并寻找最能实现这一目标的机器学习模型:解释性将帮助你验证模型是否符合你的目标以及是否公平。

同样,实现可靠性意味着了解模型中的盲点,这样你就知道它在哪些地方出现问题以及原因。在考虑隐私和敏感位置时,思考空间分析的摄像机角度也将有助于提高准确性。如果语音或图像识别中的错误对特定群体的人更常见或更显著,你可能会面临公平性问题——但这也表明你的模型需要更多的工作。

知道数据的来源和收集方式可以更容易知道你可能需要哪些进一步的数据来改善结果。

在努力减少错误时,你需要继续监控错误率及其发生位置,以确保你不是解决一个问题而引入另一个问题——这是开发人员非常熟悉的调试原则。

思考如何构建有效的系统涉及到查看系统中涉及的人员以及技术实现细节:这对 AI 服务同样重要,正如它对界面和用户体验一样。

你需要保护你的训练数据和机器学习模型,以防竞争对手或恶意用户篡改它们或找到操纵系统的方法(详见第八章了解更多细节)。具体细节可能会有所不同,但同样,从适用于任何数据库的安全性和隐私问题出发,将有助于你交付更强大的 AI 系统。

但也有一些 AI 领域的问题在其他开发领域可能不太熟悉,这就是负责任 AI 工具可以帮助的地方。

交付负责任 AI 的工具

在使用数据和应用机器学习的透明性方面非常重要,但你需要超越仅仅透明,确保在机器学习生命周期中实施负责任 AI 原则。不同的工具可以帮助你识别、诊断和减轻负责任 AI 的错误、伤害和其他失败,帮助你探索数据并在其中做出负责任的决策。

警告

当你使用云 AI 服务,如认知服务和 Azure 应用 AI 服务,这些服务具有预训练模型或简单的定制步骤时,许多更具操作性的工具将不适用于你的工作流程(尽管它们都已作为开发模型的一部分被使用过)。但规划工具将是相关的,因为你仍然需要考虑负责任的 AI,无论是透明地告知你正在使用 AI 服务做出决策或提供预测,查看你训练的任何自定义模型的准确性和性能结果,还是使用自己的数据进行彻底测试,以确保这些工具能够很好地为你的整个受众群体工作,而不会排除特定群体。如果你的用户可能在户外、夜间或雨天拍照,则使用这些类型的图像来训练和测试对象和人脸识别。

负责任地构建服务是微软的责任,但也是你的责任。你不能简单地依赖服务总是正确的:你需要包括人类监督和对预测、分类和其他结果的审查——请参阅“人在环路监督”了解更多细节。并确保查阅下一节的透明度说明,以便清楚地了解服务的优点以及可能产生不良结果的情况,以及如何在这种情况下负责任地使用它。

在规划构建内容和评估进行中的项目时,一些有助于提供负责任 AI 的工具是相关的。其他工具将成为您的 MLOps 流程的一部分(如果您需要关于实际操作的刷新,请返回第三章),以便您可以快速而负责任地训练和评估模型。实验是成功机器学习的关键部分,如果您正在训练自己的模型,您将希望训练多个模型,并在透明度和公平性以及错误率和准确性上进行比较。

有许多不同的工具可用;在本章中,我们专注于来自微软的各种负责任 AI 工具,涵盖透明度、公平性、包容性、可靠性和安全性、隐私、安全性以及问责制。其中许多是开源的,但它们也集成到像 Azure Machine Learning 这样的服务中。您可以使用微软的负责任 AI 工具箱根据图 7-1 中显示的工具,为调试机器学习模型创建工作流程,用于公平性、错误分析和可解释性,或进行因果分析,帮助您基于机器学习预测做出数据驱动的决策。

使用负责任 AI 工具箱中的工具创建您自己的机器学习调试工作流程

图 7-1. 使用负责任 AI 工具箱中的工具创建您自己的机器学习调试工作流程

所有这些工具都可以单独使用,但工具包会处理所有依赖关系,并将它们包装在一个有用的仪表板中。

透明度工具

透明度不仅仅是告诉用户你正在收集数据和使用 AI,或者解释预测基于什么,尽管这很重要(你会看到这被称为可解释性或解释性)。它还涵盖确保开发人员和数据科学家清楚数据来源,以便他们能够负责任地使用它;对于使用的任何预构建模型或 AI 服务也适用这一点。

无论是训练自己的模型还是定制预训练模型,您都需要知道训练数据的来源和其中包含的内容。我们将在第八章更详细地讨论如何在您的组织中创建负责任的数据文化,但追踪训练数据集的生命周期以了解谁构建了它以及原因对于理解该集合中可能存在的人口偏差至关重要。每个数据集应附有数据表,记录收集原因及方式(包括对其进行的任何处理),确切包含的数据(原始数据或特征,任何机密、敏感、特权或潜在冒犯性数据)以及缺失的内容,建议的用途(包括任何已知限制),它已经被用于什么等等。Microsoft 数据集数据表模板包含一系列问题,帮助您收集数据表信息。

如果可能,在收集数据之前考虑您需要包含在数据表中的信息,并随着过程记录数据的动机、组成、收集、预处理、分发、维护和使用。

模型卡片和透明度说明文档

即使您使用预构建模型或 AI 服务,了解它是如何构建和运作的,可能有助于您负责任和有效地使用它。

因为 AI 是概率和统计性的,不太可能完全准确;理解其局限性和可能失败的地方将有助于您设计一个整体系统,更好地利用 AI 模型,因为这考虑到了这一点。

模型卡片和透明度说明文档记录 AI 模型和服务,帮助您了解它们的能力和限制,以及您可以做出哪些影响系统行为的选择,以达到最佳性能,例如设置置信度阈值以最小化假阴性或假阳性,或如何预处理数据以获得最佳结果。这种信息帮助您进行权衡,了解该服务是否能很好地处理您可用的数据类型。

Microsoft 致力于负责任的人工智能,其中一部分内容是为越来越多的 Azure AI 服务提供透明度说明和集成指南(参见使用认知服务的负责任 AI)。这些说明告诉您每种服务中哪些数据能够为您带来最佳结果,以及哪些方面可能不足(比如在文本分析服务中解释情感分析的局限性,或者警告 OpenAI 服务不适合用户可以在任何主题上生成内容的开放式场景,因为这可能会产生冒犯性文本或其他不受欢迎但非故意的响应)。文档将告诉您如何使用各种 Azure AI 服务,但透明度说明将特别有助于理解它们最适合什么样的用途。

对于每个认知服务和应用 AI 服务,Microsoft 会审视可能适用的不同公平性问题(通常是服务质量),并对其使用的模型进行测试。因此,对于语音转文字来说,它们有一个测试集,涵盖年龄、性别、语言和地区口音,以及可能导致准确性变化的其他社会因素,这些因素与真实世界中这些因素在人口中的分布相对应。随着模型的新版本训练,它们会进行测试,确保在统计上显著且在可接受误差范围内,它们对男性和女性同样有效。随着时间的推移,不同服务的透明度说明将包括测试哪些因素和群体的详细信息,模型已知表现较差的任何领域,以及尚未测试的内容,以便您可以将其与自己的用户群进行比较。

如果您将使用服务的背景与 Microsoft 测试时的环境非常不同(例如,语音识别通常在安静的环境中进行测试,而您将在嘈杂的环境中使用它,背景中可能有多人交谈),或者您知道将要定制模型,您将希望对培训数据和模型性能进行公平性评估(我们将在本章后面看到相关工具),并保留这些记录。您可能还希望将 AI 应用于更狭窄和有针对性的方式,限制其仅适用于您知道它会表现良好的情况,并尝试扩展这一点,一旦获得良好结果。

一些透明度说明还包括部署和集成指南,提供了关于如何负责地使用服务的有用信息。这对于新兴领域尤其有用,比如使用计算机视觉进行空间分析,在这些领域中,您可能需要在平衡隐私关切与监控办公室或零售场所以帮助维持社交距离的健康与安全效益之间进行权衡,因此让人们意识到正在收集的数据及其原因变得更加重要。这些说明中的细节涵盖了 Azure AI 服务如何处理、使用和存储您的数据,可能对包含在您自己的合规记录中会有所帮助。您可以创建透明度说明和集成建议,作为创建数据集数据表的扩展,用于您自己的模型。

AI 项目的检查表和计划流程

在应用负责 AI 的理念时,有一个涵盖您需要考虑的领域以及您需要做出的决策或权衡的正式流程是有帮助的。在涉及 AI 的项目中进行处理前必须回答的问题检查表可以帮助将其付诸实践。您可能希望尝试将模型分类为低、中或高风险。对于某些系统,您可能希望进行正式算法影响评估,该评估描述了其设计目标并指明谁将负责修复任何问题。当您创建并完成一个检查表时,您正在比数据集数据表和透明度说明更高层次地工作,但您正在探讨如何设计、实施和部署 AI 系统的相同类型的决策。

Microsoft 提供了一个AI 公平性检查表,它本身就是一个流程,帮助您制定更具体的检查表,以适应您自己的情况,尽管其名称如此,但它涵盖了一系列关于可靠 AI 主题如可靠性的负责 AI 主题。使用它来提出诸如:

  • 谁将受到这个系统部署的影响?是否有人因为使用该系统或应用而受到负面影响?我们如何减轻这种影响?

  • 这个系统可能存在哪些潜在的限制、问题或风险?

  • 我们计划使用的产品或功能在我们的场景中表现如何?在部署之前,使用真实世界数据测试 AI 功能并检查其准确性。

  • 我们将如何识别和响应错误?在实际使用中,AI 服务和功能很少能够百分之百准确:我们如何做好准备并处理这些问题?

  • 我们将如何衡量表现和成功?具体结果通常比使用和采纳率更好地衡量标准。

负责 AI 依赖于人们对构建系统做出负责任决策,并考虑到将使用或受到这些系统影响的人们。

Human-AI 体验(HAX)工具包 提供了一套指南,用于在构建与人交互的 AI 系统时做出负责任的决策。例如,大多数人会认为机器学习系统总是在学习,并会接受他们的更正而不会再犯同样的错误;但这只有在你收集数据并重新训练模型时才会发生。明确是否发生了这种情况以及他们何时可能看到改进是很重要的。

使用 HAX 工作簿帮助整个团队(设计师、经理和开发人员)在开始构建之前考虑系统将要做什么以及用户如何与之交互。然后通过 HAX playbook 来探索和规划可能出现的问题。

提示

通过结构化的头脑风暴会议将所有这些想法整合在一起。判断性判断 是一个卡牌游戏,你的团队可以扮演谁会受到你的技术影响、他们将如何使用它、可能出现什么问题以及你可以采取什么措施的角色。

解释性

一旦构建了你的机器学习模型,你需要对其进行评估。性能很重要,但了解模型如何工作以及模型中哪些特征影响预测和分类同样重要。在受监管的行业中,可解释的模型和解释可能是法律要求;在其他地方,如果利益相关者、用户和客户能看到贡献结果的因素,他们对机器学习结果可能会更加信任,但是信息可能需要针对每个受众以不同的方式呈现。

解释性工具可以帮助你理解数据中哪些特征最影响结果。如果你在预测房屋的正确销售价格,物业的年龄和当地学校的评级通常是数据集中最重要的特征,但房屋的大小和建筑用地、卧室和浴室的数量、是否有车库或门廊,以及其他因素如有无花园也会起作用。

负责任 AI 工具箱具有一个由开源InterpretML Python 包支持的模型可解释性步骤,它可以帮助你理解你的模型的行为一般性或特定预测的原因。

提示

Azure Machine Learning SDK 包括 InterpretML 在 azureml.interpret 中的模型解释类,可以通过展示预测分布和特定特征对整体模型或个别预测结果的影响来解释模型预测。它有一个可视化仪表板,让您在 Jupyter Notebook 中探索解释,或者您可以在 Azure Machine Learning 工作室中看到仪表板的简化版本。您可以在这些sample notebooks中尝试 Azure Machine Learning Interpret API。

除了了解为什么他们没有获得贷款或者为什么房屋定价工具建议特定的价格,客户可能还想知道他们可以做什么来获得不同的结果——在现实世界中应用那些机器学习预测。如果你知道模型中哪些特征对预测很重要,你可以使用反事实(counterfactuals)——那些不是真实的但可能的事情——来探索预测如何变化,并为他们提供探索这些建议的选择,再次明确它们基于什么。

警告

注意如何呈现 AI 系统解释;您需要清楚地表明,您正在解释模型学到的东西,以便人们可以决定是否信任预测,而不是描述真实世界的运作方式。使用频率而不是具体数字也有助于表明预测是概率而非确定性;考虑飓风地图上的概率锥体。

在由InterpretML DiCE提供支持的负责任 AI 工具箱中的反事实示例分析步骤,允许业务用户在被拒贷款申请中实验数据,以给客户提供一些建议(包括说明哪些特征可以和不能改变)。说“变年轻五岁”是毫无意义的,“每年多赚一万美元”可能不会立即有帮助,但能告诉他们如果关闭一个信用卡或偿还一笔现有贷款就会批准他们的这类透明度,是避免 AI 成为黑匣子的途径。

但是同样的工具也将帮助您找到公平性关切和问题特征。模型只是对真实世界的一种近似:它们可能不准确,并且模型中的特征之间可能存在相关性,这并不一定反映真实世界中的因果关系。如果你在看一个预测某人收入的模型,而将他们的资本损失从零增加到数千美元会导致更高的预测收入,要么模型有误,要么它捕捉到了像税务策略这样的相关性。

另一种方法是提出“如果”问题以进行基于数据的决策,利用由 EconML Python 包支持的因果分析步骤。对于我们的房屋定价场景,我们可以查看数据集中的特定房屋,看看扩大车库或增加壁炉如何改变建议的价格,或者获取一张根据这些变化将看到最大价格增幅的房屋表,以便您可以集中资源投入对影响最大的事物。

您还可以使用此功能创建策略。与其告诉所有想要出售房屋的人添加门廊会增加价值,不如使用“如果”问题来确定,如果您去除现有的门廊,老房子在小地块上的销售价格会更高,但是如果您在某个平方英尺数以上的新房子上添加门廊,销售价格会更高。

如果您想进行更高级的因果推理,DoWhy Python 库 也是负责任 AI 工具箱的一部分;它可以帮助您建模您所做的假设(指定您知道和不知道的内容),然后测试它们。

如果您对因果推断不熟悉,ShowWhy 将帮助您提出问题,揭示假设,并探索造成和混杂变量——这些变量既有助于您认为是原因的因素,又影响最终结果——并通过显示数据中的关系的图表来展示这些关系。

AI 公平工具

AI 系统可能因为社会中的偏见反映在训练数据中、开发和部署过程中做出的决策,或者数据本身存在的缺陷(比如不代表所有用户)或系统本身存在的缺陷而表现出不公平行为。

AI 可以自动化在训练集中偶尔出现的偏见,并通过常规应用而非选择性应用来放大该偏见。它还可以引入偏见,例如在翻译没有性别代词的语言时带有偏见的链接,将“这个人是医生,这个人是护士”翻译成“他是医生,她是护士”。

您还需要考虑数据与现实世界之间的不匹配。如果您假设长时间浏览网页的人对该主题更感兴趣,那么您未考虑到可能使用慢互联网连接的人,或者页面设计是否使某些人难以阅读。

AI 公平意味着评估模型可能对个体或群体造成的负面影响,并加以缓解。AI 系统可能产生许多不同的负面影响(通常称为“伤害”),但在查看 AI 系统行为方式时,有三种主要公平类型需要考虑——尽管公平问题可能会导致超过一种伤害。

服务质量公平性与系统的准确性有关。如果你在涵盖一个特定场景的数据上训练你的系统,但在更广泛、更复杂的情境中使用它,它可能表现得很差。面部识别对于肤色较深的人往往准确率较低,特别是对于肤色较深的女性;这是一个服务质量失败,因为它对某些群体的准确性较低。这是因为面部识别模型所训练的数据集中没有足够的例子让模型学习到正确的模式。

如果你的数据覆盖不足,你可以通过收集更多数据来减轻问题:如果不能,你可以考虑使用合成数据之类的选项,或者你可以选择在这些情况下不使用该模型。因此,如果你使用点击数据来训练推荐系统,会有一些群体的人从未看到过推荐,所以你无法获得他们的点击数据来训练系统:在这些情况下,你可以默认在一些预设链接之间随机选择。

分配公平性涉及你的 AI 系统是否为每个人提供同样的机会或资源,或者一个群体的人是否更有可能获得贷款或者其简历被职位申请系统接受。如果你的模型有服务质量问题,并且将其应用于模型准确性较低的群体,你可能会造成分配上的伤害。在安静环境中训练的语音转文本模型在嘈杂环境中会更不准确,但你可能也会发现背景噪音对某些群体的模型性能影响更大。

在责任 AI 工具箱中的公平学习工具将展示模型在不同群体间性能准确性以及它做出的决策,以便你寻找服务质量问题和分配伤害。

将性别中性语言翻译为“他是医生,她是护士”是一种刻板印象,但也是所谓的表象性伤害的一个例子。如果特定群体系统性地被过度或不足地代表,这可能暗示他们不适合从事该职业或处境,如一个搜索 CEO 的图像搜索只返回男性的图片。图像标记和标题可以分别产生可接受的图像和标题,但并列在一起可能会引发问题。

警告

不是所有的失败都是相同的。如果你的系统生成的图像标题看起来强化了有害或历史性的刻板印象,这对你的用户可能比一个毫无意义的标题更有问题,尽管在衡量模型准确性时它们可能都看起来是错误的。

InterpretML 可以帮助你理解模型中可能导致这些伤害的特征,接下来的部分中探索模型准确性的工具也可以。如果你想深入了解不同类型的伤害,你可以在本章的末尾找到更多信息。

可靠性和理解错误的工具

可靠性是关于理解模型的盲点。它在哪里失败了,为什么失败了?

考虑模型准确性较低的情况,而不是仅看单一的性能评分。如果你正在处理包含户外拍摄图片的图像,那么在天黑和下雨时,视觉识别是否仍然准确?如果你正在建立一个贷款批准模型,它是否对不同年龄、性别、教育或种族的申请人群体表现相似?负责任 AI 工具箱中的错误分析步骤可以帮助你通过发现数据中错误率较高的群体(称为群体),调查哪些输入特征影响这些错误率,并探索模型、特征和数据集来调试预测。

图形可视化在这里特别有帮助,显示特定特征的错误率。你可以标记那些看起来特别有趣或有问题的特征,然后探索这些群体的统计数据。也许对于某些群体有很多误判负例;这意味着你需要查看数据探索器中的数据分布,看看它是否平衡。如果这些群体的数据太少,将会降低模型的准确性,因此这可以指引你收集什么数据来改进它。

你还可以查看模型用来进行预测的最重要的特征,并将其在不同群体中进行比较。这可以更好地帮助你理解你的模型学到了什么。你还可以生成解释——尽管这些解释对数据科学家而言是有意义的,而不是最终用户,所以如果你打算向与模型交互的人员展示准确性水平和其他信息,你将需要不同的工具来生成这些信息。

人类在环路监督

公平性的概念是复杂的:它们可能与领域和背景相关,你可能需要考虑长期的影响以及即时的伤害。自动评估公平性的尝试不会像人类评估数据中的基础分布、模型在多大程度上代表真实世界以及可能产生的影响那样给出细腻的判断。提议中的欧盟关于人工智能开发和使用的法规要求对“高风险人工智能系统”进行人工监督,而 2020 年华盛顿州的面部识别法案则规定进行“有意义的人工审查”。

但仅仅让一个人审查和盖章机器学习模型提出的决策并不能完全避免所有可能的伤害;人类可能有他们自己的偏见和假设,他们可能过于信任自动化系统²,或者他们可能没有足够的资历来对结果做出任何有意义的改变。看到 AI 的预测可能会影响他们自己的决策;如果在听录音之前看了一份文字记录,很难将话语听成不是你已经读过的文字——就像光学错觉上的标题可能影响你最初的感知一样。

您需要考虑向行使监督权的人提供哪些信息,他们有什么样的激励来支持或拒绝自动化决策,以及如何负责地呈现 AI 建议并允许用户探索替代方案。

如果您正在使用 Azure OpenAI 服务生成看起来像是人类写的文本,请考虑是否需要让用户知道它是自动生成的,而不是由另一个人编写和审核的。为用户提供多个建议供选择,并明确称其为建议,可能会避免他们仅仅点击“确定”而不花时间考虑其准确性和适当性。

OpenAI 服务包括内容过滤器,允许您定制内容的语调和主题。但是,如果它生成了某些关键性内容,无论是法律建议、合同模板还是 API,让低代码开发人员访问您企业自己的数据和服务,您需要在工作流程中设计一个彻底的审查流程。

Power BI 中的自动聚合是通过分析用户查询模式的机器学习创建的,因此系统可以缓存会提高查询性能的聚合度量,而不会消耗太多资源。管理员可以使用滑块来微调此行为,以便他们可以自行决定性能与存储之间的权衡。如果适合您的应用程序,为用户提供探索和实验的选择可能有助于他们做出最佳决策。

确保每个预测或决策的置信度值是清晰的,并构建支持人们的应用程序,通过提供信息而不是取代他们来支持他们。在衡量 AI 系统的效果时,不要仅仅看简单的精确度和召回率指标,要看它们是否比不使用系统时帮助人们取得更好的结果。

如果您有聊天机器人或自动系统,请考虑如何提供“退出通道”,让用户升级其问题到人工环节,并包括他们已经提供的信息,这样他们就不必从头解释一切。AI 可能能够处理的主题,您可能希望由人来处理,因为它们复杂或微妙。尤其是如果您拥有一个逼真的神经语音或文本,看起来就像是人类编写的服务,清楚地告诉用户何时与 AI 系统而不是真人交互,以及如何联系真人至关重要。

拥有备用选项至关重要;如果您的用户对 AI 工具的自动结果不满意,请为他们提供一种方式自行填写详细信息或联系人工帮助他们。收集例子(经过许可)表明您的模型未能产生良好的结果,为进一步的开发和培训提供有用的数据,但请记住告知用户您将如何处理这些数据以及他们是否应该期待看到变化。

小贴士

您的用户通常期望 AI 系统根据他们的互动学习和改进:清楚地表明是否会发生这种情况。请求反馈和例子,表明系统不起作用的地方,可以成为找到下一个版本的 Beta 测试人员的好方法。这也将帮助您了解哪些类型的故障真正重要,因为并非所有错误都相同,有些需要更多的工作来处理(如果它们是冒犯性的而不仅仅是令人困惑的话)。

使用透明性、可解释性、错误分析和因果推理工具来探索您应该告知参与人员的内容。例如,HAX Toolkit 提供了一组指南,说明了 AI 系统与人类的交互方式,这些指南通过设计库中的实用模式来说明,这些模式从熟悉的服务中提取了例子。

HAX Toolkit 指南中的准则将帮助您负责地展示 AI 功能

图 7-2. HAX Toolkit 指南将帮助您负责地展示 AI 功能

在开发机器学习模型时,“人在循环中”的概念也适用——例如,使用机器学习建议标签来训练数据,但实际上仍需某人(最好是该领域的专家)接受并应用这些标签。

总结

在本章中,我们探讨了您可以将其视为蜘蛛侠原则的内容:AI 是强大的——伴随着强大的力量而来的是巨大的责任。即使您只是使用而不是构建机器学习模型,思考可能出现的问题并使用负责任 AI 的原则来避免或减轻潜在问题是很重要的。我们介绍的工具将帮助您从如何道德使用 AI 思考到将其作为您的机器学习工作流程的一部分,以获得实际的好处;做好事做好事,正如我们所说的那样。

但是虽然负责任的 AI 是你需要开始的地方,但还有其他问题需要与之并行考虑,比如实验和协作。在下一章中,我们将探讨如何建立一个强大的数据文化,这将帮助您提供支持负责任 AI 的所有最佳实践。

更多资源

负责任的 AI 是一个广泛的话题,重要的研究仍在进行中;如果您希望深入了解更多,有大量的资源可供选择:

¹ “负责任 AI 的现状, FICO, 2021 年 5 月。

² 研究表明,尽管我们知道它们不是人类,我们本能地将计算机视为人类对待(Reeves, B., and C. Nass. The Media Equation: How People Treat Computers, Television, and New Media Like Real People and Places. [纽约:剑桥大学出版社,1996])。帮助您的用户创建一个关于 AI 系统如何进行预测和决策的“心理模型”可以帮助他们决定何时应该信任这些建议,何时应该质疑它们。

第八章:机器学习项目的最佳实践

实现我们在上一章讨论的负责任 AI 结果意味着制定并实施机器学习的最佳实践。因为机器学习和 AI 技术依赖于数据科学,且强调实际结果,良好的数据处理至关重要。在特定于机器学习的最佳实践之前,您还需要考虑如何在您的组织中建立数据文化——一套鼓励基于数据做出决策的规范和行为,以便这些最佳实践得以发展。

与数据合作良好

数据文化需要普及的数据素养。人们需要理解如何负责地处理数据,并拥有获取、操纵、准备和可视化数据的工具。其中一些涉及您设置的技术系统,但正如术语所暗示的那样,其中一些是社会和文化问题。有了按需、云端 AI 工具,很容易认为负责任地收集和筛选数据是“别人的问题”,但负责任地处理数据既是组织内的个人责任,也是集体责任。

每个人都应该询问关于数据的关键问题:

  • 这些数据的价值是什么?我们需要收集它吗,我们应该保留它吗?

  • 我们收集这些数据的目的是什么?我们可以用它做什么?

  • 我们用这些数据做什么,我们如何告知用户,以及我们给予他们什么控制权?

  • 如何保护这些数据?

数据共享

数据孤立和数据在部门和不同工具之间的碎片化(可能使用专有格式)会导致数据的片段无法集成。建立数据平台可以更轻松地访问和使用您拥有的所有数据,并使用云数据存储可以简化这一过程。例如,存储在 Azure Blob 存储中作为 Power BI 数据流的一部分的数据存储在 Dataverse 中,并且可以被 Azure Data Factory、Azure Databricks、Azure Notebooks 和其他服务访问和重复使用(在适当的访问和权限下)。

鼓励人们分享数据,并建立数据质量和筛选流程,以避免不同团队和数据存储中存在多个略有不同版本的同一数据集。

同事和团队之间的数据共享意味着不同团队不再在相同数据上进行相同的数据准备工作,人们可以在彼此的工作基础上进行改进和标准化数据工件,并将自己的专业知识贡献给这个过程。他们会使用他们熟悉的工具。因此,业务分析师可能会在 Power BI 中探索数据集以理解历史模式,而数据工程师可能会将同一数据集用作 Azure Machine Learning 中的机器学习训练数据,以利用这些模式进行预测并评分新交易。Power BI 数据流可以在多个报告中使用,同事们也可以通过其他工具(如 Azure Databricks)来丰富开发者使用。

分享和重复使用数据工件还可以实现更严格的数据分类、数据治理和生命周期管理。

数据来源和治理

您的机器学习实践的治理对于业务和性能原因都很重要。如果您没有适当的框架和流程来负责处理数据——评估偏差、公平性、可解释性和我们在前一章中介绍的其他基本原则,以及隐私和安全性,那么您的模型的鲁棒性和长期性能可能会较差。没有这些流程,您将无法跟踪和衡量您对数据和模型进行实验和迭代时的影响。

了解数据集的来源对于负责任地使用它们至关重要。这可能是法规要求,例如 GDPR 和加州消费者隐私法案,但即使没有法规,根据一组情况收集的数据可能在不同情况下根本不适用或相关。

物理或外部系统可能会随时间变化,传感器可能会被移动到不同的位置,不同的收集方法可能会使物理读数产生偏差。对于关于人的数据,观众的人口统计信息或经济状况可能已经改变或不代表您自己的用户和观众。来自不同领域的调查数据可能会对相同术语使用不同的术语或定义。即使是常见术语在不同的地区和地理位置也可能有不同的含义:在英国和美国,饼干是完全不同的东西!

精心策划标签

您需要评估众包标签、标题和标签在训练数据中的质量,考虑到准确性和可能存在的文化偏差。有一个清晰的政策来处理您自己进行的标记,并为人们提供一致的标签集,附有示例和定义供参考。制定清晰的指导方针,说明您希望某人对其选择的标签有多大信心,如果多个标签看似合适或没有符合的标签,应该如何处理,以及如果他们意识到在标签上犯了错误应该如何进行更改。

对于图像,您可能希望使用 Azure 机器学习的 ML 辅助标注功能,该功能可以使用在图像数据集上进行的手动标注来对图像进行聚类以加快标记速度,然后预测标签并绘制围绕对象的边界框,您可以接受或更改这些标签。这有助于减少标记数据的时间和标签的一致性。

使用像COCO这样的可移植格式来标记数据集有助于数据的分享(并且像Roboflow这样的工具可以转换成其他格式)。

数据集需要标记详细信息,包括数据的收集方式、时间和地点,以及收集数据的原因——包括法律依据和最初收集的目的,因为这可能影响数据的全面性。更多的数据并不会自动提高性能:拥有正确的数据比拥有“大数据”更为重要,只是希望所需数据在其中。特别是对于训练现有模型的自定义版本,拥有相关数据的良好标记将比大量未经精心策划的数据更能提高性能。

考虑您的数据内容

数据最小化——仅收集您实际需要的内容——也是符合规定的重要原则。这可能意味着您期望包含所需数据的数据集实际上可能不包含,因为它是为不同目的收集的。对此的答案不是扩大范围,收集更多数据而不知道其是否相关。正如英国数据保护监管机构 ICO 所述:“找到相关性并不会事后证明获取数据是合理的。”

第七章的数据表模板将在这里有所帮助。如果您使用像 Azure Purview 这样的数据治理工具来对数据进行分类和理解,这也可以用于结构化数据集。

您还需要记录您的数据准备流水线以及作为其一部分执行的任何数据转换或丰富。这种数据血统对于实验至关重要:数据准备需要一致和可重复,以便您可以比较不同版本模型的性能和准确性。像 Azure Machine Learning 这样的服务通过模型注册表提供自动化的血统审计,类似于它们跟踪机器学习实验的结果以及数据集和模型的使用方式。

如果您处理包含个人或敏感信息的数据(仅在静止状态加密不足以保护处理期间),您可能需要使用数据遮罩、伪匿名化和聚合等技术对某些信息进行去标识化和匿名化,同时创建法律和组织保障措施,如访问控制、使用政策以及将个人数据与更一般数据分隔开来。您还需要评估如果数据与其他公开可用信息结合可能导致重新识别的风险。或者您可能需要探索新兴技术,如通过工具如SmartNoise注入噪音以防止这种相关性的差分隐私技术,或者针对加密数据上的机器学习使用同态加密。

合规性和审计

你用于机器学习的数据很可能会受到你组织的合规政策约束。至少,你可能需要记录机器学习系统的可重现性和可审计性。使用云 AI 服务可以简化这一过程,因为你可以提取诸如模型版本和使用情况等细节,针对你自己的模型,并参考服务的合规文档,适用于你使用的预构建模型和 API。

对于受监管行业和隐私法规管辖的地区,你可能需要就你的组织在进行机器学习时是否属于数据控制者或数据处理者寻求专业意见,并了解这对合规政策意味着什么。除了数据收集,你还需要考虑包括问责制和隐私设计原则在内的数据保护原则。如果你正在使用机器学习进行自动决策或个人画像生成,你可能需要正式评估隐私、数据保护和合规风险。

机器学习的安全性

你还需要考虑训练和运行数据的安全性,以及保护对正在运行的机器学习系统的访问权限。你需要在允许足够多的人员访问数据集和机器学习资源以从中获得价值的同时,遵守安全和合规政策。机器学习的前提是在探索数据之前你并不知道能从中发现什么见解,因为训练机器学习模型是你发现数据中哪些特征提供最佳预测的方式。

使用云 AI 服务可以使合规性工作更加容易,因为云服务处理了更多的内容,尽管你需要确保所使用的账户和凭证的安全性。使用 RBAC 和最小权限原则;并非每个人都应该对所有数据集有访问权限。能够访问数据标记的人不一定能够删除数据或使用数据来训练模型。

提示

使用虚拟网络和 Azure 私有链接,以确保你只能从虚拟网络上一组私有 IP 地址连接到你的 Azure 机器学习工作空间,而不是任何公共 IP 地址(并记得将你的存储和推断环境迁移到同一个虚拟网络)。

像任何其他计算系统一样,机器学习系统可能存在安全漏洞:在机器学习库中、在训练过程中、在推断中,或者在模型部署中。

与其他云服务一样,您在云 AI 服务中也有相同类型的共享责任模型。云 AI 服务通过定期打补丁和更新来处理机器学习库中的漏洞。滥用部署漏洞需要写访问权限以更改机器学习模型(尽管读访问权限可能允许攻击者窃取模型、离线评估它,并利用所学来攻击正在使用的模型)。无论哪种方式,您都需要通过使用 RBAC 并保护服务和模型的凭证来限制和保护对云 AI 服务的访问。云服务中的版本控制和使用信息将再次对审核很有用。

在训练中的漏洞可以通过验证输入并对数据集进行完整性检查来处理。在推理中的漏洞通常是攻击者试图欺骗机器学习模型,通过制造看起来不是实际内容的输入(例如在停止标志上放条带,使其被识别为限速标志),但也可能是在意料之外的上下文中的输入,例如在一辆车前面行驶的卡车上的商店标识或临时交通灯。

这些“对抗性”攻击更难以防范;考虑一下您的机器学习模型可能受到的攻击方式,并在训练中使用对抗性示例,或限制任何一个来源对模型进行推理调用的次数,以防止有人发送数百条消息来测试哪些消息可以通过。

提示

安全专业人士可以使用 Microsoft 的开源Counterfit 工具自动化地进行 AI 模型的安全风险评估,这些模型可以是本地托管的,也可以是云端的,使用对抗性 AI 框架,使用他们熟悉的方法,而不需要成为机器学习专家。我们在前一章中查看的数据表和透明度注释也将对他们需要进行的机器学习系统清单很有帮助。

使用AI 安全风险评估框架指导您在保护机器学习系统方面的工作,这些工作建立在您在开发和运营的其他领域已经进行的安全风险评估基础上。有一个详尽的指南,用于威胁建模 AI 和机器学习系统,将帮助您评估、测试和改进您的系统。如果您刚开始考虑机器学习安全性,Counterfit 的防御指南是一个很好的起点,即使您不使用这个工具也是如此。

不要忘记考虑数据集和机器学习模型何时将被淘汰和替换。考虑数据保持相关性的时间政策,如何评估数据是否过时以及如何评估模型老化对预测长期质量的影响。

在数据治理和共享机制得到落实后,您可以开始建立一个流程,这将使您更有可能从机器学习中获得有用的结果。

使机器学习项目成功

进行机器学习和其他形式的人工智能的目的是帮助解决问题;这意味着您需要知道您尝试用特定的机器学习项目来解决什么问题。

除了处理数据的正确流程外,您还需要明确如何使用机器学习来推动决策的指导方针。这些指南应始于探索和记录问题:机器学习模型需要回答的问题是什么,需要采取的决策或行动可以通过数据进行决策。如果您没有解决自己的问题,您需要与将使用机器学习系统答案的业务团队共同投入时间来理解问题。您可能希望有领域专家参与规范、测试和验证过程。

首先通过手动解决问题或使用启发式方法来确保您对问题及其可用数据有清晰的理解。这也将为您提供一个用于衡量机器学习改进成功的基准(如果使用机器学习不比手动解决问题效果更好,那么请仔细考虑机器学习是否真的适用)。

然后,您可以将业务场景映射到一个可以应用机器学习的数据科学问题;使用表 8-1 中的示例来帮助您构建自己的场景、决策和问题列表。

表 8-1. 将业务问题映射到数据科学问题的实际场景

业务场景 关键决策 数据科学问题
预测性维护 我应该为这台设备提供服务吗? 这台设备在接下来的x天内发生故障的概率是多少?
能源预测 我应该购买还是出售能源合同? 一个地区的能源需求的长期/短期预测是什么?
用户流失 我应该优先考虑哪些客户来减少流失? 每位客户在x天内流失的概率是多少?
个性化营销 我应该首先提供哪种产品? 每种产品客户购买的概率是多少?
产品反馈 哪些服务/产品需要关注? 每种服务/产品的社交媒体情感是什么?
根本原因分析 为什么这个产品缺货? 每种产品和分销中心库存水平的关键影响因素是什么?

准备您的数据集

你需要一个“平衡”的数据集,包含足够数量不同类别数据的示例,并且分布均衡。如果你正在训练一个自定义图像识别器,用来检测目录中不同产品或这些产品的不同损伤类型,你需要所有这些示例,这些照片要在不同情况下、不同时间、不同光照条件、不同距离下拍摄,并且大致相等数量的图片属于每一种类型,就像图 8-1 的第二组照片那样。

想象一下,你在教一个图像识别器区分玫瑰和雏菊。如果所有的雏菊图片都是花朵的特写,而所有的玫瑰图片都是整株玫瑰花的图片,一朵白色玫瑰的特写照更有可能被错误识别为雏菊。对于那些以教导医生为目的设计的图像训练 AI 系统来说,学会的可能是诊断图片中的尺度参照,而不是显示的病况!

提示

如果您正在使用 Azure 机器学习自动化机器学习(AutoML),它会执行多项优化以避免过拟合,并显示图表和指标,帮助您确定数据是否不平衡。

使用顶部集合的训练图片,您将意外地训练一个模型,知道水果盘上的水果和别人手里拿着的水果,而不是苹果和橙子:底部集合的训练图片更加多样化和平衡

图 8-1. 使用顶部集合的训练图片,您将意外地训练一个模型,知道水果盘上的水果和别人手里拿着的水果,而不是苹果和橙子:底部集合的训练图片更加多样化和平衡

在现实世界中,各种类型和类别的分布通常是不均匀或不平衡的。如果您正在训练一个图像识别系统来检测交通灯是红色、绿色还是黄色,那么您将拥有更多红色和绿色交通灯的图片,因为交通灯是红色或绿色的时间比黄色长得多。使用一个真实代表性的数据集,模型将仅学习主导类别,并且可以显示出很强的准确性,而不必学习识别黄色交通灯,因为它们相对较少。

这意味着你需要平衡训练数据集,确保所有三种交通灯状态的数量大致相等,可能还需要一些特写图片,显示交通灯而不显示道路和交通背景,这样系统就不会学习交通流量状态而是交通灯状态。(获取少数类别数据的示例可能很困难,你可能需要考虑使用合成数据。)

将训练数据拆分,并保留数据集的一部分用于验证,另一部分用于测试非常重要。还要注意不要调整训练和测试集以使模型在测试数据集上表现更好,因为这会使模型容易过拟合:模型在训练数据上拟合得很好,但在真实世界数据上失败,因为它没有学习到允许其处理新数据的一般模式。花时间构建一个包含模型需要处理内容的测试集是很重要的。

为了避免过拟合,您可以使用交叉验证——将数据分成不同的子集,并在每个子集上训练模型。这样做还能避免调整训练集以获得更高分数的诱惑,但由于需要多次训练模型而不是一次,因此过程会更加耗时,所以通常需要明确选择。再次强调,记录所有这些决策是非常重要的。

确立性能指标

与任何其他类型的开发一样,一旦您知道需要用机器学习解决什么问题,就需要记录成功的标准,以便项目朝着正确的目标取得进展。再次确保业务用户参与其中。

有许多可供选择的指标来评估预测成功的分数;云 AI 服务将自动展示许多这些指标给一个模型。

在评估模型准确性时,不仅要考虑模型答对的次数(正确识别交通灯颜色),即精确度分数,还要考虑到召回率:有多少张黄灯的图像被正确识别,而不是标记为红色或绿色?Figure 8-2 展示了如何计算这些分数。

精确度和召回率衡量模型的正确性及其正确预测

图 8-2. 精确度和召回率衡量模型的正确性及其正确预测

还有其他适用于特定机器学习算法的准确性指标。对于回归任务中最常用的指标之一是均方根误差(RMSE)。其定义为实际得分与预测得分之间的平均平方距离的平方根,如下所示:

RMSE = 1 n j = 1 n ( y j - y ^ j ) 2

在这里,y[j] 表示第 i 个数据点的真实值,ŷ[j] 表示预测值。理解这个公式的一种直观方法是,它是真实值向量与预测值向量之间的欧氏距离,除以 n,其中 n 是数据点的数量,取平均值。

此外,请考虑预测或分类错误的影响。假阳性或假阴性更成问题?因为一笔交易的成功预测过低而错过机会更糟糕,还是因为分数过高而花费时间但交易最终未能成功更糟糕?如果可能会排除或处罚人员,则需要在决定哪些模型提供足够好的结果时,遵循我们在前一章中讨论的负责任的 AI 原则。

警告

测量 OpenAI 服务结果的准确性是一个更开放的问题,因为它取决于您试图实现的业务结果以及您提供的任务的微妙和复杂性。通常,您会从使用“few-shot”方法开始,只需提供几个示例作为概念验证,看看该服务是否合适,然后通过进一步的提示和完成示例来微调模型。按设计,每次发送相同提示到 OpenAI API,您都会获得不同的结果,并且您可以使用温度参数来控制响应中的变化程度。在选择两个建议的文本段落之间时,往往是一个非常主观的决定,因此您需要考虑如何量化“准确性”和“适用性”,以解决您的具体问题,并且您需要考虑安全性以及准确性(例如,生成的响应是否适合您使用的上下文,并且是否以适当的透明度呈现)。有些响应可能为空白,因此您需要一种方法来筛选它们。

无论您的特定机器学习模型的准确度指标如何,都需要将它们与您希望实现的业务结果联系起来。如果您生成的内容无助于某人做出决策或完成任务,那么即使模型准确,也可能没有用处,因此请考虑模型分数的上下文。情感分析可能会完美地检测到客户在与呼叫中心代理人交谈时的不满;如果这是因为他们打电话取消家庭成员最近去世的订阅,那么代理人无法做任何“修复”情况的事情,提供折扣或其他留存激励措施也是不合适的。

透明度和信任

在前一章中,我们看到理解和解释模型以及使用它们做出的决策的重要性。你的机器学习过程需要包括分享模型的准确性和置信水平,并解释它的工作原理以及它在预测时的优势和劣势,以及会使用它和受它影响的人们。这可能意味着向业务团队和其他利益相关者展示模型的指标,包括准确性,实际置信水平的含义,以及模型依赖的特征,为客户记录这些详细信息或仅在审计时跟踪它们。

实验、更新和继续前行

模型的指标应帮助你了解它在解决问题和回答你为其设定的问题时的表现如何。虽然你可能能够立即从预构建的云 AI 服务中获得良好的结果,但在许多情况下,你将希望尝试不同的模型、不同的算法和超参数选择,或者在定制模型时尝试不同的训练数据集,以查看是否可以获得更好的结果。

我们在本章早些时候讨论过的良好数据文化的一部分是接受实验并尊重这些实验的结果:

  • 明确定义假设,但不要固守。

  • 愿意从实验中学习(成功和失败)。

  • 看看别人做过什么有效的事情。

  • 与同行分享学习。

  • 将成功的实验推广到生产环境。

  • 理解失败是实验的一种有效结果。

  • 快速转移到下一个假设。

  • 优化下一个实验。

随着时间的推移跟踪模型的性能,以及在首次创建它时,并查看它与销售、收入、客户满意度以及其他你关心的结果之间的相关性。随着情况的变化,你可能需要更新、淘汰或替换模型:记录机器学习过程的结束以及开始。

合作而非孤立

知道何时需要更新模型——甚至是否首先有用——意味着不是孤立工作。预构建的云 AI 服务和低代码系统中的 AI 集成吸引了企业用户使用机器学习解决自己的问题,但当涉及到开发人员、数据工程师或数据科学家时,他们将需要彼此合作,也需要与将使用机器学习模型的业务团队合作。

设置你的机器学习流程,使他们都有正确的工具和访问权限来处理对他们重要的领域——数据的摄入和准备,为数据科学家构建、部署和更新模型;为开发人员构建、维护、部署和更新应用程序——但他们可以轻松地共同工作。像 Azure 机器学习这样的云 AI 平台通过 RBAC 和与 Power Platform 等其他系统的集成简化了这一过程:数据科学家可以访问完整的机器学习工作区,数据工程师可以访问数据准备和标记工具,机器学习模型可以与应用程序开发人员和低代码业务用户共享。

总结

在本章中,我们看到将负责任的人工智能融入到您的机器学习流程中,可以帮助您建立保护客户和组织的最佳实践,并获得最佳的机器学习模型和数据集性能。

请记住,这不仅仅是基于广泛数据素养建立负责任数据文化的问题,也与任何具体技术或工具一样重要。这也涉及清楚定义您试图解决的问题,这意味着理解业务场景。

云 AI 服务的一个优势是它消除了您需要管理机器学习系统运行的基础设施的需求——甚至是使用认知服务构建这些系统的需求。想要窥探认知服务背后的幕后运作,看看微软如何大规模地实施这些负责任的 AI 原则和机器学习最佳实践?请查看下一节。

第三部分:AI 导向的现实世界架构

第九章:微软如何为数百万用户运行认知服务

在过去的两章中,我们看到了负责任地使用 AI 以及为机器学习提供最佳实践有多么重要,这些实践能够提供一个实用和负责任的 AI 系统。但是在实践中,这样做的基础设施和过程是什么样的呢?

我们在第四章中介绍的 Azure 认知服务在 30 多个 Azure 区域中 24 小时运行,支持微软自己的应用程序功能以及像 Airbus、Progressive Insurance、Uber 和 Vodafone 等大型组织的特性,为数千名员工和数百万名客户提供应用程序支持。

每个月超过 540 亿次认知服务交易;仅语音服务每月转录超过 1800 万小时的语音。决策 API 每天为 Xbox 提供 600 万个个性化体验,而视觉服务为 PowerPoint 和 Word 中的超过 10 亿张图片添加了自动 alt 文本。随着大流行期间 Teams 的使用增长,认知服务的使用量也增加了,因为它为会议中的实时字幕和录制会议的转录提供动力。语音服务必须扩展七倍以处理 Teams 字幕需求,每天在 Azure 上消耗 200 万核心小时的计算资源。

不同的认知服务不断进行更新,包括预览、新功能以及修复底层技术堆栈中的任何漏洞。如果您希望在自己的基础设施上运行自己的机器学习模型或一些认知服务容器,那么您必须自行处理所有这些部署、更新和安全边界。

如果您有数据主权问题或者希望在边缘使用 AI 而没有连接性或需要实时决策——例如在石油钻井平台或工厂生产线上,这一点就显得很重要了。

但是,在您可以运行的认知服务容器中使用的模型已经过优化。如果您使用 Azure Percept IoT 设备在边缘获取 AI 洞见,它们依赖于认知服务,但它们使用的是可以在摄像头上运行而不是在云中强大虚拟机上运行的微小版本的模型。

云服务还能更有效和经济地处理突发的流量。Azure 等超大规模供应商之所以能够更好地购买硬件、网络带宽和电力,是因为它们购买的规模如此之大,甚至具有操作经验——这一点非常重要。如果您只有一个客户并且他们有突发流量,那么拥有容量处理这一流量意味着要为硬件提供资源,这在其他时间可能会被低效利用。云服务因为有数千个客户,因此有更大的缓冲区来处理任何一个客户的需求激增,这意味着以更低的成本提供这种规模。

人人都能用 AI

如今的认知服务在 2015 年作为名为 Project Oxford 的四个 API 推出,用于视觉、语音、面部识别和语言理解。不久之后又推出了另外五个 API,然后又推出了另外十几个,使用了微软研究开发的最新技术和模型,并迅速投入生产。但到达 30 个认知服务的时候,每个服务都在四种不同平台的自己的实例上运行,并有自己的支持团队。

在快速开发新产品的过程中会发生这种碎片化,但如果您希望在增长过程中保持质量和效率,这种情况是不可持续的。在 AI 领域总是有新的研究可以使现有服务更加精确,或者为新功能提供动力,客户希望在更多 Azure 区域中可用认知服务,支持更多语言,并提供更多定制模型的选项。

为了满足更多客户的需求,不断推出新服务,以及更新和运营维护以满足 Azure SLA,并履行认证、合规性和数据监管义务,团队创建了一个单一平台用于运行认知服务,其架构可以在 图 9-1 中看到。此外还有一个全天候的售后支持团队,设有轮换的“直接负责人”角色;¹ 负责积极监控日志、响应事件、进行根本原因分析,并跨所有服务分配缺陷,以便将高要求的支持角色分摊给更多人。即使是大型企业运行自己的 AI 系统时,也很难达到这种运营承诺水平。

在单一平台上运行使得认知服务更易于更新、运营和扩展;这是在单个 Azure 区域中认知服务的架构

图 9-1. 在单一平台上运行使认知服务更易于更新、运营和扩展;这是在单个 Azure 区域中认知服务的架构

构建更加即插即用的基础设施使认知服务适用于一些政府合同所需的“空隙”云环境——在这些环境中,运维团队可能并非机器学习专家——但这也带来了其他好处。这种完全自动化的部署意味着服务运行的任何地方手动部署错误更少,灾难恢复更快。如果整个集群需要重建,只需点击按钮即可运行重建操作,并在新集群可用时将流量发送至新集群。

同样,因为这些空隙部署在同一平台上,它们所需的私有端点等功能可以开发一次,然后为公共云认知服务提供。

使用深度学习来构建所有认知服务模型,使得构建定制模型变得简单,其中一个经过训练的深度神经网络的最终输出层被替换为针对更具体数据进行训练的输出层。这意味着您可以利用经过大型数据集训练的模型(这需要时间),并快速调整它以处理您的特定问题。

认知服务团队还包括一组研究人员,他们被称为“疯狂想法”变成成功项目的书籍中所提到的“Loonshots”内部群体,负责从 Microsoft Research(其使命是展望两三年)引入新的算法、模型和方法,这些服务可以在一年内交付到同一平台上。

集群和容器

认知服务平台的架构使用在 Kubernetes 上运行的容器(尽管它使用与 Azure Kubernetes 服务相同的后端,但它是一个独立的部署)。

每个 Azure 区域中都有多个集群,每个集群都有自己的 VM 代理池;一些服务共享集群,而像语音这样的需求更高的服务则在专用集群上运行。

在 Azure 中运行的认知服务容器与您可以在边缘运行的用于托管特定认知服务的容器并不相同,因为 Microsoft 利用其在认知服务平台中构建的编排器来为不同的 VM SKU 分配不同的容器,这些 SKU 可能具有 GPU 和快速本地存储或仅具有 CPU。不同的认知服务被分解为许多微服务,元数据定义了每个服务所需的硬件和软件要求,因此容器可以部署到适当的基础架构上的正确代理池中。一个微服务的容器可能在低功耗 CPU 上运行,而另一个则在配备强大 GPU 的 VM 上运行。

编排器可以向一个容器发送请求,例如作为文本分析服务的一部分进行语言检测,然后将其转发到其他容器进行进一步处理。这符合开发人员在诸如呼叫中心处理等场景中同时使用多个认知服务的方式,其中一个云请求可以调用多个服务,如语音、文本分析、语言理解、翻译和文本转语音。

应用 AI 服务(如表单识别器)也是如何组成的:编排器将客户请求分解为多个认知服务的后台 API 调用,然后将它们合并在一起。这使得构建和推出新的应用 AI 服务变得更容易,因为它们的组合只是编排器可以使用的元数据。

编排器还需要跨个别认知服务 API 进行更多的标准化,以便开发人员调用不同 API 时更加一致。这意味着一旦您熟悉了一个 API,开始使用新 API 时就更容易理解其结构。

使用容器意味着托管认知服务所需的 Linux 虚拟机数量较少,而不是每个服务都在自己的虚拟机中运行。这样做不仅更快速、更高效地进行扩展,而且还能节省成本。

由于启动整个虚拟机以处理增加的流量需要时间,基于虚拟机的服务通常会多运行一些额外的容量作为缓冲,以确保不会丢失客户请求。即使在 Kubernetes 上运行,认知服务仍然需要一定的缓冲容量,因为虽然启动新容器速度很快,但将大型机器学习模型复制到新容器中仍需要时间。但是这种缓冲可以更小,因为不必将模型部署到新容器中,而是可以在容器扩展后再附加。

为如此多的客户运行认知服务意味着微软可以获得大量的遥测数据,这些数据可以用来提高服务的运行效率。随着不同的 Azure VM SKU 变得可用或 SKU 的价格发生变化,他们可以确定在哪种 VM 上运行特定的容器。并非所有 SKU 都在所有 Azure 区域可用;因此,虽然在带 GPU 的 VM 上运行可能会为视觉模型带来更好的性能,但也必须能够在仅有 CPU 的 SKU 上运行,以便能够在更多的区域部署。

这可能意味着不仅需要与构建该认知服务的开发人员联系,还需要与创建模型的研究人员和数据科学家以及像 ONNX 这样的框架团队联系,以确保模型和框架能够在 Azure 的各种硬件上运行。随着新硬件的推出,他们可以进行性能和验证测试,启动 Kubernetes 集群中的新代理池,重新部署服务,并关闭现有的代理池。

使认知服务不仅能够扩展,而且能够运行成本越来越低是使人工智能普及的关键。Edge 浏览器增加了在加载网页时自动将网页翻译成不同语言的功能,您可以在图 9-2 中看到其效果,这迅速使其成为 Translator 服务的最大用户,因此运行费用也随之飙升。通过优化 Translator 在 Azure 上运行于更低性能硬件上的方式,使得服务能够继续在 Edge 上提供,并且能够添加更多语言。

将 Translator 服务放入 Edge 浏览器意味着认知服务必须进行扩展,以服务数百万用户而不会让成本失控

图 9-2. 将 Translator 服务放入 Edge 浏览器意味着认知服务必须进行扩展,以服务数百万用户而不会让成本失控

在这一章中,我们已经了解了云 AI 服务的构建方式,因此您可以放心依赖它们来实现规模化,以及如果需要在自己的基础设施中运行任何单个认知服务时的权衡。但是,在您自己的应用程序中规模化使用认知服务是什么样子呢?在接下来的章节中,我们将看一些真实世界的例子,解决在移动设备、边缘和云中的问题,这些例子展示了借助这些 AI 服务您可以构建的内容。

¹ 了解更多关于DRI的信息。

第十章:Seeing AI:在移动应用中规模化使用 Azure 机器学习和认知服务

在前几章中,我们已经讨论了如何使用 Azure 机器学习和认知服务。我们向您展示了微软如何运行认知服务,以便扩展到大量用户。但是在实际应用中,这是怎样的情况呢?在利用 Azure AI 服务时,您需要哪种架构?在解决 AI 服务能够解决的问题时,您可以有多大的雄心?

如何实时描述数百万盲人用户周围的世界呢?

本章中,我们将探讨 Seeing AI 应用如何利用 Azure 机器学习和认知服务告知盲人用户他们面前的情况,使用了预建模型和自定义模型的混合,同时在本地和云端运行。

想象这款应用就像一个说话的相机:它可以朗读像标志和标签这样的短文本片段,捕捉和识别像表格和菜单这样更长的文档,甚至识别手写。它可以认出用户认识的人的脸,并描述周围的人;它还可以描述图像中的内容或叙述正在进行的事情,比如某人在公园里踢足球。它可以描述一种颜色,发出声音来描述黑暗或明亮的程度,发出蜂鸣声以帮助用户扫描条形码,获取他们手持盒子或罐头的信息,并在付款时识别不同的银行票据。Azure 上的机器学习服务提供了如图 10-1 所示的描述,并且应用设计了专门为盲人用户的界面来提供这些描述。

Seeing AI 使用 Azure 机器学习服务识别对象并描述场景

图 10-1. Seeing AI 使用 Azure 机器学习服务识别对象并描述场景

自定义和云模型

这涉及到广泛的计算机视觉问题,因此该应用针对不同的情境使用多个机器学习模型,并进行了不同的权衡。

在设备上本地运行机器学习模型可以实时得到结果,理想情况下少于 100 毫秒,或者最多不超过四分之一秒,这意味着用户在听取文本时会获得响应迅速的自然体验。

但是图像描述使用了认知服务中的自定义视觉模型,这些模型无法压缩到设备上运行,更不用说在 Azure 机器学习中训练的多种不同对象识别的多 GB 模型了。虽然往返云端需要一点时间,但能够提供更高的质量。

如果您希望实时将标志或标签读出来,那就需要在手机上运行的模型来完成。但如果您要拍摄文档而不仅仅是拿着手机,可能需要花几秒钟来拍摄好的照片,因此值得花时间将其发送到 Azure,利用云中运行的非常大的模型,以获得更准确的结果。

小贴士

有不同的方式来决定是在本地还是在云中运行模型。Seeing AI 通过让用户选择不同的场景来实现这一点,但在您的应用程序中,您可能会根据因素如互联网连接速度或采取混合方法来做出决策。如果某人带宽有限、连接速度慢或离线,您可以使用本地模型——甚至开始使用小型本地模型为用户提供结果,然后从云端获取更精确或准确的信息。如果这样做,请确保用户界面清楚地说明为什么质量或详细级别会有所不同,以免用户因为有时看到更好的结果而感到困惑。您还需要考虑隐私问题;Seeing AI 发送到 Azure 的图像会安全存储,并以保护用户隐私的方式存储,但它们会离开设备;如果您在受管制行业中,这可能是一个问题,您可能需要坚持使用本地模型——如果您正在向云服务发送内容,您可能需要通知用户这一点。

Seeing AI 中的图像字幕使用认知服务视觉 API,Face API 处理告知用户人物的年龄和性别。对象检测也使用认知服务,一些只需微调的模型使用自定义视觉进行训练。对于一些场景,Seeing AI 使用云中的大型模型,可以识别许多不同的对象,但随着引入更多增强现实场景,这意味着运行经过自定义视觉训练并导出到 CoreML(iOS)和 TensorFlow Lite(设备上最快响应)的模型。

需要进行完全自定义训练的其他模型(如货币和条形码等场景)是在 Azure Machine Learning 中构建的,因为这些与预建对象检测模型训练的日常对象非常不同。训练图像上传到 Azure Blob 存储,使用 GPU 在 Python 中运行训练脚本,然后转换脚本将创建的大型模型压缩成 CoreML 或 TensorFlow Lite 格式。(如果您需要针对自己的应用目标更多平台,可以使用我们在第三章中介绍的 ONNX。)

在选择使用 Azure Machine Learning 中的自定义视觉和自定义对象检测模型之间,不仅涉及到准确性,还涉及到模型的大小。

自定义视觉快速便捷;它比在 Azure 机器学习中构建要少得多,并且一般的对象决策模型(识别人、动物、车辆和其他日常物品)的准确度已经足够高,因此并不值得从头开始只是为了略微提高结果。Seeing AI 团队使用他们的用户需要识别的物品的图像来训练自定义视觉模型,这些是标准对象检测模型可能未经训练的,例如楼梯、电梯、建筑入口和门道。

但另一个因素是模型大小。移动设备上的内存限制限制了模型的大小,像 ImageNet 这样的预训练模型非常通用,并包括用户不太可能经常遇到的事物,如斑马和长颈鹿。将这些内容包含在模型中不会降低 Seeing AI 用户识别所关注事物的准确性,但意味着模型比必要的大。团队正在尝试确定是否值得从头开始训练一个覆盖他们确实需要识别的对象较短列表的模型,例如他们想要导航的建筑物的元素,因为这样可以创建一个特定场景的较小模型。

Seeing AI 后端

移动 Seeing AI 应用程序的基础架构使用了分布式应用程序的标准云设计模式。无论是认知服务还是任何其他云 API,您都不希望将 API 密钥放在应用程序中;Seeing AI 将这些秘密存储在 Azure Key Vault 中,并使用 Azure AD 处理与 Key Vault 的连接。确保应用程序与其连接的后台服务之间建立可信连接的最简单方法是让用户登录;使用 Azure B2C 可让您使用相同的架构处理用户和管理秘密。这还简化了使用 Azure Web 应用程序或 Azure Functions 进行遥测和分析,或者如果您想缓存结果。

图像和其他请求从应用程序传入 Seeing AI 服务,并分发到其使用的其他服务。后端服务处理多个认知服务的请求,并合并每个服务的结果。这也允许 Seeing AI 对不同区域的认知服务进行负载均衡和路由:您可以使用 Azure Front Door 处理 HTTP 请求,这样可以进行速率限制和 IP 访问控制,或者使用 Azure Traffic Manager 如果您需要路由 TCP 或 UDP 流量。由于该应用程序在许多国家使用,并且需要与用户所在地最近的 Azure 区域通信,因此后端配置为调用最近的认知服务实例(并在不可用时进行故障转移)。后端还使用 Azure Web 应用程序防火墙来阻止恶意行为者可能用来攻击服务的格式错误的 URI。

对于 Seeing AI 不需要这一步,但如果你的后端将被不同的应用程序使用,或者你想提供不同级别的服务,你可以使用 Azure API Management 来对不同的消费者进行速率限制。

获取接口的正确性

Custom Vision 和 Azure Machine Learning 模型的速度和准确性使得 Seeing AI 有用,但它们需要包裹在良好的用户体验中才能真正有帮助。残疾人圈里有一个关键短语:“没有我们,不会有我们。”无论你的观众是谁,来自认知服务的结果只有在应用体验对他们有用时才有价值。考虑用户如何与应用互动,以及如何提供他们所需的信息,以提高他们的生产力。

如果你正在使用 Custom Vision 或其他定制或个性化体验的选项,确保你允许用户反馈这些功能的效果,以便你可以继续改进结果。

记住,机器学习本质上是概率性的,而不是通常的“真或假”二元编码。你从机器学习模型得到的结果有置信度值,表示模型对其正确性的确定程度。你需要考虑错误率,并准备在应用中处理置信度水平而不产生干扰。考虑一下如果结果是错误的,你将如何处理用户体验。

Seeing AI 对场景的描述是为了明确这一点,常说如“可能是公园里玩球的狗”。

对于实时场景,Seeing AI 使用阈值,如果物体检测服务提供的结果不符合该阈值,则不使用。但由于用户在使用应用时经常移动,可能会有多个读取结果,因此获取多个观察值可能会让你以其他方式增加信心。你还需要处理这些多个结果:Seeing AI 不会说一个像车的物体刚出现,如果实际上是从不同角度看的同一辆车。

同样,你不希望通过无用的通知或过长的描述来分散用户的注意力。如果进一步的读取显示物体比最初看起来更近或更远,Seeing AI 将更新描述,但不会打断用户告诉他们。

获取用户体验正确的关键是了解你的用户:他们将处于什么样的环境,需要从应用程序中得到什么,以及什么会妨碍他们的使用?在实际体验中会是什么样子,无论是有人在公园散步还是摄像头在监控工厂生产线?这两者都与你编写代码的环境截然不同,因此除了收集多样化的训练图像外,还要确保在真实用户的环境中进行充分的测试,以最大限度地提高你的机器学习模型的结果对他们的实际帮助。

无论你建造应用程序的目的是什么,Seeing AI 是如何在移动应用中使用云 AI 服务的一个很好的例子,包括如何组合云后端来编排这些服务以及何时使用本地模型。顾名思义,它集中于你周围世界中能够看到的内容;在下一章中,我们将讨论如何处理语音。假设你需要在某人说话时不仅转录而且翻译多种语言:你能达到科幻经典——实时翻译系统的多近呢?

第十一章:为国际组织大规模翻译多种语言

虽然许多 Azure 机器学习和认知服务应用程序侧重于商业和消费服务,但它们也是政府和其他公共机构的重要工具。机器学习驱动的工具可以帮助这些组织更高效地运作,消除瓶颈并加快常见流程。微软一直在推动这些方法,例如其 AI for Good 计划。

微软人工智能工具的一个重要作用是通过提供快速自动翻译的工具来消除不同国籍之间的障碍。如果你使用过 PowerPoint 中的字幕工具或智能手机上的 Translator 应用程序,你正在使用围绕 Azure 语音识别和翻译服务构建的工具。我们已经看过如何在你的应用程序中使用它们,在第四章中展示了语音识别工具如何将语音转换为文本,翻译工具如何将这些文本从一种语言翻译为另一种语言,以及神经语音模型如何从翻译后的文本中提供自然语音。

为国际议会提供翻译

我们使用这些工具的许多方式是为了支持个人,翻译菜单或帮助在陌生城市中搭乘出租车。但是,如果我们需要为大量使用专业词汇的多语种工作人员提供近实时的转录,会怎么样呢?这是微软工程团队必须解决的问题,以便为欧洲议会构建原型翻译服务,基于我们在第四章中探讨过的同一认知服务 API 和工具。

像欧洲议会这样的跨国机构使用多种语言工作,代表来自 27 个国家的代表讲述 24 种不同的语言,并且有超过 4,000 名口译员。由于没有官方语言,演讲需要实时转录和翻译,以便发言者可以在辩论期间回应演讲,同时创建官方记录。这意味着需要连接到议会的声音和录音系统,自动检测语言并随着语言变化即时更改转录模型。

连接现有音视频(AV)系统

由于竞标性质的关系,直接连接音响系统并不可行,因此系统必须通过使用 MPEG-DASH 的 Web API 工作。这增加了复杂性,因为 MPEG-DASH 提供自适应速率音频数据,而 Azure 认知服务输入则期望以 60K 赫兹编码的脉冲编码调制(PCM)音频流。音频系统还提供了 25 种不同的流,每种语言一种以及来自议会楼层的主音频轨道。

微软系统首先需要识别直播流,然后分离视频和音频信号,再将音频轨道转码为 PCM。一旦分离,两个流需要进行时间编码,以便将生成的转录与视频流同步,然后将其提供给最终用户。由于要求延迟不超过七秒,系统处理数据转换并传递转录和翻译字幕的时间有限。

云原生开发技术被证明是合适的,使用微服务架构来处理初始信号处理,使用熟悉的开源工具如 FFmpeg 来管理转码,然后将转换后的音频流传递给认知服务翻译工具。实时协议 SignalR 用于将生成的字幕返回到门户,同时带有时间编码的偏移量,用于将文本与原始视频流对齐。延迟保持较低,整个过程不超过两秒。

使用专用语音识别处理特定词汇

由于存在大量专用词汇,微软的认知服务团队努力为 24 种所需语言交付一组定制语言模型,使用演讲数据集来训练这些模型。项目的一个团队负责处理转录模型,另一个团队负责翻译。这些模型通过它们的 BLEU 分数进行评估,该分数显示它们的结果与人工翻译有多接近,以及它们的词错误率。这些模型需要超过最低分数水平。

一旦训练完成,定制模型通过 Azure 中的私有端点提供,拥有自己的计算资源。这种方法与使用认知服务的任何人可用的方法没有区别;微软使用的工具是平台内置的标准工具。

服务团队面临的最大问题是入口音频流的质量以及整体音频管道的长度。每个处理步骤都会增加延迟,因此需要尽量减少步骤数。作为来源的可变比特率网络流也会增加额外的延迟。例如,32K 流量可能会降至 5K,然后再回升到 100K,最终回归到其标准速率。尽管原型使用软件编码将流转换为 Azure 兼容格式,但实际上硬件解决方案将具有更好的性能,并将延迟保持在最低水平。

软件团队还发现,他们最初基于容器的设计比使用虚拟机来托管微服务更慢。这是因为容器无法访问 GPU 资源,而 Azure 提供了 GPU 虚拟机。从无服务器容器主机切换到基础设施即服务会增加运营成本,但性能提升显著。与使用基于硬件的音频编码器一样,处理有限的延迟预算意味着要充分利用硬件带来的所有优势。

从专业原型到通用应用

同样的基本系统已被白标,用于不同的环境。目前,另一国际机构的一个当前概念验证正在设计中,用于处理会议室内的音频,使用流行的 Audinate Dante AV 协议。在这里,音频和视频通过以太网传输,使用虚拟声卡处理 Dante 音频流。这意味着重新编写音频处理器以处理备用流格式。

在 AV 系统中,这里运行的是一个在 PC 上运行的.NET 应用程序,通过以太网接收音频信号,使用 Audinate 提供的虚拟声卡获取音频通道。该应用程序将音频数据转换为字节数组,然后可以根据要求同步或异步地传递给 Azure。输出数据通过 Web 门户传递,呈现为转录或实时语音到语音翻译。实时语音系统设计成可以定义单一输出语言,确保流始终是用户选择的语言。例如,法语发言者可以选择母语,所有翻译结果都将以法语呈现。

要翻译流,首先需要识别正在使用的语言,然后通过适当的认知服务 API 处理流。在议会和委员会会议中,发言人和语言频繁变换是一个问题。系统需要能够在语言变换发生时立即检测到,以确保转录始终使用正确的语言。虽然目标是涵盖全部 24 种语言,但最初只启用了 10 种。

在限制条件下工作

当从像这样的服务概念验证转向全面运营时,需要考虑很多因素。虽然该系统在规模上能够工作,但还未完全调整以实现全面运营。这样的系统需要与消费者服务有所不同,因为它需要检测并删除语音习惯和停顿。还要确保考虑到语言的地区变化,并理解底层服务的默认设置是非常重要的。

例如,在欧洲工作时,翻译葡萄牙语需要使用 PT-PT,而不是默认的 PT-BR,因为巴西葡萄牙语已经与原始语言分道扬镳。还需要更有针对性的词汇表和可以根据上下文切换的模型。关于经济的议会会议将使用与渔业政策或国际援助有很大不同的术语。

还有一些需要考虑的约束条件:需要 GPU 启用的虚拟机将限制可以运行此类服务的 Azure 区域。在不受支持的区域工作可能会增加额外的延迟,这种延迟可能会因直接连接到 Azure 的网络连接而不可预测地变化。同样重要的是,在所有系统中坚持使用相同的硬件 SKU,因为不同的处理器代数对机器学习数据的处理方式不同。例如,高效的 BFLOAT 指令仅在最近的服务器 CPU 中受支持。更换到旧版 CPU 将影响模型的准确性。

或许最令人感兴趣的是微软在交付一套能够以极低延迟和高准确率处理多语言翻译的工具时所采用的方法,它使用现成的 API 和工具。这里没有专门的研究软件;即使使用自定义的语音模型,也是使用任何人都可以使用的相同 API 和门户进行构建和训练。即使底层的微服务模型也是一种常见的云原生设计模式,利用生产环境的 Azure 虚拟机镜像和硬件。

这样的翻译工具曾经是科幻,但现在作为 API 的标准技术已经普及,采用常见的设计模式。这些工具任何人都可以使用;关键在于微软如何将它们与现有的 AV 系统集成。这种方法同样适用于其他环境。

第十二章:将强化学习从实验室引入便利店

到目前为止,我们所涵盖的几乎所有 AI 模型和服务都基于监督和半监督机器学习,但一种新技术叫做强化学习最近从研究实验室中出现,提供几乎实时的学习能力。

与其在数据中寻找模式,强化学习系统通过实践学习:训练代理人查看背景情况,做出决策,并通过反馈获得奖励。在实验室中,强化学习代理在像 Minecraft 这样的游戏中进行训练,其中背景情况是游戏的当前状态,有限的行动选择以及明确的奖励。在现实世界中,强化学习可以用于决定向用户推荐哪些产品,¹ 机器人接下来该说什么,如何表达警报,展示哪张图片、视频或广告,或者任何其他优化问题。

Azure 使用强化学习来决定重新启动需要重置或移动到不同物理服务器的 VMs 的最少干扰时间。Microsoft Teams 使用它来确定每个单独呼叫使用什么音频抖动缓冲区。该缓冲区平滑处理音频数据包的方式,以适应通话期间连接延迟的任何变化,因此声音不会延迟,当数据包延迟或杂乱时也不会出现掉帧或机械声音。

Personalizer 服务(我们在第四章中介绍的 Azure 认知服务之一)是一个单步、单决策的优化引擎,而这单一决策可以是很多事情。

国家篮球协会正在使用 Personalizer,使他们的应用程序对每个用户完全个性化,展示不同的文章和 NBA 精彩片段。你可以使用它来管理连接到网络的手机的 5G 配置,根据可能使用更多数据或进行更多语音通话的情况设置连接方式,并根据 5G 网络当前的状态进行不同的设置。或者你可以管理忠诚度计划,为客户在一定时间内必须进行多少次重复购买以符合奖励资格创建动态优惠,以获取保持客户满意但不会成本过高的合适福利组合。

个性化正在变得越来越普遍。当微软首次在内部使用后来成为 Personalizer 服务时,解决了所有先前所有机器学习模型都失败的问题——在 MSN 上放置新闻标题,并将点击率提高了 27%。第一年可用时,Personalizer 处理了 3400 万次交易;次年增加到 110 亿次,之后一年达到了 660 亿次。到 2012 年底,该服务每月处理超过 90 亿个个性化选择,为微软及其客户服务。

强化学习的另一个优势在于:因为它不基于历史模式,所以在习惯突然改变时仍然有效——就像在 COVID-19 疫情开始时一样。基于历史模式的每个机器学习模型都不再相关,但个性化推荐器能够及时捕捉这些变化,实时理解用户行为,实时训练和更新模型。将它集成到你的应用程序和工作流中也很快速。

两个 API,八周时间,提升 100%。

安海斯-布希英比公司(Anheuser-Busch InBev)可能以百威啤酒而闻名,但他们拥有超过 500 个品牌。为了帮助这些品牌进入墨西哥的小型商店,AB InBev 设置了一个名为 MiMercado 的在线市场。最初,每个商店都会看到相同的优惠,但它们可能有非常不同的顾客和销售模式。在新业务中,缺乏大量历史数据,并且开发团队希望得到一个即插即用的系统。

即使使用 Azure 机器学习来运行模拟或管理并行学习以教导强化学习代理做出最佳决策,也涉及一定复杂性。使用 Personalizer 服务意味着你只需要处理两个 API,如 图 12-1 所示。

在像 MiMercado 这样的网站上使用决策服务非常简单,在幕后认知服务对选择进行排名,选择最佳选项,并处理反馈循环以从中学习

图 12-1. 在像 MiMercado 这样的网站上使用决策服务非常简单,在幕后认知服务对选择进行排名,选择最佳选项,并处理反馈循环以从中学习。

调用 Rank API 并传递上下文特征——对于 MiMercado 来说,这是 AB InBev 关于业务和用户(像 图 12-2 中的店主)的全部信息——以及产品选项及其上下文。API 返回了要在旋转木马上展示的产品及其顺序。如果客户购买了产品,应用程序将调用 Reward API 发送奖励,从而更新 Personalizer 模型。

将其集成到在线商店应用程序中非常简单:从开始到投入生产仅需八周时间。使用 Personalizer 将商店所有者点击推荐的次数翻了一番,并将实际订购特色产品的频率提高了三分之二,为每个 MiMercado 用户增加了 87% 的订单量。

在监督学习和半监督学习中,数据越多越好。Personalizer 需要一定量的数据和合理快速的数据点周转。如果您有一个远程工业场地,您只能每月更改一次设置,并且您必须等待另一个月来查看更改是否使情况变得更好或更糟,或者如果您是一个非常小的在线商店,您将无法获得足够的量甚至训练一个强化学习模型。理想情况下,您希望每天至少发生 500 次事情。如果流量非常高,Personalizer 将能够更快地捕捉到变化和趋势,因为数据量中将有足够的信号可以在几小时内学习。

使用 Personalizer 决定向使用 MiMercado 的小店展示哪些产品,即使习惯在改变,也导致订单大幅增长

图 12-2. 使用 Personalizer 决定向使用 MiMercado 的小店展示哪些产品,即使习惯在改变,也导致订单大幅增长。

但是您不需要有关用户和情况的大量数据点,也不需要任何个人信息。事实上,使用过多特征或过于精确的数据只会给数据添加噪音,因此 Personalizer 可以帮助您采用负责任的 AI 方法,例如使用行为信息而不是依赖 PII 或详细的用户人口统计信息,如性别和年龄。

警告

请记住向任何用户明确说明个性化是如何使用的——例如一个名为为什么我会看到这些建议?的按钮,显示影响结果的特征和操作,并允许他们选择加入或退出数据收集。

更有用的是知道用户属于哪个组——他们是使用 Mac、Windows PC 还是手机,以及他们的设备剩余电量是多少——而不是知道他们是谁。如果是购物网站,知道他们最近购买的类别和平均花费比知道他们的整个购物历史更好。知道他们所在的地区比知道他们的地址更有用,记录工作日或周末以及早晨、下午、晚上或夜晚比将时间精确到秒更好。

数据越精确,越稀疏和独特,这使得学习变得更加困难;避免个人信息使其更密集和更有用。您发送的上下文也是如此。提供鞋子的颜色和价格范围,并说明它们的材质比确切的价格和型号更有用。您可能希望包含视频或新闻故事的元数据,或者通过其他认知服务进行处理,例如使用计算机视觉或文本分析来提取特色人物。

Personalizer 正在添加查看历史数据的选项,帮助你决定如何将数据分桶为特征,并告诉你在你的数据中哪些特征是最有用的,稍微有用的,或者完全无关紧要的。如果你认为某些内容应该起到作用但实际上没有,这会很有用,因为这可能意味着你没有充分向人们解释。

但是,如果每个上下文和行动只有两到三个数据点,而关于用户的数据点只有少数几个,Personalizer 仍然可以为你提供优秀的结果。

提示

如果你有大量的行动或产品可供选择,你可能需要做更多的工作。在撰写本文时,Personalizer 只能处理 50 个选择;将来可能能够帮助你筛选或分类更多的选项,以缩减到这些选择。

通常情况下,你将看到显著的改进,典型的结果从增加使用量或销售额翻倍,直到四位数的改善。

在许多方面,Personalizer 是 Azure AI 服务的完美例子。它基于几十年的研究成果,这些技术最近才足够健壮以用于生产,设置仍然复杂,需要强大的数据科学技能,并且随着研究的继续而迅速发展。但你得到的是一个在生产中经过验证的强大系统,可以处理庞大的规模,开发工作量很小,即使你的数据科学专业知识有限。这就是云 AI 的实际效果。

如果你到目前为止学到的东西已经激发了你的兴趣,并且你准备将 Azure AI 服务应用到自己的业务问题中,那么继续阅读一些帮助以开始。

¹ 在 Microsoft Recommenders GitHub 仓库 中找到使用强化学习构建推荐系统的最佳实践。

第十四章:后记

到目前为止,您应该对云 AI 的功能有了很好的了解,但在使用 Azure AI 服务时还有大量资源可供您参考。

如果您还没有开始,最好的方法是注册 Azure 帐户(参见第二章以获取详细信息),并开始尝试之前章节中的一些步骤。如果您不想键入代码示例,请记住,您可以在我们的GitHub 仓库中找到我们引用的完整代码。

微软提供全面的文档,包括教程、快速入门、指向 GitHub 仓库的模板、示例代码和项目,甚至还有沙盒环境,您可以在其中尝试某些服务的代码。试试交互式 AI 演示,或者了解更多具体服务信息:

Microsoft Learn 上还有课程,包括教程、视频、代码示例和沙盒环境,您可以在其中尝试关键技术(并获取像Azure AI 基础知识这样的证书学分)。从AI 学校开始,或者探索针对 AI 的特定学习路径

如果您想要使用各种 Azure AI 服务尝试数据集,Azure 开放数据集包括天气、人口普查、假期、公共安全和位置的公共领域数据,这些数据托管在 Azure 上,集成在 Azure 机器学习中,并通过 API 访问,因此您可以在认知服务或 Power Platform 中使用它们。查看目录。您可能还想查看Microsoft 研究开放数据库,其中包含微软在医疗保健和教育等各个科学领域创建的更专业的研究数据集。

如果您需要帮助使用 Azure AI 服务或者想与其他开发人员交流,Stack Overflow 上有许多服务的社区:

你还可以与全球近150 位微软 MVP链接)联系,他们专注于 AI,并在博客、演讲、举办研讨会、构建工具和示例应用程序上展示各种 Azure AI 服务,并且在你遇到困难时能够提供帮助。

如果本书引起了你对一些基础 AI 技术的兴趣,你可以在微软研究站点找到丰富的信息,包括研究论文、网络研讨会以及像微软研究峰会这样的活动。如果你想了解更高层次的视角,请查看微软研究博客上的 AI 主题。或者,如果你需要一些关于 AI 能做什么的灵感,请查看微软 AI 网站

无论你想要构建什么,记住 AI 只是一个工具——要应用好它,你需要真正理解你正在解决的问题。无论你使用什么服务,训练什么模型,首先要考虑你或你的用户需要什么才能成功,评估 AI 能够提供的帮助,然后你就能利用 Azure AI 服务让你的应用变得更智能、更有用、更易于使用,或者更有趣。

posted @ 2025-11-24 09:15  绝不原创的飞龙  阅读(11)  评论(0)    收藏  举报