发布于: Nov 30, 2022

【概要】创建主动学习标签听上去似乎有一些复杂,不过只要利用我的云学习平台 Amazon SageMaker 并且按照我们的流程操作,您也可以轻松完成。

创建主动学习标签听上去似乎有一些复杂,不过只要利用我的云学习平台 Amazon SageMaker 并且按照我们的流程操作,您也可以轻松完成。

 

您可以在 Amazon SageMaker Jupyter 笔记本实例中,使用笔记本的第 1 部分来创建主动学习工作流中所需的资源。具体来说,您需要执行如下操作:

  • 清理数据并创建一个输入清单文件。
  • 创建创建添加标签作业所需的资源。例如,指定标签类别和工作线程任务模板以生成工作线程 UI。

您可以使用这些资源来配置添加标签作业请求(JSON 格式)。在第 1 部分末尾,将此 JSON 复制并粘贴到调用 CreateLabelingJob 的 Step Function 中。

创建输入清单和添加标签作业资源

要创建清单文件,请执行以下步骤:

  • 在 Amazon SageMaker 笔记本实例中打开笔记本。
  • 设置 Amazon SageMaker 环境。以下代码为数据定义了会话、角色、区域和 S3 存储桶:
sess = sagemaker.Session()
role = get_execution_role()
region = sess.boto_session.region_name
bucket = sess.default_bucket(); key='sagemaker'
  • 下载并解压缩 UCI 新闻数据集。本演练使用文件 newsCorpora.csv 并从该文件中随机选择 10,000 篇文章来创建我们的数据集。每篇文章对应于我们输入清单文件的一行。
  • 清理数据集并创建 10,000 篇文章的子集。
  • 将数据集保存到 news_subset.csv。

您使用此文件来创建我们的输入清单文件。为了启动主动学习循环,必须标记 20% 的数据。为了快速测试主动学习组件,本文包括了输入清单数据集中提供的 20% 的原始标签。

您将使用部分标记的数据集作为主动学习循环的输入。本文档将演示如何使用主动学习来生成其余标签。

笔记本的其余部分指定了创建添加标签作业配置所需的资源。这些资源包括:

  • 一个存储在 S3 存储桶中的标签类别 JSON 文件。
  • 一个用于创建工作线程界面的工作线程任务模板。
  • 一个工作团队 ARN。您可以对其进行自定义,以使用公共 (Amazon Mechanical Turk)、私人或供应商工作团队。要使用私人劳动力,请将 USE_PRIVATE_WORKFORCE 设置为 True。
  • Lambda 之前和之后的函数 ARN。
  • 帮助工作线程找到并完成您的任务的任务标题、描述和关键字。

您可以在 your human_task_configJSON 中使用这些资源。

  • 使用以下代码生成 JSON:print(json.dumps(ground_truth_request, indent=2))
  • 复制结果。您可以使用它在 Step Functions 中启动主动学习工作流。

启动主动学习工作流

在使用笔记本生成用于配置添加标签作业请求的 JSON 之后,您可以使用它来启动主动学习工作流。您的 CloudFormation 堆栈构建默认使用 Amazon SageMaker BlazingText 算法。

要使用 BlazingText 启动主动学习工作流,请执行以下步骤:

  • 在 Amazon Step Functions 控制台上,选择 State Machines。选择状态机 ActiveLearningLoop-*,其中 * 是启动 CloudFormation 堆栈时使用的名称。
  • 另外,为您的主动学习工作流指定 execution name。
  • 将您从笔记本复制的 JSON 粘贴到 Input – optional 代码块中。
  • 选择 Start execution。

监控您的主动学习工作流

由于您开始时标记了 20% 的标签数据,所以这将启动您的主动学习工作流。要监视工作流的进度,请执行以下步骤:

  • 在 Amazon Step Functions 控制台上,选择State Machines。
  • 选择状态机 ActiveLearningLoop -*。

在 Executions 部分,有一个主动学习工作流及其状态的列表。

  • 要查看工作流的状态,请从列表中选择您的工作流。

您可以在 Visual workflow 部分中监控状态。

标记完所有数据后,所有标签都将导出到 S3 存储桶中的输出清单文件中。下图描述了完整的主动学习工作流的架构

 

 

第 2 部分演示了如何将自己的自定义训练和推理算法引入开发的主动学习工作流中。

在本部分中,您将使用 Keras 深度学习模型将自定义模型添加到主动学习工作流中。您可以使用 Amazon SageMaker Jupyter 笔记本中 UCI 数据集中的 1,000 个数据点训练模型。该模型仅用于该演示,在本教程的其余部分中,我们仅使用训练和推理算法。

要完成本部分,请使用笔记本的第 2 部分。

