步骤 2:创建您的自定义标记任务模板 - Amazon SageMaker
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

步骤 2:创建您的自定义标记任务模板

开始基本模板

您可以使用 Ground Truth 控制台中的模板编辑器开始创建模板。此编辑器包含许多预先设计的基本模板以及 HTML 和 Crowd HTML 元素自动填充功能。

访问Ground Truth自定义模板编辑器:

  1. 按照中的说明操作,然后为标记作业创建标记作业(控制台)任务类型选择自定义

  2. 当您选择 Next (下一步) 时,您将能够访问 Custom labeling task setup (自定义标记任务设置) 部分中模板编辑器和基本模板。

  3. (可选) 从下拉菜单中选择基本模板,位于 Templates (模板) 下。如果您希望从头开始创建模板,请从最小模板骨架的下拉菜单中选择 Custom (自定义)。

提示

有关各种标记作业任务类型的演示模板存储库,请参阅 Amazon SageMaker Ground Truth 示例任务 UIs

在本地开发模板

尽管您需要在控制台中测试模板将如何处理传入的数据,但您可以通过在 HTML 文件的顶部添加此代码,在浏览器中测试模板的 HTML 和自定义元素的外观。

<script src="https://assets.crowd.aws/crowd-html-elements.js"></script>

这会加载必要的代码来呈现自定义 HTML 元素。如果您希望在首选编辑器而非在控制台中开发您模板的外观,则使用此方法。

但请记住,这不会解析您的变量。您可能希望在本地开发时将它们替换示例内容。

使用外部资产

Amazon SageMaker Ground Truth 自定义模板允许嵌入外部脚本和样式表。

<script src="https://www.example.com/my-enhancment-script.js"></script> <link rel="stylesheet" type="text/css" href="https://www.example.com/my-enhancement-styles.css">

如果您遇到错误,请确保您的原始服务器随资产一起发送正确的 MIME 类型和编码标头。

例如,对于远程脚本,MIME 和编码类型为:application/javascript;CHARSET=UTF-8

对于远程样式表,MIME 和编码类型为:text/css;CHARSET=UTF-8

跟踪您的变量

在下面构建示例的过程中,将有一个步骤用于向示例添加变量,以表示可能会随任务或工作人员不同而变化的数据片段。如果您以其中一个示例模板开始,您将需要确保您知道它已经使用的变量。在创建注释前 AWS Lambda 脚本时,其输出需要包含您选择保留的任何这些变量的值。

用于变量的值可能来自于清单文件。将为注释前 Lambda 提供数据对象中的所有键值对。如果这是一个简单的传递脚本,将数据对象中的值键与模板中的变量名称相匹配是将这些值传递到工作人员看到的任务表单的最简单方法。

简单示例

所有任务都以 <crowd-form> </crowd-form> 元素开始和结束。与标准 HTML <form> 元素类似,所有格式代码都应位于它们之间。

对于简单的推文分析任务,请使用 <crowd-classifier> 元素。它需要以下属性:

  • 名称 - 用于格式输出结果的变量名称。

  • 类别 - JSON 格式的一系列可能的答案。

  • 标题 - 用于注释工具的标题

作为 <crowd-classifier> 元素的子元素,您必须有三个区域。

  • <classification-target> - 工作人员将根据在上面 categories 属性中指定的选项进行分类的文本。

  • <full-instructions> - 工具中的“查看完整说明”链接中提供的说明。这可以留空,但建议您提供适当的说明来获得更好的结果。

  • <short-instructions> - 对于工具栏边栏中显示的任务的更简要说明。这可以留空,但建议您提供适当的说明来获得更好的结果。

此工具的简单版本如下所示。

例 使用 crowd-classifier

<script src="https://assets.crowd.aws/crowd-html-elements.js"></script> <crowd-form> <crowd-classifier name="tweetFeeling" categories="['positive','negative','neutral', 'unclear']" header="Which term best describes this tweet?" > <classification-target> My favorite football team won today! Bring on the division finals! </classification-target> <full-instructions header="Sentiment Analysis Instructions"> Try to determine the sentiment the author of the tweet is trying to express. If none seem to match, choose "cannot determine." </full-instructions> <short-instructions> Pick the term best describing the sentiment of the tweet. </short-instructions> </crowd-classifier> </crowd-form>

您可以复制代码并将其粘贴到 Ground Truth 标记作业创建工作流程的编辑器以预览该工具,或尝试使用 CodePen 上的该代码演示


                            View a demo of this sample template on CodePen

使用 Liquid 添加自动化

我们的自定义模板系统使用 Liquid 进行自动化。它是开源内联标记语言。在 Liquid 中,单大括号和百分比符号之间的文本是执行控制流程或迭代等操作的指令或标签。双大括号之间的文本是一个变量或用于输出变量值的对象

