Ground Truth 流式标注作业 - Amazon SageMaker
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

Ground Truth 流式标注作业

如果要持续向 Amazon SageMaker Ground Truth 发送新数据对象以进行标注,请使用流式标注作业。流式标注作业允许您:

  • 使用持续运行的标注作业,实时向工作人员发送新的数据集对象。只要标注作业处于活动状态,并且有新的对象被发送给该作业,工作人员就会不断接收要标注的新数据对象。

  • 了解已排队并等待标注的对象的数量。使用此信息来控制发送到标注作业的数据对象流。

  • 当工作人员完成对单个数据对象的标注时,实时接收这些对象的标签数据。

Ground Truth 流式标注作业一直处于活动状态,直到手动停止或闲置超过 10 天。您可以在标注作业处于活动状态时,间歇性地向工作人员发送新数据对象。

如果您是 Ground Truth 流式标注作业的新用户,建议您查看工作方式

使用创建流式标注作业了解如何创建流式标注作业。

注意

Ground Truth 流式标注作业只能通过 SageMaker API 支持。

工作方式

创建 Ground Truth 流式标注作业后,该作业会一直处于活动状态,直到手动停止、闲置超过 10 天或无法访问输入数据来源。您可以在该作业处于活动状态时,间歇性地向工作人员发送新数据对象。只要工作人员当前可用的任务总数少于 MaxConcurrentTaskCount 中的值,工作人员就可以继续实时接收新的数据对象。否则,数据对象将被发送到 Ground Truth 代表您在 Amazon Simple Queue Service (Amazon SQS) 中创建的队列,以便稍后处理。一旦工作人员当前可用的任务总数低于 MaxConcurrentTaskCount,这些任务就会立即发送给工作人员。如果一个数据对象在 14 天后没有发送给工作人员,则该数据对象将过期。您可以查看队列中待处理的任务数量,并调整发送到标注作业的对象数。例如,如果积压的待处理对象超过阈值,您可以降低将对象发送到标注作业的速度。

将数据发送到流式标注作业

使用输入清单文件创建流式标注作业时,您可以选择一次性向该作业提交输入数据。一旦标注作业启动且状态为 InProgress,您就可以使用 Amazon SNS 输入主题和 Amazon S3 事件通知向标注作业实时提交新的数据对象。

启动标注作业时提交数据对象(一次性):

  • 使用输入清单文件 – 创建流式标注作业时,您可以选择在 ManifestS3Uri 中指定输入清单文件 Amazon S3 URI。在标注作业开始后,Ground Truth 会立即将清单文件中的每个数据对象发送给工作人员以进行标注。要了解更多信息,请参阅创建清单文件(可选)

    提交创建流式标注作业的请求后,作业状态将为 Initializing。标注作业处于活动状态后,状态将更改为 InProgress,您可以开始使用实时选项提交其他数据对象以进行标注。

实时提交数据对象:

  • 使用 Amazon SNS 消息发送数据对象 – 您可以通过发送 Amazon SNS 消息,向 Ground Truth 发送要标注的新数据对象。您将向 Amazon SNS 输入主题发送此消息,该主题由您在创建流式标注作业时创建和指定。有关更多信息,请参阅 使用 Amazon SNS 发送数据对象

  • 通过将数据对象放入 Amazon S3 存储桶来发送数据对象 – 每次向 Amazon S3 存储桶添加新数据对象时,都可以提示 Ground Truth 处理该对象以进行标注。为此,您可以向存储桶添加事件通知,以便在每次向该存储桶添加(或在其中创建)新对象时通知 Amazon SNS 输入主题。有关更多信息,请参阅 使用 Amazon S3 发送数据对象。此选项不适用于基于文本的标注作业,例如文本分类和命名实体识别。

    重要

    如果您使用 Amazon S3 配置,请不要将相同的 Amazon S3 位置用于输入数据配置和输出数据。在创建标注作业时,可以为输出数据指定 S3 前缀。

使用 Amazon SNS 发送数据对象