本部分假定您已执行以下步骤:

  • 完成本文中的先决条件
  • 启动提供的 CloudFormation 堆栈
  • 完成了本文第 1 部分中的 Creating an input Manifest and labeling job resources 部分。

开发和容器化模型

本文中开发和容器化模型的方法受到以下 GitHub 存储库的启发,该存储库使用自定义 TensorFlow Docker 容器构建、训练和部署 ML 模型。

您可以使用笔记本执行以下操作:

  • 读取并清理数据集。
  • 使用 Keras Tokenizer 类对数据对象进行标记。
  • 将数据集标记化之后,您可以使用它来训练模型。我们训练了 Keras 深度学习模型。
  • 在 Docker 容器中容器化该模型。
  • 将容器添加到 ECR。Amazon SageMaker 将在主动学习工作流期间检索此图像以进行训练和推理。

笔记本中的最终代码单元将打印 Docker 映像的 ECR ID。您可以将其用于整个 Amazon SageMaker 的训练和推理。

使您的容器进入主动学习工作流:

在确定算法符合标准之后,请使用本部分用主动学习工作流中的自定义 ML 模型替换第 1 部分中使用的 BlazingText 算法。

步骤 1:更新容器 ECR 参考

要更新容器 ECR 参考,请执行以下步骤:

  • 在 Amazon Lambda 控制台上,找到名称为 *-PrepareForTraining-<###> 的 Lambda 函数,其中 * 是启动 CloudFormation 堆栈时使用的名称,而 -<###> 是字母和数字的列表。
  • 识别现有算法规范,该规范类似于以下代码:
# from pick the algorithm used for training.
@property
def algorithm_specification(self):
"""
configure the docker container uri for the training algorithm.
"""
return {
# This assumes we are running in us-east-1 (IAD).
# Refer to this doc to tweak this model if you run it in other regions.
#https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-algo-#docker-registry-paths.html

"TrainingImage": "811284229777.dkr.ecr.us-east-1.amazonaws.com/blazingtext:latest" 
"TrainingInputMode":"Pipe"
}
  • 将 TrainingImage 从 dkr.ecr.us-east-1.amazonaws.com/blazingtext:latest 替换为笔记本中最后打印语句的输出。

步骤 2:更改批处理策略

CreateTransformJob 支持两个批处理策略 – MultiRecord 和 SingleRecord。有关更多信息,请参阅 CreateTransformJob。Amazon SageMaker BlazingText 算法支持 MultiRecord,而本演练中使用的 Keras 容器则支持 SingleRecord。要更改批处理策略,请执行以下步骤:

  • 在 Amazon Step Functions 控制台上,选择 State Machines。
  • 选择 “ActiveLearning-*” 旁边的单选按钮。
  • 选择 edit。
  • 查找 CreateTransformJob 状态,该状态负责调用批处理转换作业。请参阅以下代码:
"CreateTransformJob": {    
"Type": "Task",
"Resource": "arn:aws:states:::sagemaker:createTransformJob.sync",
     	 		"Parameters": {
                         "BatchStrategy": "MultiRecord"
		...
  • 将 MultiRecord 替换为 SingleRecord。
  • 选择 Save。

以下屏幕截图显示了进行此编辑后状态机控制台的页面。

完成这些步骤之后,重复第 1 部分中的步骤以启动主动学习工作流。具体来说,您将需要使用 Start an Active Learning Workflow 部分来启动主动学习工作流。

成功完成状态机之后,您已经使用机器标签和人工标签以及自定义训练和推理算法生成了标签数据。

 

为避免产生未来成本,请停止并删除用于演练的笔记本实例。

另外,在 Amazon SageMaker 控制台上,停止完成本教程时创建的所有训练(Training 部分中)、转换(Inference 部分中)或标记(在 Ground Truth 部分中)作业。

 

在本文的第 1 部分中,有 52% 的数据为人工标记,另外 48% 的数据为自动标记。这些百分比取决于您使用的特定训练算法、推理算法和主动学习逻辑。当您实施自己的主动学习工作流时,这些数字可能会因您使用的算法和主动学习逻辑以及所需标签准确性级别而异。

当您将自己的模型带入主动学习工作流时,为获得更好的结果(自动标记数据的百分比较高),请确保当用于训练模型的标记数据中存在噪声时,能够继续按预期执行模型。

 

在本文中,您创建了一个主动学习工作流,并使用该工作流从 ML 模型推论和人工工作线程产生高质量的标签。

您可以将此工作流用于各种自定义添加标签任务,以减少为大型数据集添加标签的成本。您可以使用任何自定义学习算法和主动学习逻辑,并根据需要更改此示例。要开始使用 Blazing Text 预览主动学习工作流,请启动 Cloud Formation 堆栈并完成第 1 部分。

 

相关文章