Étape 2 : Création de votre modèle de tâche employé personnalisée - Amazon SageMaker

Étape 2 : Création de votre modèle de tâche employé personnalisée

Un Modèle de tâche employé est un fichier utilisé par Ground Truth pour personnaliser l'interface utilisateur employé (UI) ou l'interface utilisateur des tâches humaines. Vous pouvez créer un modèle de tâche employé à l'aide de HTML, CSS, JavaScript, Langage de modèle Liquid, etCrowd HTML Elements. Liquid est utilisé pour automatiser le modèle, et Crowd HTML Elements peut être utilisé pour inclure des outils d'annotation courants et fournir la logique à envoyer à Ground Truth.

Consultez les rubriques suivantes pour apprendre à créer un modèle de tâche employé. Vous pouvez voir un référentiel d'exemples de modèles de tâches employé Ground Truth sur GitHub.

Démarrage avec un modèle de base

Vous pouvez utiliser un éditeur de modèles dans la console Ground Truth pour commencer à créer un modèle. Cet éditeur inclut un certain nombre de modèles de base préconçus et une fonction de remplissage automatique HTML et Crowd HTML Element.

Pour accéder à l'éditeur de modèles personnalisés Ground Truth :

  1. Suivez les instructions de la section Création d'une tâche d'étiquetage (Console) et sélectionnez Custom (Personnalisée) pour le Task type (Type de tâche) de la tâche d'étiquetage.

  2. Lorsque vous sélectionnez Next (Suivant), vous pourrez accéder à l'éditeur de modèles et aux modèles de base dans la section Custom labeling task setup (Configuration de la tâche d'étiquetage personnalisée).

  3. (Facultatif) Sélectionnez un modèle de base dans le menu déroulant sous Templates (Modèles). Si vous préférez créer un modèle à partir de zéro, choisissez Custom (Personnalisée) dans le menu déroulant pour un squelette de modèle minimal.

Développement de modèles en local

Alors que vous devez être dans la console pour tester la façon dont votre modèle traitera les données entrantes, vous pouvez tester l'apparence et la convivialité des éléments HTML et personnalisés de votre modèle dans votre navigateur en ajoutant ce code en haut de votre fichier HTML.

<script src="https://assets.crowd.aws/crowd-html-elements.js"></script>

Cela charge le code nécessaire pour afficher les éléments HTML personnalisés. Utilisez cela si vous voulez développer l'apparence de votre modèle dans votre éditeur préféré plutôt que dans la console.

N'oubliez pas, cependant, qu'elle n'analysera pas vos variables. Vous souhaiterez peut-être les remplacer par des exemples de contenu pendant le développement en local.

Utilisation de ressources externes

Les modèles personnalisés Amazon SageMaker Ground Truth permettent d'intégrer des feuilles de style et des scripts externes. Par exemple, le bloc de code suivant montre comment ajouter une feuille de style située dans https://www.example.com/my-enhancement-styles.css à votre modèle.

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

Si vous rencontrez des erreurs, veillez à ce que votre serveur d'origine envoie le type MIME et les en-têtes d'encodage corrects avec les ressources.

Par exemple, types d'encodage et MIME pour les scripts distants : application/javascript;CHARSET=UTF-8.

Type d'encodage et MIME pour les feuilles de style distantes : text/css;CHARSET=UTF-8.

Suivi de vos variables

Le processus de création de l'exemple ci-dessous comprendra une étape qui ajoute des variables à celui-ci afin de représenter les données qui peuvent varier d'une tâche à une autre, d'un employé à un autre. Si vous démarrez avec l'un des exemples de modèles, vous devrez vous assurer que vous connaissez les variables qu'il utilise déjà. Si vous créez votre script de prétraitement AWS Lambda, sa sortie devra contenir des valeurs pour les variables que vous choisissez de conserver.

Les valeurs que vous utilisez pour les variables peuvent provenir de votre fichier manifeste. Toutes les paires clé-valeur de votre objet de données sont fournies à votre pré-annotation Lambda. S'il s'agit d'un simple script de transit, la mise en correspondance des clés pour les valeurs de votre objet de données avec des noms de variables de votre modèle est le moyen le plus simple pour transmettre ces valeurs via les formes de tâches que les employés voient.

Exemple simple

Toutes les tâches commencent et se terminent par les éléments <crowd-form> </crowd-form>. Comme les éléments HTML <form> standard, tout votre code de formulaire doit figurer entre ces éléments.

Pour une simple tâche d'analyse de tweets , utilisez l'élément <crowd-classifier>. Il exige les attributs suivants :

  • name : nom de la variable à utiliser pour le résultat dans la sortie du formulaire.

  • categories : tableau au format JSON des réponses possibles.

  • header : titre pour l'outil d'annotation

Trois régions sont requises comme enfants de l'élément <crowd-classifier>.

  • <classification-target> : texte que l'employé classera en fonction des options spécifiées dans l'attribut categories ci-dessus.

  • <full-instructions> : instructions disponibles à partir du lien « View full instructions » (Afficher les instructions complètes) de l'outil. Elles peuvent peut rester vides, mais nous vous recommandons de donner de bonnes instructions pour obtenir de meilleurs résultats.

  • <short-instructions> : brève description de la tâche qui s'affiche dans la barre latérale de l'outil. Elles peuvent peut rester vides, mais nous vous recommandons de donner de bonnes instructions pour obtenir de meilleurs résultats.

Une version simple de cet outil se présenterait comme suit :

Exemple d'utilisation de crowd-classifier

