Hinzufügen von Automation mit Liquid - Amazon SageMaker

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Hinzufügen von Automation mit Liquid

Unser benutzerdefiniertes Vorlagensystem verwendet Liquid zur Automatisierung. Es handelt sich um eine Open-Source-Inline-Auszeichnungssprache. In Liquid handelt es sich beim Text zwischen einzelnen geschweiften Klammern und Prozentzeichen um eine Anweisung oder einen Tag, die bzw. der einen Vorgang wie Steuerungsablauf oder Iteration durchführt. Text zwischen doppelten geschweiften Klammern ist eine Variable oder ein Objekt zum Ausgeben des Werts.

Am häufigsten wird Liquid zum Analysieren der Daten aus dem pre-annotation Lambda (Lambda-Skript zur Vorverarbeitung) und zum Auslesen der relevanten Variablen verwendet, um die Aufgabe zu erstellen. Das taskInput-Objekt, das vom Lambda zur Vorverarbeitung zurückgegeben wird, wird in Ihren Vorlagen als task.input-Objekt zur Verfügung stehen.

Die Eigenschaften in den Datenobjekten Ihres Manifests werden im Lambda zur Vorverarbeitung als event.dataObject übergeben. Ein einfaches Pass-Through-Skript gibt dieses Objekt schlichtweg als taskInput-Objekt zurück. Stellen Sie Werte aus Ihrem Manifest folgendermaßen als Variablen dar.

Beispiel Datenobjekt des Manifests
{ "source": "This is a sample text for classification", "labels": [ "angry" , "sad" , "happy" , "inconclusive" ], "header": "What emotion is the speaker feeling?" }
Beispiel-HTML unter Verwendung von Variablen
<crowd-classifier name='tweetFeeling' categories='{{ task.input.labels | to_json }}' header='{{ task.input.header }}' > <classification-target> {{ task.input.source }} </classification-target>

Beachten Sie oben das Hinzufügen von „ | to_json“ zur labels-Eigenschaft. Hierbei handelt es sich um einen Filter, durch den das Array in eine JSON-Darstellung des Arrays umgewandelt wird. Variablenfilter werden im nächsten Abschnitt erläutert.

Die folgende Liste enthält zwei Arten von Liquid-Tags, die für Sie nützlich sein könnten, um die Verarbeitung von Vorlageneingabedaten zu automatisieren. Wenn Sie einen der folgenden Tag-Typen auswählen, werden Sie zur Liquid-Dokumentation weitergeleitet.

  • Steuerungsablauf: Beinhaltet Programmierlogik-Operatoren wie if/else, unless und case/when.

  • Iteration: Ermöglicht das wiederholte Ausführen von Codeblöcken mithilfe von Anweisungen wie for-Schleifen.

    Ein Beispiel für eine HTML-Vorlage, die Liquid-Elemente verwendet, um eine For-Schleife zu erstellen, finden Sie unter translation-review-and-correction.liquid.html in. GitHub

Weitere Informationen und Dokumentationen finden Sie auf der Liquid-Homepage.

Variablenfilter

Zusätzlich zu den Standard-Liquid-Filtern und Aktionen bietet Ground Truth einige zusätzliche Filter. Filter werden angewendet, indem ein Pipe-Zeichen (|) nach dem Variablennamen platziert und dann ein Filtername angegeben wird. Filter können verkettet werden in Form von:

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

Autoescape und explizites Escape

Standardmäßig werden Eingaben durch HTML geschützt, um Verwirrung zwischen Ihrem variablen Text und HTML zu verhindern. Sie können den escape-Filter explizit hinzufügen, um es für den Leser der Quelle Ihrer Vorlage ersichtlicher zu machen, dass das Escaping durchgeführt wird.

escape_once

escape_once stellt sicher, dass, wenn Sie Ihren Code bereits durch Escape-Zeichen geschützt haben, er nicht zusätzlich erneut durch Escape-Zeichen geschützt wird. Damit beispielsweise &amp; nicht zu &amp;amp; wird.

skip_autoescape

skip_autoescape ist nützlich, wenn Ihre Inhalte als HTML verwendet werden sollen. Beispiel: Sie haben ein paar Textabsätze und einige Bilder in den vollständigen Anweisungen für einen Begrenzungsrahmen.

Sparsames Verwenden von skip_autoescape

Die bewährte Methode bei Vorlagen besteht darin, die Übergabe von funktionalem Code oder Markup mit skip_autoescape zu vermeiden, es sei denn, Sie sind absolut sicher, dass Sie strenge Kontrolle darüber haben, was übergeben wird. Wenn Sie Benutzereingaben übergeben, können Sie Ihre Worker einem Cross-Site-Scripting-Angriff aussetzen.

to_json

to_jsonkodiert, was Sie an JSON (JavaScript Object Notation) weitergeben. Wenn Sie ein Objekt bereitstellen, wird dieses serialisiert.

grant_read_access

grant_read_access nimmt einen S3-URI entgegen und codiert ihn in eine HTTPS-URL mit einem kurzlebigen Zugriffstoken für diese Ressource. Dadurch ist es möglich, Workern Foto-, Audio- oder Videoobjekte anzuzeigen, die in S3-Buckets gespeichert sind, auf die nicht anders öffentlich zugegriffen werden kann.

Beispiel der Filter

Eingabe

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

Output

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>
Beispiel einer automatisierten Klassifizierungsvorlage.

Um das einfache Textklassifizierungsbeispiel zu automatisieren, ersetzen Sie den Tweet-Text mit einer Variablen.

Die Textklassifizierungsvorlage befindet sich unten mit hinzugefügter Automatisierung. Die Änderungen/Ergänzungen sind in Fettschrift hervorgehoben.

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

Die Tweet-Text im vorherigen Beispiel wird jetzt durch ein Objekt ersetzt. Das entry.taskInput-Objekt verwendet source (oder einen anderen Namen, den Sie in Ihrem Lambda der Vorverarbeitung angeben) als Eigenschaftennamen für den Text, und es wird direkt in HTML eingefügt, wenn es sich zwischen doppelten geschweiften Klammern befindet.