Persyaratan Fungsi Lambda Pra-anotasi dan Pasca-anotasi - Amazon SageMaker

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.

Data object identified with "source-ref"
{ "version": "2018-10-16", "labelingJobArn": <labelingJobArn> "dataObject" : { "source-ref": <s3Uri> } }
Data object identified with "source"
{ "version": "2018-10-16", "labelingJobArn": <labelingJobArn> "dataObject" : { "source": <string> } }
  • 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 berisi source-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.

Data object identified with "source-ref"
{ "version": "2018-10-16", "labelingJobArn": "arn:aws:sagemaker:<aws_region>:<aws_account_number>:labeling-job/<labeling_job_name>" "dataObject" : { "source-ref": "s3://<input-data-bucket>/<data-object-file-name>" } }
Data object identified with "source"
{ "version": "2018-10-16", "labelingJobArn": "arn:aws:sagemaker:<aws_region>:<aws_account_number>:labeling-job/<labeling_job_name>" "dataObject" : { "source": "Sue purchased 10 shares of the stock on April 10th, 2020" } }

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 TaskAvailabilityLifetimeInSecondstelah tercapai, mana yang lebih dulu, Ground Truth mengirimkan anotasi tersebut ke Lambda pasca-anotasi Anda. Lambda ini umumnya digunakan untuk. Konsolidasi anotasi

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 menyertakan s3Uri 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 menggunakan source kunci (misalnya, string), dataObject termasuk content 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 unik workerId yang dapat digunakan untuk mengidentifikasi pekerja yang mengirimkan anotasi itu. annotationDataKuncinya 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.

Named Entity Recognition Payload
[ { "datasetObjectId": "1", "dataObject": { "content": "Sift 3 cups of flour into the bowl." }, "annotations": [ { "workerId": "private.us-west-2.ef7294f850a3d9d1", "annotationData": { "content": "{\"crowd-entity-annotation\":{\"entities\":[{\"endOffset\":4,\"label\":\"verb\",\"startOffset\":0},{\"endOffset\":6,\"label\":\"number\",\"startOffset\":5},{\"endOffset\":20,\"label\":\"object\",\"startOffset\":15},{\"endOffset\":34,\"label\":\"object\",\"startOffset\":30}]}}" } } ] } ]
Semantic Segmentation Payload
[ { "datasetObjectId": "2", "dataObject": { "s3Uri": "s3://amzn-s3-demo-bucket/gt-input-data/images/bird3.jpg" }, "annotations": [ { "workerId": "private.us-west-2.ab1234c5678a919d0", "annotationData": { "content": "{\"crowd-semantic-segmentation\":{\"inputImageProperties\":{\"height\":2000,\"width\":3020},\"labelMappings\":{\"Bird\":{\"color\":\"#2ca02c\"}},\"labeledImage\":{\"pngImageData\":\"iVBOR...\"}}}" } } ] } ]
Bounding Box Payload
[ { "datasetObjectId": "0", "dataObject": { "s3Uri": "s3://amzn-s3-demo-bucket/gt-input-data/images/bird1.jpg" }, "annotations": [ { "workerId": "private.us-west-2.ab1234c5678a919d0", "annotationData": { "content": "{\"boundingBox\":{\"boundingBoxes\":[{\"height\":2052,\"label\":\"Bird\",\"left\":583,\"top\":302,\"width\":1375}],\"inputImageProperties\":{\"height\":2497,\"width\":3745}}}" } } ] } ]

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 di GitHub repositori aws-sagemaker-ground-truth-recipe. Dalam GitHub contoh ini, Anda harus menambahkan logika konsolidasi anotasi Anda sendiri.

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.