您可以使用 Amazon Simple Notification Service (Amazon SNS) 向流式标注作业发送数据对象。Amazon SNS 是一项 Web 服务,用于协调和管理与端点(如电子邮件地址或 Amazon Lambda 函数)之间的消息传递。Amazon SNS 主题是两个或多个端点之间的通信渠道。您可以使用 Amazon SNS 将新数据对象发送或发布InputConfig 中的 CreateLabelingJob 参数 SnsTopicArn 指定的主题。这些消息的格式与输入清单文件的单行格式相同。

例如,您可以将一段文本发布到输入主题,从而将其发送到活动文本分类标注作业。您发布的消息可能类似于以下内容:

{"source": "Lorem ipsum dolor sit amet"}

要将新的图像对象发送到图像分类标注作业,您的消息可能类似于以下内容:

{"source-ref": "s3://awsexamplebucket/example-image.jpg"}
注意

您还可以在 Amazon SNS 消息中包含自定义的重复数据删除 ID 和重复数据删除键。要了解更多信息,请参阅 重复消息处理

Ground Truth 创建流式标注作业时,会订阅 Amazon SNS 输入主题。

使用 Amazon S3 发送数据对象

您可以将一个或多个新数据对象放入配置了 Amazon SNS 事件通知的 Amazon S3 存储桶中,从而将这些对象发送到流式标注作业。您可以设置一个事件,以便在存储桶中创建新对象时随时通知 Amazon SNS 输入主题。您必须在 InputConfig 中的 CreateLabelingJob 参数 SnsTopicArn 中指定相同的 Amazon SNS 输入主题。

每次配置 Amazon S3 存储桶向 Amazon SNS 发送通知时,Ground Truth 都会发布一个测试事件 "s3:TestEvent",以确保主题存在,且指定的 Amazon S3 存储桶所有者有权向指定主题发布通知。建议您在开始流式标注作业之前设置 Amazon S3 与 Amazon SNS 的连接。如果不这样做,此测试事件可能会注册为数据对象,并发送到 Ground Truth 进行标注。

重要

如果您使用 Amazon S3 配置,请不要将相同的 Amazon S3 位置用于输入数据配置和输出数据。在创建标注作业时,可以为输出数据指定 S3 前缀。

对于基于图像的标注作业,Ground Truth 要求所有 S3 存储桶都附加 CORS 策略。要了解更多信息,请参阅CORS 权限要求

配置 Amazon S3 存储桶并创建标注作业后,可以向存储桶中添加对象,然后 Ground Truth 会将该对象发送给工作人员,或将该对象置于 Amazon SQS 队列中。

要了解更多信息,请参阅设置 Amazon S3 存储桶事件通知

重要

此选项不适用于基于文本的标注作业,例如文本分类和命名实体识别。

使用 Amazon SQS 队列管理标注请求

Ground Truth 创建流式标注作业时,会在用于创建标注作业的 Amazon 账户中创建一个 Amazon SQS 队列。队列名称是 GroundTruth-labeling_job_name,其中 labeling_job_name 是标注作业的名称,用小写字母表示。向标注作业发送数据对象时,Ground Truth 会将数据对象直接发送给工作人员,或将任务放入队列,稍后再处理。如果数据对象在 14 天后没有发送给工作人员,则该数据对象将过期并从队列中删除。您可以在 Amazon SQS 中设置警报以检测对象何时过期,并使用此机制控制发送到标注作业的对象的数量。

重要

修改、删除对象或直接将对象发送到与流式标注作业关联的 Amazon SQS 队列可能会导致作业失败。

从流式标注作业接收输出数据

使用流式标注作业的新输出数据定期更新 Amazon S3 输出存储桶。

可选择指定 Amazon SNS 输出主题。每次工作人员提交已标注对象时,都会向该主题发送包含输出数据的通知。您可以向 SNS 输出主题订阅一个端点,以便在收到来自标注任务的输出数据时接收通知或触发事件。如果您想实时链接到另一个流式作业,并在工作人员每次提交数据对象时都会收到 Amazon SNS 通知,请使用 Amazon SNS 输出主题。

