购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

3.1 人工智能应用开发全流程解析

人工智能应用开发的全流程大致包括开发态流程和运行态流程。开发态流程是对数据源不断地进行处理并得到人工智能应用的过程;而运行态流程相对简单,主要是将人工智能应用部署起来使用的过程。当人工智能应用在运行态推理效果不好时,需要将推理数据返回给开发态进行进一步迭代调优。

在开发态流程中,每个步骤都会基于一定的处理逻辑对输入数据进行处理,并得到输出数据(中间结果或最终结果),同时也可能会产生模型或知识,或其他一些可能的元信息文件(如配置项文件等)。在处理的过程中,可能会接收外部输入(如用户的输入、配置、其他外部环境的输入等)。每个处理步骤的处理逻辑可以是平台内置的处理逻辑,也可以是开发者自定义的处理逻辑(如开发者利用平台的开发调试环境开发的一套代码)。当数据源经过一系列处理之后,会得到最终的结果数据(如图像识别精度等报表数据)。在这一系列的处理步骤中,可能会出现反复,当我们对某个处理步骤输出的数据不满意时,可以重新修正输入数据或者处理逻辑。

上述一系列的处理步骤结束后,中间所产生的一些模型、知识或者配置可以一起编排成一个人工智能应用。这个人工智能应用就是开发态输出的主要成果。紧接着,就进入运行态流程,将人工智能应用部署为云上的一个推理服务实例,或者打包为一个SDK,业务客户端就可以调用其接口,发送请求并得到推理结果。同时,平台在被用户授权的情况下,可以对推理数据和结果进行监测,一旦发现问题,可以将推理数据重新接入开发态的数据源,进行下一步迭代开发,并生成新的人工智能应用。由此可见,人工智能应用的开发流程是一个持续迭代并且不断优化的过程,如图3-1所示。

从抽象的角度看,图3-1所表达的是一个数据流图,该数据流图有几个常用的核心抽象概念。

(1)数据源。数据源指人工智能应用开发过程的主要输入,可以是原始的文件类型的数据(如在第2章中用户所需要离线上传的原始图像数据),也可以是来自某个远程服务的数据流(强化学习经常会用到这种数据源形式,具体介绍见第6章),还可以是人工输入的信息。数据源的存储方式多种多样,可以是对象存储,也可以是大数据系统,还可以是客户的业务系统等。

(2)处理。处理指人工智能应用开发全流程中的每个具体环节,根据输入数据和处理逻辑得到输出数据。常用的处理操作包括但不限于数据标注、模型训练、性能监测等。每个操作都有执行历史,保证过程可溯源。

(3)实体对象。实体对象指每个处理环节之间流动的数据内容。数据集、算法或规则、模型或知识应用都是典型的实体对象。

以某证件类OCR开发全流程为例,上述人工智能应用开发全流程如图3-2所示。可以看出,该流程基本满足图3-1中的各类抽象。在该OCR开发全流程中,需要通过数据采集模块获取原始数据(即证件类的原始图像),考虑到证件类图像中证件位置可能倾斜,因此需要首先对证件的四个顶点进行标注然后再进行数据处理,将图像中证件位置矫正。紧接着,一方面,可以继续标注证件图像中文字框和文字类别,用于文字框检测和文字识别模型的训练;另一方面,可以根据证件四个顶点的标注信息训练四点标注模型。当这三个模型(矫正、文字框检测和文字识别模型)分别训练完成后,可以通过编排生成一个OCR应用,并经过评估之后部署起来使用。在运行态如果有推理不好的数据,则需要通过应用维护模块将其返回开发态进行进一步迭代和优化。在该流程中,数据源包括开发态数据源、运行态数据源、人工输入(如算法编写、数据标注信息、训练超参配置、模型评估检查等输入信息);处理包括数据采集、数据标注、数据处理、算法选择和开发、模型训练、模型评估和调优、应用生成、应用评估、应用发布和部署、应用维护;实体对象包括数据集、算法、模型、最终生成的应用。

整体而言,如果解决方案已经确定,那么如图3-3所示,根据处理操作所属范围的不同,可以将人工智能应用的开发流程分为:①数据准备子流程(包含数据采集、数据处理、数据标注等);②算法选择和开发子流程;③模型训练子流程;④模型评估和调优子流程;⑤应用生成、评估和发布子流程;⑥应用维护子流程。由于应用维护子流程会涉及运行态数据回流到开发态,因此这几个子流程之间就形成了一个人工智能闭环。下面将分别介绍这几个子流程。

