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

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

第 2 步 2 步:创建您的自定义工作任务模板

工作任务模板是 G round Truth 用来自定义工作器用户界面 (UI) 或人工任务界面的文件。您可以使用 HTML、CSS、Li quid 模板语言和 C rowd HTML 元素创建工作任务模板。 JavaScriptLiquid 用于自动化模板,Crowd HTML Elements 可用于包含常用注释工具并提供提交给 Ground Truth 的逻辑。

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

开始基本模板

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

要访问 Ground Truth 自定义模板编辑器,请:
  1. 按照中的创建标记作业(控制台)说明为标签作业任务类型选择 “自定义”。

  2. 选择 “下一步” 后,您将能够访问自定义标签任务设置部分中的模板编辑器和基础模板。

  3. (可选)从模板下的下拉菜单中选择基础模板。如果您更喜欢从头开始创建模板,请从下拉菜单中选择 “自定义” 以获得最小的模板框架。

在本地开发模板

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

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

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

使用外部资产

Amazon Gro SageMaker und 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.

跟踪您的变量

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

用于变量的值可能来自于清单文件。将为注释前 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 文档。

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

变量筛选条件

除了标准的 Li quid 滤镜和动作外,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 }}

Output

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 演示版

您可以查看以下 end-to-end 演示,其中包括示例 Lambda 函数:

下一页

第 3 步 3 步:使用以下方式处理Amazon Lambda