要了解更多信息,请参阅为端点订阅 Amazon SNS 输出主题

重复消息处理

对于实时发送的数据对象,Ground Truth 通过确保每个唯一对象只发送一次以进行标注来保证幂等性,即使多次接收到引用该对象的输入消息(重复消息)也是如此。为此,发送到流式标注作业的每个数据对象都会分配一个重复数据删除 ID,该 ID 由重复数据删除键标识。

如果使用 Amazon SNS 消息直接通过 Amazon SNS 输入主题发送标注数据对象的请求,则可以为对象选择自定义的重复数据删除键和重复数据删除 ID。有关更多信息,请参阅 在 Amazon SNS 消息中指定重复数据删除键和 ID

如果您未提供自己的重复数据删除键,或者使用 Amazon S3 配置将数据对象发送到标注作业,则 Ground Truth 将使用以下重复数据删除 ID 之一:

  • 对于直接发送到 Amazon SNS 输入主题的消息,Ground Truth 使用 SNS 消息 ID。

  • 对于来自 Amazon S3 配置的消息,Ground Truth 通过将对象的 Amazon S3 URI 与消息中的 sequencer 令牌相结合来创建重复数据删除 ID。

在 Amazon SNS 消息中指定重复数据删除键和 ID

当您使用 Amazon SNS 消息将数据对象发送到流式标注作业时,您可以选择通过以下方式之一指定重复数据删除键和重复数据删除 ID。在所有这些情况下,请使用 dataset-objectid-attribute-name 识别重复数据删除键。

自带重复数据删除键和 ID

通过按如下方式配置 Amazon SNS 消息,创建自己的重复数据删除键和重复数据删除 ID。将 byo-key 替换为您的键,将 UniqueId 替换为该数据对象的重复数据删除 ID。

{ "source-ref":"s3://bucket/prefix/object1", "dataset-objectid-attribute-name":"byo-key", "byo-key":"UniqueId" }

重复数据删除键最多可包含 140 个字符。支持的模式包括:"^[$a-zA-Z0-9](-*[a-zA-Z0-9])*"

重复数据删除 ID 最多可包含 1024 个字符。支持的模式包括:^(https|s3)://([^/]+)/?(.*)$

将现有键用于重复数据删除键

您可以使用消息中的现有键作为重复数据删除键。执行此操作时,与该键关联的值将用于重复数据删除 ID。

例如,您可以通过以下方式格式化消息,指定使用 source-ref 键作为重复数据删除键:

{ "source-ref":"s3://bucket/prefix/object1", "dataset-objectid-attribute-name":"source-ref" }

在此示例中,Ground Truth 将 "s3://bucket/prefix/object1" 用于重复数据删除 ID。

在输出数据中查找重复数据删除键和 ID

您可以在输出数据中看到重复数据删除键和 ID。重复数据删除键由 dataset-objectid-attribute-name 标识。

当您使用自己的自定义重复数据删除键时,输出结果类似于下面的内容:

"dataset-objectid-attribute-name": "byo-key", "byo-key": "UniqueId",

如果未指定键,则可通过以下方式找到 Ground Truth 为数据对象分配的重复数据删除 ID。$label-attribute-name-object-id 参数标识重复数据删除 ID。

{ "source-ref":"s3://bucket/prefix/object1", "dataset-objectid-attribute-name":"$label-attribute-name-object-id" "label-attribute-name" :0, "label-attribute-name-metadata": {...}, "$label-attribute-name-object-id":"<service-generated-key>" }

对于 <service-generated-key>,如果数据对象是通过 Amazon S3 配置生成的,Ground Truth 会添加该服务使用的唯一值,并发出一个以 $sequencer 为键值的新字段,显示使用的 Amazon S3 sequencer。如果对象直接馈送到 SNS,Ground Truth 将使用 SNS 消息 ID。

注意

不要在标签属性名称中使用 $ 字符。