图3-1 人工智能应用开发全流程

图3-2 某证件类OCR开发的全流程视图

图3-3 人工智能应用开发全流程所包含的几个主要子流程

3.1.1 数据准备子流程

数据准备子流程如图3-4所示。在开发人工智能应用之前,应该指定一个数据源,可以通过离线上传或者在线流式读取的方式将数据采集并接入人工智能应用开发平台。

图3-4 数据准备子流程

将采集的数据存储之后,紧接着就要进行数据处理。大多数情况下,原始数据都是非常杂乱的,有些是结构化数据,有些是非结构化数据(如图像、语音、文本等)。在模型训练前,需要对数据进行校验、清洗、选择、增强等处理。如果数据处理充分,则在模型训练时可以减少很多麻烦。通过一些数据增强、数据精炼等方法,还可以进一步提升模型训练效果。另外,数据不仅在模型训练中需要,在模型评估、应用评估等阶段也是需要的,所以通常需要将数据进行切分处理,以满足不同阶段的需求。由于数据通常都是比较敏感的,因此在数据处理中还需要考虑隐私保护等问题。

由于目前常用的很多人工智能算法都会用到机器学习算法,而目前大多数机器学习算法又强依赖于数据的标签,因此数据标注是一个很重要的环节。由于手工标注非常耗时,且成本高昂,因此人工智能应用开发平台通常具备智能标注能力,以减少手工标注工作量。

如果要深入发现数据问题,则需要进行数据分析和调优,这需要一定的业务领域经验和分析技巧。当数据量较小时,可以人工对每一个数据进行查看和分析,但当数据量较大或者数据本身分析难度高时,往往需要借助统计工具对原始数据进行分析。例如,对于结构化数据,可以分析每一列特征的直方图,对于非结构化数据,可以分析其原始数据(如图像像素值)的分布范围,也可以分析其经过结构化信息抽取之后的直方图。另外,对于高维数据,还可以采用PCA(Principal Components Analysis,主成分分析)等降维方法,将数据映射到二维或三维空间,便于可视化分析。通过数据分析,可能会发现很多潜在的问题,包括数据的类不均衡现象等,然后就可以针对性做优化。

3.1.2 算法选择和开发子流程

1.1.2节介绍了几种不同的人工智能技术领域及其所涉及的经典算法。对于每个领域而言,每年都不断有新的算法出现,尤其是深度学习领域,新算法出现的频率更高。如图3-5所示,开发者需要根据数据准备子流程中数据的情况、所要完成的任务及其业务场景来综合考虑如何选择最合适的算法。人工智能应用开发平台内置的很多主流算法库可以被直接订阅使用,这大大简化了人工智能应用开发者的工作量。当然,开发者也可以根据具体需求对某个算法进行深入分析,并自行开发。

图3-5 算法选择和开发子流程

人工智能应用开发平台提供常用的算法开发环境,如Jupyter Notebook、VSCode、PyCharm等,便于于开发者编写和调试代码。如果开发者本地有PyCharm等环境,可以通过插件将训练作业提交到云上,实现端-云协同开发。算法开发调试后被封装为一个算法对象,可以利用封装好的算法对象和准备好的数据进行训练并得到相应的模型。

3.1.3 模型训练子流程

当前人工智能模型对算力消耗越来越大,其中模型训练是一个很消耗算力的环节,其主要流程如图3-6所示。首先需要从数据集仓库读取训练进程内部数据,然后进行数据预处理(如在线数据增强等)。与数据准备子流程里的离线数据处理不同的是,这里的数据预处理模块一般是指在线数据预处理。模型训练模块执行具体的模型迭代计算,最终输出模型进入模型评估和调优子流程。

图3-6 模型训练子流程

为了提升模型性能,模型训练子流程内部的多个模块(数据读取模块、数据预处理模块、模型训练模块)需要被流水线并行起来,并且采用一些其他加速方法,如混合精度、图编译优化、分布式并行加速、调参优化等。除训练加速外,还有一个核心痛点是模型调优。为了减少基于经验的人工调优,可以使用模型评估和调优子流程,根据机器诊断建议进行调优,也可以将该调优流程自动化。另外,在公有云上可以通过弹性训练、协同训练来实现模型训练成本的进一步降低。这些核心能力将在第6章中具体介绍。