Liquid 的最常见用途是分析来自注释前 Lambda 的数据,并提取相关变量以创建任务。taskInput 返回的 注释前 Lambda 对象将作为模板中的 task.input 对象。

清单的数据对象中的属性将作为 注释前 Lambda 传递到 event.dataObject。简单的传递脚本仅将该对象作为 taskInput 对象返回。您可以将清单中的值表示为变量,如下所示。

例 清单数据对象

{ "source": "This is a sample text for classification", "labels": [ "angry" , "sad" , "happy" , "inconclusive" ], "header": "What emotion is the speaker feeling?" }

例 使用变量的示例 HTML

<crowd-classifier name='tweetFeeling' categories='{{ task.input.labels | to_json }}' header='{{ task.input.header }}' > <classification-target> {{ task.input.source }} </classification-target>

请注意,在上面的 | to_json 属性中添加了“labels”。这是一个筛选条件,用于将数组转换为数组的 JSON 表示形式。变量筛选条件在下一节中说明。

以下列表包含两种类型的 Liquid 标签,您可能会发现这些标签对于自动执行模板输入数据处理非常有用。如果您选择以下标签类型之一,则将重定向到 Liquid 文档。

有关更多信息和文档,请访问 Liquid 主页

变量筛选条件

除了标准 Liquid 筛选条件和操作之外, Ground Truth 还提供了一些额外的筛选条件。通过在变量名称之后放置竖线 (|) 字符,然后指定筛选条件名称,以应用筛选条件。筛选条件可以采用以下形式链接起来:

{{ <content> | <filter> | <filter> }}

自动转义和显式转义

默认情况下,输入将进行 HTML 转义,以防止在变量文本和 HTML 之间产生混淆。您可以显式添加 escape 筛选条件,以使其对于正读取正在进行转义的模板源的用户更显而易见。

escape_once

escape_once 可确保如果您已对代码进行转义,则不会在此代码之上重新转义。例如,这样 & 不会变为 &amp;。

skip_autoescape

skip_autoescape当您的内容要用作 HTML 时, 很有用。例如,您可能在边界框的完整说明中有一些文本段落和一些图像。

skip_autoescape 请谨慎使用

模板中的最佳实践是避免使用 skip_autoescape 传递功能代码或标记,除非您绝对确信您对正传递的内容具有严格的控制。如果您传递用户输入,则可能会让您的工作人员遭受跨站点脚本攻击。

to_json

to_json 会将您提供给它的内容编码到 JSON (JavaScript 对象表示法)。如果您为其提供对象,它将对其进行序列化。

grant_read_access

grant_read_access 获取 S3 URI 并将其编码到 HTTPS URL 中,并为其提供短期访问令牌。这样,就可以向工作人员显示存储在 S3 存储桶中但原本无法公开访问的照片、音频或视频对象。

例 筛选条件的

输入

auto-escape: {{ "Have you read 'James & the Giant Peach'?" }} explicit escape: {{ "Have you read 'James & the Giant Peach'?" | escape }} explicit escape_once: {{ "Have you read 'James &amp; the Giant Peach'?" | escape_once }} skip_autoescape: {{ "Have you read 'James & the Giant Peach'?" | skip_autoescape }} to_json: {{ jsObject | to_json }} grant_read_access: {{ "s3://mybucket/myphoto.png" | grant_read_access }}

输出

auto-escape: Have you read &#39;James &amp; the Giant Peach&#39;? explicit escape: Have you read &#39;James &amp; the Giant Peach&#39;? explicit escape_once: Have you read &#39;James &amp; the Giant Peach&#39;? skip_autoescape: Have you read 'James & the Giant Peach'? to_json: { "point_number": 8, "coords": [ 59, 76 ] } grant_read_access: https://s3.amazonaws.com/mybucket/myphoto.png?<access token and other params>

例 自动化的分类模板。

要自动执行简单文本分类示例,请将 tweet 文本替换为变量。

文本分类模板如下,并添加了自动化。更改/添加以粗体突出显示。

<script src="https://assets.crowd.aws/crowd-html-elements.js"></script> <crowd-form> <crowd-classifier name="tweetFeeling" categories="['positive', 'negative', 'neutral', 'cannot determine']" header="Which term best describes this tweet?" > <classification-target> {{ task.input.source }} </classification-target> <full-instructions header="Analyzing a sentiment"> Try to determine the feeling the author of the tweet is trying to express. If none seem to match, choose "other." </full-instructions> <short-instructions> Pick the term best describing the sentiment of the tweet. </short-instructions> </crowd-classifier> </crowd-form>

前面示例中的推文文本现已替换为一个对象。entry.taskInput 对象使用 source (或在注释前 Lambda 中指定的其他名称)作为文本的属性名称,并且通过将位于双大括号之间来将其直接插入 HTML 中。

端到端演示

您可以查看以下端到端演示,其中包括示例 Lambda:

Next

步骤 3:使用 AWS Lambda 进行处理