Adicionar automação com o Liquid - Amazon SageMaker

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Adicionar automação com o Liquid

Nosso sistema de modelo personalizado usa o Liquid para automação. Trata-se de uma linguagem de marcação de código aberto em linha. No Liquid, o texto entre chaves simples e símbolos de percentagem é uma instrução ou tag que realiza uma operação, como controle de fluxo ou iteração. O texto entre chaves duplas é uma variável ou um objeto que gera seu valor.

O uso mais comum do Liquid será para analisar os dados provenientes do pre-annotation Lambda (Lambda de pré-anotação) e extrair as variáveis relevantes para criar a tarefa. O objeto taskInput retornado pelo Lambda de pré-anotação estará disponível como o objeto task.input em seus modelos.

As propriedades nos objetos de dados do seu manifesto são passadas para o seu Lambda de pré-anotação como o event.dataObject. Um simples script de passagem simplesmente retorna esse objeto como o objeto taskInput. Você representa valores do seu manifesto como variáveis da seguinte forma.

exemplo Objeto de dados do manifesto
{ "source": "This is a sample text for classification", "labels": [ "angry" , "sad" , "happy" , "inconclusive" ], "header": "What emotion is the speaker feeling?" }
exemplo Exemplo de HTML usando variáveis
<crowd-classifier name='tweetFeeling' categories='{{ task.input.labels | to_json }}' header='{{ task.input.header }}' > <classification-target> {{ task.input.source }} </classification-target>

Observe a adição de " | to_json" à propriedade labels acima. Esse é um filtro para transformar a matriz em uma representação JSON da matriz. Os filtros de variáveis são explicados na próxima seção.

A lista a seguir inclui dois tipos de tags Liquid que podem ser úteis para automatizar o processamento de dados de entrada em modelos. Se você selecionar um dos seguintes tipos de tags, será redirecionado para a documentação do Liquid.

Para obter mais informações e acessar a documentação, visite a página inicial Liquid.

Filtros de variáveis

Além dos filtros e ações padrão do Liquid, o Ground Truth oferece alguns filtros adicionais. Os filtros são aplicados colocando um caractere de barra vertical (|) após o nome da variável e, em seguida, especificando um nome do filtro. Os filtros podem ser encadeados na forma de:

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

Escape automático e escape explícito

Por padrão, as entradas terão escape HTML para evitar confusão entre o texto da variável e o HTML. Você pode adicionar explicitamente o filtro escape para tornar mais óbvio para alguém que esteja lendo a origem do seu modelo que o escape está sendo feito.

escape_once

escape_once garante que, se você já tiver escapado seu código, ele não será reexibido além disso. Por exemplo, para que &amp; não se torne &amp;amp;.

skip_autoescape

skip_autoescape é útil quando seu conteúdo deve ser usado como HTML. Por exemplo, você pode ter alguns parágrafos de texto e algumas imagens nas instruções completas de uma caixa delimitadora.

Use skip_autoescape com moderação

A prática recomendada em modelos é evitar transmitir código da função ou marcação com skip_autoescape, a menos que você tenha absoluta certeza de que tem o controle rígido sobre o que está sendo transmitido. Se você estiver transmitindo a entrada do usuário, poderá expor seus funcionários a um ataque de Cross Site Scripting.

to_json

to_jsoncodificará o que você envia para JSON (JavaScript Object Notation). Se você alimentar um objeto, ele será serializado.

grant_read_access

grant_read_access usa um URI do S3 e o codifica em um URL HTTPS com um token de acesso de curta duração para esse recurso. Isso possibilita exibir aos trabalhadores fotos, áudio ou vídeo de armazenados em buckets do S3 que de outra forma não são acessíveis publicamente.

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

Saída

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>
exemplo de um modelo de classificação automatizado.

Para automatizar a amostra de classificação de texto simples, substitua o texto do tweet por uma variável.

O modelo de classificação de texto está abaixo com automação adicionada. As alterações/adições estão destacadas em negrito.

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

O texto do tweet que estava no exemplo anterior agora é substituído por um objeto. O objeto entry.taskInput usa source (ou outro nome que você especificar no seu Lambda de pré-anotação) como o nome da propriedade para o texto, e ele é inserido diretamente no HTML por estar entre chaves duplas.