Adición de automatización con Liquid - Amazon SageMaker

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Adición de automatización con Liquid

Nuestro sistema de plantillas personalizado utiliza Liquid para la automatización. Se trata de un lenguaje de marcado en línea de código abierto. En Liquid, el texto entre llaves y símbolos de porcentaje es una instrucción o etiqueta que lleva a cabo una operación, como un flujo de control o una iteración. El texto que está entre llaves dobles es una variable u objeto que genera su valor.

El uso más frecuente de Liquid consistirá en analizar los datos procedentes de su Lambda de preanotación y extraer las variables pertinentes para crear la tarea. El objeto taskInput devuelto por el Lambda de preanotación estará disponible como el objeto task.input de las plantillas.

Las propiedades de los objetos de datos de su manifiesto se transfieren a su Lambda de preanotación como event.dataObject. Un sencillo script de transferencia simplemente devuelve dicho objeto como el objeto taskInput. Se representarían valores del manifiesto como variables tal y como se indica a continuación.

ejemplo Objeto de datos de manifiesto
{ "source": "This is a sample text for classification", "labels": [ "angry" , "sad" , "happy" , "inconclusive" ], "header": "What emotion is the speaker feeling?" }
ejemplo HTML de ejemplo que usa variables
<crowd-classifier name='tweetFeeling' categories='{{ task.input.labels | to_json }}' header='{{ task.input.header }}' > <classification-target> {{ task.input.source }} </classification-target>

Tenga en cuenta la incorporación de " | to_json" a la propiedad labels anterior. Es un filtro para convertir la matriz en una representación JSON de la matriz. Los filtros de variables se explican en la siguiente sección.

La siguiente lista incluye dos tipos de etiquetas de Liquid que podrían ser útiles para automatizar el procesamiento de los datos de entrada de las plantillas. Si selecciona uno de los siguientes tipos de etiquetas, se le redirigirá a la documentación de Liquid.

  • Flujo de control: incluye operadores lógicos de programación, como if/else, unless y case/when.

  • Iteración: permite ejecutar bloques de código repetidamente con instrucciones como los bucles for.

    Para ver un ejemplo de una plantilla HTML que utiliza elementos de Liquid para crear un bucle, consulte translation-review-and-correction.liquid.html en. GitHub

Para obtener más información y documentación, visite la página de inicio de Liquid.

Filtros de variables

Además de los filtros y acciones estándar de Liquid, Ground Truth ofrece varios filtros adicionales. Los filtros se aplican colocando una barra vertical (|) después del nombre de la variable y luego especificando un nombre de filtro. Los filtros se pueden encadenar en forma de:

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

Autoescape y escape explícito

De forma predeterminada, las entradas tendrán un escape de HTML para evitar que haya confusión entre el texto de la variable y HTML. Puede añadir de forma explícita el filtro escape para que sea más evidente para la persona que esté leyendo la fuente de la plantilla que se esta realizando un escape.

escape_once

escape_once garantiza que si ya ha escapado el código, no se vuelva a realizar un escape encima de este. Por ejemplo, garantiza que &amp; no se convierta en &amp;amp;.

skip_autoescape

skip_autoescape es útil cuando se prevé utilizar el contenido como HTML. Por ejemplo, puede que tenga unos cuantos párrafos de texto y algunas imágenes en las instrucciones completas de un cuadro delimitador.

Utilice skip_autoescape con moderación

La práctica recomendada en el caso de las plantillas es evitar trasferir código funcional o de marcado con skip_autoescape, a menos que esté absolutamente seguro de que tiene un control estricto sobre lo que se transfiere. Si está pasando entradas de usuario, podría estar dejando a sus trabajadores desprotegidos ante un ataque de scripts de sitios.

to_json

to_jsoncodificará lo que introduzcas en JSON (Object Notation)JavaScript . Si introduce un objeto, lo serializará.

grant_read_access

grant_read_access toma un URI de S3 y lo codifica en una URL de HTTPS con un token de acceso de duración limitada para dicho recurso. Esto permite mostrar a los trabajadores objetos de foto, audio o vídeo almacenados en buckets de S3 a los que, de lo contrario, no se podría obtener acceso públicamente.

ejemplo de los filtros

Entrada

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

Salida

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>
ejemplo de una plantilla de clasificación automatizada.

Para automatizar el ejemplo de clasificación de texto sencillo, sustituya el texto del tweet por una variable.

La plantilla de clasificación de texto siguiente tiene automatización añadida. Los cambios o adiciones se resaltan en negrita.

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

Ahora, el texto del tweet del ejemplo anterior se ha sustituido por un objeto. El objeto entry.taskInput utiliza source (u otro nombre que especifique en su Lambda de preanotación) como nombre de la propiedad para el texto y se inserta directamente en el HTML por estar entre dos llaves dobles.