演示模板:使用的标记意图crowd-classifier - Amazon SageMaker
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

演示模板:使用的标记意图crowd-classifier

如果您选择自定义模板,您将到达自定义标签任务面板. 在那里,您可以从多个入门模板中进行选择,这些模板代表了一些较常见的 这些模板提供了构建您的自定义标记任务模板的起点。

在此演示中,您可使用目的检测模板,它使用crowd-classifier元素,以及Amazon Lambda在执行任务前后处理数据所需的函数。

入门目的检测自定义模板

这是作为起点提供的目的检测模板。

此自定义模板使用 Liquid 模板语言,双大括号之间的每个项都是一个变量。注释前AmazonLambda 函数应该提供一个名为taskInput并且该对象的属性可以通过以下方式访问{{ task.input.<property name> }}在模板中。

你的意图检测自定义模板

在入门模板中,有两个变量:crowd-classifier 元素中的 task.input.labels 属性,用于打开标记,以及 classification-target 区域的内容中的 task.input.utterance

除非你需要提供不同语法的不同标签集合,否则避免使用变量并仅使用文本将节省处理时间并减少出错的可能性。本演示中使用的模板将删除该变量,但变量和过滤器类似to_json有更详细的解释,请参阅crowd-bounding-box示范文章。

为元素设置样式

这些自定义元素中有两个有时被忽略的部分是<full-instructions><short-instructions>地区。好的说明会产生良好的结果。

在包含这些区域的元素中,<short-instructions>自动显示在工作人员屏幕左侧的 “说明” 窗格中。这些区域有:<full-instructions>将从该窗格顶部附近的 “查看完整说明” 链接链接进行链接。单击链接打开一个模式窗格,其中包含更详细的说明。

你不仅可以使用 HTML、CSS 和 JavaScript 在这些章节中,如果您相信可以提供一套强有力的说明和示例,帮助员工以更快的速度和准确地完成任务,我们鼓励您了解。

例 用 jsfiddle 尝试样本

尝试示例<crowd-classifier>任务. 该示例由 jsfiddle 呈现,因此所有模板变量都被硬编码值替换。单击 “查看完整说明” 链接以查看一组具有扩展 CSS 样式的示例。你可以分叉项目来试验你自己对 CSS 的更改、添加示例图像或添加扩展 JavaScript 功能性。

例 :最终自定义目的检测模板

这使用示例<crowd-classifier>任务,但是有一个变量用于<classification-target>. 如果您试图在一系列不同的标签作业中保持一致的 CSS 设计,则可以使用<link rel...>元素与在任何其他 HTML 文档中所做的方式一样。

例 :您的清单文件

如果您正在为类似这样的文本分类任务手动准备清单文件,则可以下列方式格式化数据。

{"source": "Roses are red"} {"source": "Violets are Blue"} {"source": "Ground Truth is the best"} {"source": "And so are you"}

这有别于用于“演示模板:使用注释图片crowd-bounding-box”演示的清单文件,在后者中,source-ref 用作属性名而非 source。使用source-ref将 S3 URI 指定为必须转换为 HTTP 的映像或其他文件。否则,应将 source 视为含上面的文本字符串来使用。

注释前 Lambda 函数

作为职位设置的一部分,提供一个Amazon Lambda这可以调用它来处理您的清单条目并将它们传递到模板引擎。

此 Lambda 函数必须包含以下四个字符串之一作为函数名的一部分: SageMakerSagemakersagemakerLabelingFunction

这同时适用于注释前和注释后 Lambda。

当您使用控制台时,如果您有一个归您的账户拥有的 Lambda,则将提供满足命名要求的函数的下拉列表供您选择一个函数。

在这个非常基本的示例中,您只有一个变量,它主要是一个直通函数。下面是使用 Python 3.7 的标记前 Lambda 的一个示例。

import json def lambda_handler(event, context): return { "taskInput": event['dataObject'] }

这些区域有:dataObject的财产event包含清单中数据对象的属性。

在这个演示中,这是一个简单的传递,您只是将它作为taskInput值。如果将具有这些值的属性添加到 event['dataObject'] 对象,则它们可作为格式为 {{ task.input.<property name> }} 的 Liquid 变量用于您的 HTML 模板。

注释后 Lambda 函数

作为作业设置的一部分,请提供 Lambda 函数的 ARN,当工作线程完成任务时,可以调用该函数处理表单数据。这可以很简单,也可以很复杂。如果您想在数据进来时进行应答整合和评分,则可以用您选择的评分或整合算法。如果您想要存储原始数据以进行脱机处理,则这是一个选项。

为注释后 Lambda 函数设置权限

注释数据将位于一个文件中,该文件由 payload 对象中的 s3Uri 字符串指定。要在出现注释时处理这些注释,即使对于简单的传递函数,您也需要分配S3ReadOnly访问您的 Lambda 以便它可以读取注释文件。

在用于创建 Lambda 的控制台中,滚动至 Execution role (执行角色) 面板。Select从一个或多个模板创建新角色. 为角色提供一个名称。从Policy templates下拉菜单,选择Amazon S3 对象只读权限. 保存 Lambda,将保存并选择该角色。

以下示例适用于 Python 3.7。

import json import boto3 from urllib.parse import urlparse def lambda_handler(event, context): consolidated_labels = [] parsed_url = urlparse(event['payload']['s3Uri']); s3 = boto3.client('s3') textFile = s3.get_object(Bucket = parsed_url.netloc, Key = parsed_url.path[1:]) filecont = textFile['Body'].read() annotations = json.loads(filecont); for dataset in annotations: for annotation in dataset['annotations']: new_annotation = json.loads(annotation['annotationData']['content']) label = { 'datasetObjectId': dataset['datasetObjectId'], 'consolidatedAnnotation' : { 'content': { event['labelAttributeName']: { 'workerId': annotation['workerId'], 'result': new_annotation, 'labeledContent': dataset['dataObject'] } } } } consolidated_labels.append(label) return consolidated_labels

你的标签作业输出

注释后 Lambda 通常将在事件对象中收到成批的任务结果。这种批处理将是 Lambda 应迭代的 payload 对象。

您将在您指定的目标 S3 存储桶中以您的标记作业命名的文件夹中找到作业的输出。它将位于名为 manifests 的子文件夹中。

对于目的检测任务,输出清单中的输出将有点类似于下面的演示。这个示例已进行清理并加宽间距,以便于阅读。对于机器阅读,实际输出将更加压缩。

例 :输出清单中的 JSON

[ { "datasetObjectId":"<Number representing item's place in the manifest>", "consolidatedAnnotation": { "content": { "<name of labeling job>": { "workerId":"private.us-east-1.XXXXXXXXXXXXXXXXXXXXXX", "result": { "intent": { "label":"<label chosen by worker>" } }, "labeledContent": { "content":"<text content that was labeled>" } } } } }, "datasetObjectId":"<Number representing item's place in the manifest>", "consolidatedAnnotation": { "content": { "<name of labeling job>": { "workerId":"private.us-east-1.6UDLPKQZHYWJQSCA4MBJBB7FWE", "result": { "intent": { "label": "<label chosen by worker>" } }, "labeledContent": { "content": "<text content that was labeled>" } } } } }, ... ... ... ]

这将有助于您创建和使用自己的自定义模板。