Template Demo: Maksud Pelabelan dengan crowd-classifier - Amazon SageMaker AI

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Template Demo: Maksud Pelabelan dengan crowd-classifier

Jika Anda memilih templat khusus, Anda akan mencapai panel tugas pelabelan kustom. Di sana Anda dapat memilih dari beberapa templat pemula yang mewakili beberapa tugas yang lebih umum. Template menyediakan titik awal untuk bekerja dalam membangun template tugas pelabelan khusus Anda.

Dalam demonstrasi ini, Anda bekerja dengan template Deteksi Maksud, yang menggunakan crowd-classifier elemen, dan AWS Lambda fungsi yang diperlukan untuk memproses data Anda sebelum dan sesudah tugas.

Templat kustom Deteksi Maksud Pemula

Ini adalah template deteksi maksud yang disediakan sebagai titik awal.

<script src="https://assets.crowd.aws/crowd-html-elements.js"></script> <crowd-form> <crowd-classifier name="intent" categories="{{ task.input.labels | to_json | escape }}" header="Pick the most relevant intention expressed by the below text" > <classification-target> {{ task.input.utterance }} </classification-target> <full-instructions header="Intent Detection Instructions"> <p>Select the most relevant intention expressed by the text.</p> <div> <p><strong>Example: </strong>I would like to return a pair of shoes</p> <p><strong>Intent: </strong>Return</p> </div> </full-instructions> <short-instructions> Pick the most relevant intention expressed by the text </short-instructions> </crowd-classifier> </crowd-form>

Template kustom menggunakan bahasa template Liquid, dan setiap item di antara kurung kurawal ganda adalah variabel. Fungsi AWS Lambda pra-anotasi harus menyediakan objek bernama taskInput dan properti objek tersebut dapat diakses seperti {{ task.input.<property name> }} pada templat Anda.

Templat kustom Deteksi Maksud Anda

Dalam template starter, ada dua variabel: task.input.labels properti di tag pembuka crowd-classifier elemen dan konten task.input.utterance di classification-target wilayah.

Kecuali Anda perlu menawarkan set label yang berbeda dengan ucapan yang berbeda, menghindari variabel dan hanya menggunakan teks akan menghemat waktu pemrosesan dan menciptakan lebih sedikit kemungkinan kesalahan. Template yang digunakan dalam demonstrasi ini akan menghapus variabel itu, tetapi variabel dan filter seperti dijelaskan to_json secara lebih rinci dalam artikel crowd-bounding-boxdemonstrasi.

Styling Elemen Anda

Dua bagian dari elemen khusus yang terkadang diabaikan adalah <short-instructions> wilayah <full-instructions> dan. Instruksi yang baik menghasilkan hasil yang baik.

Dalam elemen yang menyertakan wilayah ini, <short-instructions> muncul secara otomatis di panel “Instruksi” di sebelah kiri layar pekerja. <full-instructions>Ditautkan dari tautan “Lihat instruksi lengkap” di dekat bagian atas panel itu. Mengklik tautan akan membuka panel modal dengan instruksi yang lebih rinci.

Anda tidak hanya dapat menggunakanHTML,CSS, dan JavaScript di bagian ini, Anda didorong untuk jika Anda yakin Anda dapat memberikan serangkaian instruksi dan contoh yang kuat yang akan membantu pekerja menyelesaikan tugas Anda dengan kecepatan dan akurasi yang lebih baik.

contoh Cobalah sampel dengan JSFiddle

GIF example of trying out a sample with JSFiddle.

Cobalah contoh <crowd-classifier> tugas. Contoh diberikan olehJSFiddle, oleh karena itu semua variabel template diganti dengan nilai hard-code. Klik tautan “Lihat instruksi lengkap” untuk melihat serangkaian contoh dengan CSS gaya yang diperluas. Anda dapat melakukan fork proyek untuk bereksperimen dengan perubahan Anda sendiri padaCSS, menambahkan gambar sampel, atau menambahkan JavaScript fungsionalitas yang diperluas.

contoh : Templat Deteksi Maksud Akhir yang Disesuaikan

Ini menggunakan <crowd-classifier>tugas contoh, tetapi dengan variabel untuk<classification-target>. Jika Anda mencoba untuk menjaga CSS desain yang konsisten di antara serangkaian pekerjaan pelabelan yang berbeda, Anda dapat menyertakan stylesheet eksternal menggunakan <link rel...> elemen dengan cara yang sama seperti yang Anda lakukan di dokumen lain. HTML

