使用 Liquid 添加自动化 - Amazon SageMaker

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

使用 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/elseunlesscase/when

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

    有关使用 Liquid 元素创建 for 循环的 HTML 模板的示例,请参阅中的.li translation-review-and-correctionquid.htm l。 GitHub

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

变量筛选条件

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

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

自动转义和显式转义

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

escape_once

escape_once 可确保您的代码已经转义,而不会再次重新转义。例如,确保 &amp; 不会变为 &amp;amp;。

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>
例 自动化的分类模板。

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

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

<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 中。