3.1.4 模型评估和调优子流程

人工智能应用开发全流程的每个处理步骤都可能会产生一个或多个模型、知识或其他内容(如配置项、脚本等)。模型一般分为两种:一种是参数化模型,另一种是非参数化模型。大多数参数化模型的参数是用一定的算法逻辑不断处理输入数据而生成的,因此这些模型更容易受到数据变化的影响。不同的数据集训练得到的参数化模型可能会有很大的不同。因此,模型的评估就显得更为必要。

另外,如前文所述,AI模型具有多个方面的特点(如性能、精度、鲁棒性等),因此模型评估比较复杂。开发者需要对每个模型进行评估,才能够知道其是否满足要求。

模型评估需要加载评估数据集,并进行模型预测结果的计算,如图3-7所示。

图3-7 模型评估和调优子流程

模型评估模块针对模型预测结果与真实结果之间的差异,输出一系列不同维度下模型表现的效果,便于开发者分析。当模型的某些指标没有达到期望时,开发者往往需要深入理解并定位其原因。由于算法和模型的复杂性,开发者通常需要具备非常高的技能才可以找到原因。因此,人工智能应用开发平台提供模型诊断功能,针对模型的每个指标,通过一系列工具链自动分析来辅助模型诊断过程。开发者根据平台反馈的诊断建议可进行进一步的模型调优。二次调优会涉及数据准备的调优、算法的重新选择或开发,以及模型的重新训练,因此模型评估和诊断模块后续可能会分别对接这些子流程。如果模型的全部指标都达到期望,则可以进入应用生成、评估和发布子流程。

3.1.5 应用生成、评估和发布子流程

应用生成、评估和发布子流程如图3-8所示。一个复杂的人工智能应用通常包括多个模型及其他配置文件或脚本。当所有的模型都评估并且调优之后,需要对这些模型进行编排和优化,才可以形成一个完整人工智能应用。因此,本子流程中第一个模块就是应用生成模块。

图3-8 应用生成、评估和发布子流程

同样,类似于模型评估和诊断,也需要对整个人工智能应用进行评估。如果所有指标都满足要求,开发者可以启动人工智能应用的发布;如果有一些指标不满足要求,开发者可以返回模型评估和调优子流程进行二次调优。一个人工智能应用出现的问题可能由其内部的一个或多个模型的问题引起。因此,需要进一步查看哪些模型出现了问题,并做相应的调优。

当人工智能应用评估通过之后,开发者需要将其发布并进行使用。如第1章所述,可以选择将其部署为一个在线服务,或者打包为一个SDK(Software Development Kit,软件开发工具包)直接被其他应用集成。人工智能应用的使用者需要准备一个客户端,可以调用这个部署好的在线推理服务的API,也可以直接调用SDK的推理API,输入推理数据之后得到推理结果。

目前云化时代需要考虑将应用部署在端、边、云,而且可以互相之间协同推理。弹性推理和Serverless是推理服务化的重要能力,具体内容将在第8章讲述。

3.1.6 应用维护子流程

正如前面所述,参数化模型一般会与数据分布强相关。然而在实际应用中,运行态数据与开发态数据的分布一般有很大的不同。因此,当某个人工智能应用推理效果不好时,该应用(尤其是带有参数的人工智能应用)需要重新调优。部署后重新调优的过程称为人工智能应用的维护。人工智能应用的维护比传统软件应用的维护更加复杂。

在应用维护子流程(见图3-9)中,首先需要应用指标监控模块对人工智能应用的表现进行监控,其次在用户授权的情况下通过数据采集模块进行数据采集,并且筛选出推理效果不好的数据,并进入应用迭代模块,进行进一步调优。当需要进一步调优时,则会从数据准备子流程开始,将上述所有子流程都执行一遍。在应用维护子流程中,涉及难例挖掘(难例是指推理效果不好的样本)、模型迁移和自调优,这些能力将在第9章讲述。

图3-9 应用维护子流程

总体上,人工智能应用开发的过程就是不断进行数据和模型的处理,并且最终生成满足预期的人工智能应用的过程。当人工智能应用部署后又需要及时维护以保证其能够正常使用。 LXH+AnBnaKyZ40PhvSpLVRIxe4rQJkdZZsbmeZGooRMRrqyWX7PZPiSARwHloAQZ

点击中间区域
呼出菜单
上一章
目录
下一章
×