第 2 步:创建自定义工作人员任务模板 - Amazon SageMaker
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

第 2 步:创建自定义工作人员任务模板

一个工作者任务模板是 Ground Truth 用来自定义工作人员用户界面 (UI) 或人工任务 UI 的文件。您可以使用 HTML、CSS、JavaScript 创建工作线程任务模板,液体模板语言, 和Crowd HTML 元素. Liquid 用于自动化模板,Crowd HTML 元素可用于包含常见的注释工具并提供提交给 Ground Truth 的逻辑。

使用以下主题了解如何创建工作线程任务模板。你可以在上看到 Ground Truth 工作人员任务模板示例存储库GitHub.

开始基本模板

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

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

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

  2. 当你选择时下一步,你将能够访问模板编辑器和基本模板自定义标签任务设置部分。

  3. (可选)从下拉菜单中选择基本模板模板. 如果你更喜欢从头开始创建模板,请选择Custom (自定义)从下拉菜单中获取最小的模板框架。

在本地开发模板

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

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

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

使用外部资产

亚马逊 SageMaker Ground Truth 自定义模板允许嵌入外部脚本和样式表。例如,以下代码块演示了如何添加位于https://www.example.com/my-enhancement-styles.css转到模板。

<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.

跟踪您的变量

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

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

简单示例

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

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

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

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

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

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

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

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

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

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

例 使用 crowd-classifier

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


                            View a demo of this sample template on CodePen

使用 Liquid 添加自动化

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

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

清单的数据对象中的属性将作为 event.dataObject 传递到 注释前 Lambda。简单的传递脚本仅将该对象作为 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>

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

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

  • 控制流:包括编程逻辑运算符if/elseunless, 和case/when.

  • 迭代: 使您能够使用 for 循环之类的语句重复运行代码块。

    有关使用 Liquid 元素创建 for 循环的 HTML 模板的示例,请参阅翻译-审查和更正 .iqu.htmlGitHub 中。

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

变量筛选条件

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

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

自动转义和显式转义

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

escape_once

escape_once确保如果您已经转义代码,则不会重新转义。例如,使 & 不会变为 &;。

skip_autoescape

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

使用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>

例 自动化的分类模板。

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

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

前面示例中的推文文本现已替换为一个对象。这些区域有:entry.taskInput使用对象source(或者您在注释前 Lambda 中指定的其他名称)作为文本的属性名称,它将由于介于双大括号之间直接插入在 HTML 中。

端到端演示

您可查看以下内容 end-to-end 演示包括示例 Lambda 函数:

下一页

第 3 步:使用处理Amazon Lambda