<script src="https://assets.crowd.aws/crowd-html-elements.js"></script> <crowd-form> <crowd-classifier name="tweetFeeling" categories="['positive','negative','neutral', 'unclear']" header="Which term best describes this tweet?" > <classification-target> My favorite football team won today! Bring on the division finals! </classification-target> <full-instructions header="Sentiment Analysis Instructions"> Try to determine the sentiment the author of the tweet is trying to express. If none seem to match, choose "cannot determine." </full-instructions> <short-instructions> Pick the term best describing the sentiment of the tweet. </short-instructions> </crowd-classifier> </crowd-form>

Vous pouvez copier et coller le code dans l'éditeur du flux de travail de la tâche d'étiquetage Ground Truth pour prévisualiser l'outil ou tester une démonstration de ce code sur CodePen.


                            View a demo of this sample template on CodePen

Ajout de l'automatisation avec Liquid

Notre système de modèle personnalisé utilise Liquid pour l'automatisation. Il s'agit d'un langage de balisage open source en ligne. Dans Liquid, le texte entre accolades simples et symboles de pourcentage est une instruction ou balise qui exécute une opération telle qu'un flux de contrôle ou une itération. Le texte entre accolades doubles est une variable ou un objet qui génère sa valeur.

L'utilisation la plus courante de Liquid consistera à analyser les données provenant de vos tâches de pré-étiquetage Lambda et à en extraire les variables appropriées pour créer la tâche. L'objet taskInput renvoyé par votre Lambda de pré-annotation sera disponible en tant qu'objet task.input dans vos modèles.

Les propriétés de votre manifeste de données sont transmises à vos objets Lambda de pré-annotation en tant que event.dataObject. Un simple script de passerelle renvoie simplement cet objet en tant qu'objet taskInput. Vous pouvez représenter les valeurs de votre manifeste en tant que variables comme suit.

Exemple Objet des données de manifeste

{ "source": "This is a sample text for classification", "labels": [ "angry" , "sad" , "happy" , "inconclusive" ], "header": "What emotion is the speaker feeling?" }

Exemple de code HTML à l'aide des variables

<crowd-classifier name='tweetFeeling' categories='{{ task.input.labels | to_json }}' header='{{ task.input.header }}' > <classification-target> {{ task.input.source }} </classification-target>

Notez l'ajout de «  | to_json » à la propriété labels ci-dessus. C'est un filtre pour transformer le tableau en représentation JSON du tableau. Les filtres de variables sont expliqués en la section suivante.

La liste suivante comprend deux types de balises Liquid qui peuvent être utiles pour automatiser le traitement des données source de modèle. La sélection de l'un des types de balises suivants vous redirige vers la documentation Liquid.

  • Contrôle de flux : inclut des opérateurs logiques de programmation tels que if/else, unless et case/when.

  • Itération : vous permet d'exécuter des blocs de code de façon répétée en utilisant des instructions comme les boucles for.

    Pour obtenir un exemple de modèle HTML qui utilise des éléments Liquid pour créer une boucle for, veuillez consulter translation-review-and-correction.liquid.html dans GitHub.

Pour obtenir plus d'informations et la documentation, consultez la page d'accueil de Liquid.

Filtres de variables

Outre les actions et filtres Liquid standard, Ground Truth propose quelques filtres supplémentaires. Les filtres sont appliqués en plaçant une barre verticale (|) après le nom de la variable, puis en spécifiant un nom de filtre. Les filtres peuvent être associés sous la forme de :

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

Échappement automatique et échappement explicite

Par défaut, les entrées seront placées dans une séquence d'échappement HTML pour éviter toute confusion entre le texte de votre variable et le code HTML. Vous pouvez ajouter explicitement le filtre escape afin que les personnes qui lisent la source de votre modèle comprennent qu'il s'agit d'un échappement.

escape_once

escape_once s'assure que votre code ne sera pas placé dans une seconde séquence d'échappement alors qu'il l'est déjà. Par exemple, afin que &amp; ne devienne pas &amp;amp;.

skip_autoescape

skip_autoescape est utile si votre contenu est destiné à être utilisé en tant que code HTML. Par exemple, vous pouvez avoir quelques paragraphes de texte et des images dans les instructions complètes d'un cadre de délimitation.

Utilisez skip_autoescape avec modération

La bonne pratique consiste à éviter de transmettre du code fonctionnel ou du balisage avec skip_autoescape, sauf si vous êtes absolument certain que vous maîtrisez parfaitement ce qui est transmis. Si vous transmettez l'entrée d'un utilisateur, vous risquez d'exposer vos employés à une attaque de script intersite.

to_json

to_json encodera ce que vous lui fournissez au format JSON (JavaScript Object Notation). Si vous lui fournissez un objet, il va le sérialiser.

grant_read_access

grant_read_access prend un URI S3 et l'encode dans une URL HTTPS avec un jeton d'accès de courte durée pour cette ressource. Cela permet de montrer aux employés des objets photo, audio ou vidéo stockés dans des compartiments S3 qui ne sont pas autrement accessibles publiquement.

Exemple des filtres

Entrée

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

Sortie

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>

Exemple d'un modèle de classification automatique.

Pour automatiser l'exemple de classification de texte simple, remplacez le texte du tweet par une variable.

Le modèle de classification de texte se trouve ci-dessous et comprend l'automatisation. Les modifications/ajouts sont mis en évidence en gras.

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

Le texte du tweet de l'exemple précédent est désormais remplacé par un objet. L'objet entry.taskInput utilise source (ou un autre nom que vous spécifiez dans votre fonction de prétraitement Lambda) comme nom de propriété pour le texte et est inséré directement dans le code HTML puisqu'il se trouve entre accolades doubles.

Démonstrations de bout en bout

Vous pouvez consulter les démonstrations de bout en bout suivantes, qui incluent un exemple de fonction Lambda :

Suivant

Étape 3 : Traitement avec AWS Lambda