<script src="https://assets.crowd.aws/crowd-html-elements.js"></script> <crowd-form> <crowd-classifier name="intent" categories="['buy', 'eat', 'watch', 'browse', 'leave']" header="Pick the most relevant intent expressed by the text below" > <classification-target> {{ task.input.source }} </classification-target> <full-instructions header="Emotion Classification Instructions"> <p>In the statements and questions provided in this exercise, what category of action is the speaker interested in doing?</p> <table> <tr> <th>Example Utterance</th> <th>Good Choice</th> </tr> <tr> <td>When is the Seahawks game on?</td> <td> eat<br> <greenbg>watch</greenbg> <botchoice>browse</botchoice> </td> </tr> <tr> <th>Example Utterance</th> <th>Bad Choice</th> </tr> <tr> <td>When is the Seahawks game on?</td> <td> buy<br> <greenbg>eat</greenbg> <botchoice>watch</botchoice> </td> </tr> </table> </full-instructions> <short-instructions> What is the speaker expressing they would like to do next? </short-instructions> </crowd-classifier> </crowd-form> <style> greenbg { background: #feee23; display: block; } table { *border-collapse: collapse; /* IE7 and lower */ border-spacing: 0; } th, tfoot, .fakehead { background-color: #8888ee; color: #f3f3f3; font-weight: 700; } th, td, tfoot { border: 1px solid blue; } th:first-child { border-radius: 6px 0 0 0; } th:last-child { border-radius: 0 6px 0 0; } th:only-child{ border-radius: 6px 6px 0 0; } tfoot:first-child { border-radius: 0 0 6px 0; } tfoot:last-child { border-radius: 0 0 0 6px; } tfoot:only-child{ border-radius: 6px 6px; } td { padding-left: 15px ; padding-right: 15px ; } botchoice { display: block; height: 17px; width: 490px; overflow: hidden; position: relative; background: #fff; padding-bottom: 20px; } botchoice:after { position: absolute; bottom: 0; left: 0; height: 100%; width: 100%; content: ""; background: linear-gradient(to top, rgba(255,255,255, 1) 55%, rgba(255,255,255, 0) 100% ); pointer-events: none; /* so the text is still selectable */ } </style>
contoh : File manifes Anda

Jika Anda menyiapkan file manifes secara manual untuk tugas klasifikasi teks seperti ini, minta data Anda diformat dengan cara berikut.

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

Ini berbeda dari file manifes yang digunakan untuk demonstrasi Template demo: Anotasi gambar dengan crowd-bounding-box "" source-ref yang digunakan sebagai nama properti, bukan. source Penggunaan source-ref menunjuk S3 URIs untuk gambar atau file lain yang harus dikonversi ke. HTTP Jika tidak, source harus digunakan seperti itu dengan string teks di atas.

Fungsi Lambda pra-anotasi Anda

Sebagai bagian dari pengaturan pekerjaan, berikan file AWS Lambda yang ARN dapat dipanggil untuk memproses entri manifes Anda dan meneruskannya ke mesin template.

Fungsi Lambda ini diperlukan untuk memiliki salah satu dari empat string berikut sebagai bagian dari nama fungsi:SageMaker,,Sagemaker, sagemaker atau. LabelingFunction

Ini berlaku untuk Lambdas pra-anotasi dan pasca-anotasi Anda.

Saat Anda menggunakan konsol, jika Anda memiliki Lambda yang dimiliki oleh akun Anda, daftar drop-down fungsi yang memenuhi persyaratan penamaan akan disediakan untuk memilih salah satu.

Dalam contoh yang sangat mendasar ini, di mana Anda hanya memiliki satu variabel, ini terutama fungsi pass-through. Berikut adalah contoh pra-pelabelan Lambda menggunakan Python 3.7.

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

dataObjectProperti event berisi properti dari objek data dalam manifes Anda.

Dalam demonstrasi ini, yang merupakan lintasan sederhana, Anda hanya meneruskannya langsung sebagai taskInput nilainya. Jika Anda menambahkan properti dengan nilai-nilai tersebut ke event['dataObject'] objek, mereka akan tersedia untuk HTML template Anda sebagai variabel Liquid dengan format{{ task.input.<property name> }}.

Fungsi Lambda pasca-anotasi Anda

Sebagai bagian dari pengaturan pekerjaan, sediakan fungsi Lambda yang dapat dipanggil untuk memproses data formulir saat pekerja menyelesaikan tugas. ARN Ini bisa sesederhana atau serumit yang Anda inginkan. Jika Anda ingin melakukan konsolidasi jawaban dan penilaian saat data masuk, Anda dapat menerapkan algoritma penilaian atau konsolidasi pilihan Anda. Jika Anda ingin menyimpan data mentah untuk pemrosesan offline, itu adalah opsi.

Tetapkan izin untuk fungsi Lambda pasca-anotasi Anda

Data anotasi akan berada dalam file yang ditunjuk oleh s3Uri string di payload objek. Untuk memproses anotasi saat masuk, bahkan untuk fungsi pass through sederhana, Anda perlu menetapkan S3ReadOnly akses ke Lambda Anda sehingga dapat membaca file anotasi.

Di halaman Konsol untuk membuat Lambda Anda, gulir ke panel peran Eksekusi. Pilih Buat peran baru dari satu atau beberapa templat. Beri nama peran itu. Dari drop-down Templat kebijakan, pilih izin hanya-baca objek Amazon S3. Simpan Lambda dan peran akan disimpan dan dipilih.

Contoh berikut adalah untuk 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

Output pekerjaan pelabelan Anda

Lambda pasca-anotasi akan sering menerima kumpulan hasil tugas di objek acara. Batch itu akan menjadi payload objek yang harus diulang oleh Lambda.

Anda akan menemukan output pekerjaan di folder yang dinamai setelah pekerjaan pelabelan Anda di bucket S3 target yang Anda tentukan. Ini akan berada di sub folder bernamamanifests.

Untuk tugas deteksi maksud, output dalam manifes keluaran akan terlihat sedikit seperti demo di bawah ini. Contohnya telah dibersihkan dan diberi jarak agar lebih mudah dibaca manusia. Output aktual akan lebih terkompresi untuk pembacaan mesin.

contoh : JSON dalam manifes keluaran Anda
[ { "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>" } } } } }, ... ... ... ]

Ini akan membantu Anda membuat dan menggunakan template kustom Anda sendiri.