Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Persyaratan Fungsi Lambda Pra-anotasi dan Pasca-anotasi
Gunakan bagian ini untuk mempelajari sintaks permintaan yang dikirim ke fungsi Lambda pra-anotasi dan pasca-anotasi, dan sintaks respons yang dibutuhkan Ground Truth untuk menjalankan alur kerja pelabelan khusus.
Lambda pra-anotasi
Sebelum tugas pelabelan dikirim ke pekerja, fungsi Lambda pra-anotasi Anda dipanggil.
Ground Truth mengirimkan fungsi Lambda Anda permintaan JSON yang diformat untuk memberikan detail tentang pekerjaan pelabelan dan objek data. Tabel berikut berisi skema permintaan pra-anotasi. Setiap parameter dijelaskan di bawah ini.
-
version
(string): Ini adalah nomor versi yang digunakan secara internal oleh Ground Truth. -
labelingJobArn
(string): Ini adalah Nama Sumber Daya Amazon, atauARN, dari pekerjaan pelabelan Anda. Ini ARN dapat digunakan untuk mereferensikan pekerjaan pelabelan saat menggunakan API operasi Ground Truth sepertiDescribeLabelingJob
. -
The
dataObject
(JSONobject): Kunci berisi satu JSON baris, baik dari file manifes masukan Anda atau dikirim dari AmazonSNS. Objek JSON garis dalam manifes Anda dapat berukuran hingga 100 kilobyte dan berisi berbagai data. Untuk pekerjaan anotasi gambar yang sangat mendasar,dataObject
JSON mungkin hanya berisisource-ref
kunci, mengidentifikasi gambar yang akan dianotasi. Jika objek data (misalnya, baris teks) disertakan langsung dalam file manifes masukan, objek data diidentifikasi dengansource
. Jika Anda membuat pekerjaan verifikasi atau penyesuaian, baris ini mungkin berisi data label dan metadata dari pekerjaan pelabelan sebelumnya.
Tabel berikut mencakup contoh blok kode permintaan pra-anotasi. Setiap parameter dalam contoh permintaan ini dijelaskan di bawah tabel tab.
Sebagai imbalannya, Ground Truth membutuhkan respons yang diformat seperti berikut:
contoh dari data pengembalian yang diharapkan
{ "taskInput":
<json object>
, "isHumanAnnotationRequired":<boolean>
# Optional }
Pada contoh sebelumnya, <json object>
kebutuhan untuk memuat semua data yang dibutuhkan template tugas pekerja kustom Anda. Jika Anda melakukan tugas kotak pembatas di mana instruksi tetap sama sepanjang waktu, itu mungkin hanya sumber daya HTTP (S) atau Amazon S3 untuk file gambar Anda. Jika itu adalah tugas analisis sentimen dan objek yang berbeda mungkin memiliki pilihan yang berbeda, itu adalah referensi objek sebagai string dan pilihan sebagai array string.
Implikasi dari isHumanAnnotationRequired
Nilai ini opsional karena defaultnya. true
Kasus penggunaan utama untuk secara eksplisit menyetelnya adalah ketika Anda ingin mengecualikan objek data ini agar tidak diberi label oleh pekerja manusia.
Jika Anda memiliki campuran objek dalam manifes Anda, dengan beberapa memerlukan anotasi manusia dan beberapa tidak membutuhkannya, Anda dapat menyertakan isHumanAnnotationRequired
nilai di setiap objek data. Anda dapat menambahkan logika ke Lambda pra-anotasi Anda untuk menentukan secara dinamis apakah suatu objek memerlukan anotasi, dan menetapkan nilai boolean ini sesuai dengan itu.
Contoh Fungsi Lambda Pra-anotasi
Berikut ini, fungsi Lambda pra-anotasi dasar mengakses JSON objek dataObject
dari permintaan awal, dan mengembalikannya dalam parameter. taskInput
import json def lambda_handler(event, context): return { "taskInput": event['dataObject'] }
Dengan asumsi file manifes masukan digunakan "source-ref"
untuk mengidentifikasi objek data, template tugas pekerja yang digunakan dalam pekerjaan pelabelan yang sama dengan Lambda pra-anotasi ini harus menyertakan elemen Liquid seperti berikut untuk dicerna: dataObject
{{ task.input.source-ref | grant_read_access }}
Jika file manifes masukan digunakan source
untuk mengidentifikasi objek data, template tugas kerja dapat menelan dataObject
dengan yang berikut:
{{ task.input.source }}
Contoh Lambda pra-anotasi berikut mencakup logika untuk mengidentifikasi kunci yang digunakan dalamdataObject
, dan untuk menunjuk ke objek data yang menggunakan dalam pernyataan pengembalian taskObject
Lambda.
import json def lambda_handler(event, context): # Event received print("Received event: " + json.dumps(event, indent=2)) # Get source if specified source = event['dataObject']['source'] if "source" in event['dataObject'] else None # Get source-ref if specified source_ref = event['dataObject']['source-ref'] if "source-ref" in event['dataObject'] else None # if source field present, take that otherwise take source-ref task_object = source if source is not None else source_ref # Build response object output = { "taskInput": { "taskObject": task_object }, "humanAnnotationRequired": "true" } print(output) # If neither source nor source-ref specified, mark the annotation failed if task_object is None: print(" Failed to pre-process {} !".format(event["labelingJobArn"])) output["humanAnnotationRequired"] = "false" return output
Lambda pasca-anotasi
Ketika semua pekerja telah membuat anotasi objek data atau kapan TaskAvailabilityLifetimeInSeconds
telah tercapai, mana yang lebih dulu, Ground Truth mengirimkan anotasi tersebut ke Lambda pasca-anotasi Anda. Lambda ini umumnya digunakan untuk. Konsolidasi anotasi
Tip
Blok kode berikut berisi skema permintaan pasca-anotasi. Setiap parameter dijelaskan dalam daftar berpoin berikut.
{ "version": "2018-10-16", "labelingJobArn":
<string>
, "labelCategories": [<string>
], "labelAttributeName":<string>
, "roleArn" :<string>
, "payload": { "s3Uri":<string>
} }
-
version
(string): Nomor versi yang digunakan secara internal oleh Ground Truth. -
labelingJobArn
(string): Nama Sumber Daya Amazon, atauARN, dari pekerjaan pelabelan Anda. Ini ARN dapat digunakan untuk mereferensikan pekerjaan pelabelan saat menggunakan API operasi Ground Truth sepertiDescribeLabelingJob
. -
labelCategories
(daftar string): Termasuk kategori label dan atribut lain yang Anda tentukan di konsol, atau yang Anda sertakan dalam file konfigurasi kategori label. -
labelAttributeName
(string): Entah nama pekerjaan pelabelan Anda, atau nama atribut label yang Anda tentukan saat Anda membuat pekerjaan pelabelan. -
roleArn
(string): Nama Sumber Daya Amazon (ARN) dari peran IAM eksekusi yang Anda tentukan saat Anda membuat pekerjaan pelabelan. -
payload
(JSONobjek): A JSON yang menyertakans3Uri
kunci, yang mengidentifikasi lokasi data anotasi untuk objek data tersebut di Amazon S3. Blok kode kedua di bawah ini menunjukkan contoh file anotasi ini.
Blok kode berikut berisi contoh permintaan pasca-anotasi. Setiap parameter dalam permintaan contoh ini dijelaskan di bawah blok kode.
contoh dari permintaan Lambda pasca-anotasi
{ "version": "2018-10-16", "labelingJobArn": "arn:aws:sagemaker:us-west-2:111122223333:labeling-job/labeling-job-name", "labelCategories": ["Ex Category1","Ex Category2", "Ex Category3"], "labelAttributeName": "labeling-job-attribute-name", "roleArn" : "arn:aws:iam::111122223333:role/role-name", "payload": { "s3Uri": "s3://amzn-s3-demo-bucket/annotations.json" } }
catatan
Jika tidak ada pekerja yang bekerja pada objek data dan TaskAvailabilityLifetimeInSeconds
telah tercapai, objek data ditandai sebagai gagal dan tidak disertakan sebagai bagian dari pemanggilan Lambda pasca-anotasi.
Blok kode berikut berisi skema payload. Ini adalah file yang ditunjukkan oleh s3Uri
parameter dalam objek permintaan Lambda pasca-anotasi. payload
JSON Misalnya, jika blok kode sebelumnya adalah permintaan Lambda pasca-anotasi, file anotasi berikut berada di. s3://amzn-s3-demo-bucket/annotations.json
Setiap parameter dijelaskan dalam daftar berpoin berikut.
contoh dari file anotasi
[ { "datasetObjectId":
<string>
, "dataObject": { "s3Uri":<string>
, "content":<string>
}, "annotations": [{ "workerId":<string>
, "annotationData": { "content":<string>
, "s3Uri":<string>
} }] } ]
-
datasetObjectId
(string): Mengidentifikasi ID unik yang Ground Truth tetapkan ke setiap objek data yang Anda kirim ke pekerjaan pelabelan. -
dataObject
(JSONobjek): Objek data yang diberi label. Jika objek data disertakan dalam file manifes masukan dan diidentifikasi menggunakansource
kunci (misalnya, string),dataObject
termasukcontent
kunci, yang mengidentifikasi objek data. Jika tidak, lokasi objek data (misalnya, tautan atau S3URI) diidentifikasi dengans3Uri
. -
annotations
(daftar JSON objek): Daftar ini berisi satu JSON objek untuk setiap anotasi yang dikirimkan oleh pekerja untuk itudataObject
. Sebuah JSON objek tunggal berisi unikworkerId
yang dapat digunakan untuk mengidentifikasi pekerja yang mengirimkan anotasi itu.annotationData
Kuncinya berisi salah satu dari yang berikut:-
content
(string): Berisi data anotasi. -
s3Uri
(string): Berisi S3 URI yang mengidentifikasi lokasi data anotasi.
-
Tabel berikut berisi contoh konten yang mungkin Anda temukan di payload untuk berbagai jenis anotasi.
Fungsi Lambda pasca-anotasi Anda mungkin berisi logika yang mirip dengan yang berikut untuk diulang dan mengakses semua anotasi yang terdapat dalam permintaan. Untuk contoh lengkap, lihat annotation_consolidation_lambda.py
for i in range(len(annotations)): worker_id = annotations[i]["workerId"] annotation_content = annotations[i]['annotationData'].get('content') annotation_s3_uri = annotations[i]['annotationData'].get('s3uri') annotation = annotation_content if annotation_s3_uri is None else s3_client.get_object_from_s3( annotation_s3_uri) annotation_from_single_worker = json.loads(annotation) print("{} Received Annotations from worker [{}] is [{}]" .format(log_prefix, worker_id, annotation_from_single_worker))
Tip
Ketika Anda menjalankan algoritma konsolidasi pada data, Anda dapat menggunakan layanan AWS database untuk menyimpan hasil, atau Anda dapat meneruskan hasil yang diproses kembali ke Ground Truth. Data yang Anda kembalikan ke Ground Truth disimpan dalam manifes anotasi terkonsolidasi dalam bucket S3 yang ditentukan untuk output selama konfigurasi tugas pelabelan.
Sebagai imbalannya, Ground Truth membutuhkan respons yang diformat seperti berikut:
contoh dari data pengembalian yang diharapkan
[ { "datasetObjectId":
<string>
, "consolidatedAnnotation": { "content": { "<labelattributename>
": {# ... label content
} } } }, { "datasetObjectId":<string>
, "consolidatedAnnotation": { "content": { "<labelattributename>
": {# ... label content
} } } } . . . ]
Pada titik ini, semua data yang Anda kirim ke bucket S3 Anda, selaindatasetObjectId
, ada di content
objek.
Saat Anda mengembalikan anotasicontent
, ini akan menghasilkan entri dalam manifes keluaran pekerjaan Anda seperti berikut:
contoh dari format label dalam manifes keluaran
{ "source-ref"/"source" : "
<s3uri or content>
", "<labelAttributeName>
": {# ... label content from you
}, "<labelAttributeName>
-metadata": { # This will be added by Ground Truth "job_name":<labelingJobName>
, "type": "groundTruth/custom", "human-annotated": "yes", "creation_date": <date> # Timestamp of when received from Post-labeling Lambda } }
Karena sifat template kustom yang berpotensi kompleks dan data yang dikumpulkannya, Ground Truth tidak menawarkan pemrosesan data lebih lanjut.