发布于: Oct 30, 2022

如何通过 Amazon A2I 将表格数据引入人工审核工作流,首先我们要明确训练与部署阶段中的关键步骤:

  1. 导入必要的库并加载数据集。
  2. 将数据集划分为训练数据集与测试数据集,而后训练 ML 模型。在本文中,我们将使用 Amazon SageMaker 中内置的 XGBoost 算法训练模型,以得出二元预测结果。
  3. 创建一个端点,用以生成关于测试数据的推理示例。

我们可以使用 scikit-learn 中的内置实用程序导入数据、导入数据集、生成训练与测试数据集,并最终完成模型训练以及预测结果生成。Scikit-learn 还提供另外一款实用程序,可根据固定比率(在大部分数据科学应用中通常为 8020)以及随机状态将数据集划分为训练集与测试集,借此确保结果的可重现性。数据集详情,参见以下截屏中的表格。

要完成模型训练,我们需要使用内置的 XGBoost 算法,这是一种用于监督学习的高效、可扩展梯度提升树算法。关于更多详细信息,请参阅 XGBoost 工作原理。

按照 notebook 中的步骤完成模型训练。在模型训练完成后,Amazon SageMaker 会接手模型终端节点的部署与托管,如 notebook 中所示。Amazon SageMaker 将为您训练后的构型构建 HTTPS 终端节点,并根据需求自动扩展以在推理时提供流量。完成模型部署后,您即可生成预测结果。请参阅随附 notebook 中的以下源码: 

这单元格的输出为一系列预测结果:10分别代表恶性或良性。

现在,我们可以将模型输出合并至人工工作流当中。

随附的 Jupyter notebook 中包含以下操作步骤:

  1. 创建一个工作任务(worker task)模板,用于创建工作 UI。此工作 UI 将显示您的输入数据,例如文档或图像,以及对审核人员的指导性说明。此外,其中还提供供工作人员完成任务的交互式工具。关于更多详细信息,请参阅创建工作 UI
  2. 创建一个人工审查工作流,也被称为流程定义。我们使用流程定义来配置人工团队,并提供关于如何完成人工审查任务的指导信息。大家可以使用单一流定义创建多个人工循环。关于更多详细信息,请参阅创建流定义。
  3. 创建一个人工循环,用于启动人工审查工作流并发送数据以供人工检查。在本文中,我们使用自定义任务类型并通过 Amazon A2I Runtime API 启动人工循环。在自定义应用程序中调用StartHumanLoop,即可将任务发送给人工审核人员。

下面,我们将详细讨论如何在工作任务 UI 当中添加表格数据。

Amazon A2I 使用 Liquid 实现模板自动化。Liquid 是一种开源内联标记语言,可在大括号内包含文本,并通过指令创建过滤器与控制流。

在本文中,我们要求审核人员查看测试数据的特征,以判断模型输出结果是否准确。现在我们开始编写模板。此模板由两部分组成:包含测试数据集特征的静态表,以及包含允许用户修改的预测结果的动态表。

这里使用以下模板:

其中的task.input.table字段允许大家将静态表提取至工作任务 UI 当中。而skip_autoescape过滤器则负责将 pandas 表呈现为 HTML 形式。关于更多详细信息,请参阅创建自定义工作模板。

其中的task.input.Pairs字段用于在工作任务 UI 中动态生成表。由于此表中包含您的预测结果并需要配合人工输入,因此大家可以在其中同时包含单选按钮与文本字段,以帮助工作人员对模型的预测结果做出同意/不同意标记、在必要时更改模型预测结果,并提出更改的潜在原因。另外,这样的设计思路还可以限制我们在 ML 模型中的使用的特征类型,借此满足某些严格要求避免偏见因素的监管要求,充分遵守法规与合规性条款。

我们还需要使用 pandas 实用程序,其用于将数据框转换为 HTML 格式。在以下示例代码片段当中,我们需要加载测试数据的前五行以供人工审核者查看。对于表的动态部分,创建一个包含列标识符以及此前模型实际预测结果的表。

现在我们可以创建工作任务模板与人工审核工作流了。具体请参见以下代码片段:

使用以下代码片段以启动人工循环:

在本文使用专项团队处理人工审核工作,因此工作人员可以在打开团队创建时接收到的链接,借此获取可视化 UI

以下截屏所示,为我们使用的工作 UI

上方的表中包含以 HTML 形式存在的 pandas 数据框,而 Predictions Table 表则是根据数据集内所有或部分行动态生成而来。Model Prediction 字段由基于此前测试数据集中相应行的模型推理所组成。在生成 UI 时,User Rating 意见(同意或不同意)、Your Prediction 以及 Change Reason 等字段皆为空白。
 
工作人员使用单选按钮以验证模型预测结果,并发布经过修改的预测结果。当然,工作人员也可以根据需要选择输入更改原因(如以上截屏所示),借此帮助数据科学团队更好地设计下游模型再训练方法。例如,如果工作人员将模型预测判断为误报并发布了原因(例如某项特征可能属于异常值),则数据科学家可以在模型重新训练期间删除此数据点,以防止模型对异常值进行过度拟合。
 
在工作人员对新的预测结果进行评分并提交答案之后,我们可以直接在 Amazon S3 中进行可视化输出,也可以直接通过 Amazon SageMaker notebook 环境中实现结果可视化。

在提交审核之后,相关结果将被写入至我们通过人工审核工作流指定的 Amazon S3 内输出位置。以下内容,为此位置上以 JSON 文件格式输出的结果。

  • 人工审核回应
  • 指向StartHumanLoop API 的输入内容
  • 关联的元数据

大家可以使用此信息来跟踪 ML 输出结果,并将其与人工审核输出关联起来:

其中‘humanAnswers’ 键负责提供人工审核员对于各项更改的说明信息。详见以下代码片段:

到这里,我们可以解析此 JSON 文档以提取相关输出结果,也可以在训练数据集中使用人工审核者提供的输出以重新训练模型,随时间推移不断改善模型推理性能。

为了避免产生不必要的后续成本,请在不再使用时删除相关资源,例如 Amazon SageMaker 终端节点、notebook 实例以及模型工件。

本文展示了两个用例,分别通过 Amazon A2I 将表格数据引入人工审核工作流中,且分别对应不可变静态表与动态表。当然,本文对于 Amazon A2I 功能的表述只能算是冰山一角。目前 Amazon A2I 已经在 12 个 Amazon Web Services 区域内正式上线,关于更多详细信息,请参阅区域表。 

相关文章