本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
註釋前及註釋後 Lambda 函式需求
您可利用本節了解請求語法以便傳送至註釋前及註釋後 Lambda 函式,以及 Ground Truth 執行自訂標籤工作流程所需的回應語法。
註釋前 Lambda
在傳送標籤任務給工作者之前,系統會調用註釋前 Lambda 函式。
Ground Truth 會向您的 Lambda 函數傳送 JSON格式化請求,以提供標籤任務和資料物件的詳細資訊。下表包含註釋前請求結構描述。每個參數如下所述。
-
version
(字串):這是 Ground Truth 內部使用的版本號碼。 -
labelingJobArn
(字串):這是標籤工作的 Amazon Resource Name ARN或 。在使用 Ground Truth API操作時,ARN這可用於參考標籤工作,例如DescribeLabelingJob
。 -
dataObject
(JSON 物件): 金鑰包含單JSON行,無論是從您的輸入資訊清單檔案或從 Amazon 傳送SNS。資訊清單中的JSON行物件大小最多可達 100 KB,且包含各種資料。對於非常基本的影像註釋任務,dataObject
JSON可能僅包含source-ref
金鑰,用於識別要註釋的影像。如資料物件 (例如,一行文字) 直接包含在輸入資訊清單檔案,則會識別資料物件為source
。如您建立驗證或調整工作,則此行可能包含先前標籤工作的標籤資料與中繼資料。
下表包含註釋前請求的程式碼區塊範例。這些範例請求的每個參數都會在標籤式表格下方說明。
作為回報,Ground Truth 需要格式如下的回應:
範例 預期傳回的資料
{ "taskInput":
<json object>
, "isHumanAnnotationRequired":<boolean>
# Optional }
在上述範例,<json object>
需要包含自訂工作者任務範本所需的所有資料。如果您正在執行週框方塊任務,其中指示始終保持不變,它可能只是映像檔案的 HTTP(S) 或 Amazon S3 資源。如果其為情感分析任務,且不同物件可能有不同的選擇,那麼其是做為字串的物件參考、做為字串陣列的選擇。
isHumanAnnotationRequired 的意義
這個值是選用的,因為它預設為 true
。明確設定此值的主要使用案例是,您希望排除此資料物件不被人力工作者標籤。
如果資訊清單中有混合的物件,其中有一些需要人工註釋,而有些則不需要,則您可以在每個資料物件中包含 isHumanAnnotationRequired
值。您可新增邏輯至註釋前 Lambda,以便動態判斷物件是否需要註釋,並相應設定此布林值。
註釋前 Lambda 函式範例
下列基本預先註釋 Lambda 函數dataObject
會從初始請求存取 中的JSON物件,並在 taskInput
參數中傳回物件。
import json def lambda_handler(event, context): return { "taskInput": event['dataObject'] }
假設輸入資訊清單檔案使用 "source-ref"
來識別資料物件,則與此註釋前 Lambda 相同標籤工作所用的工作者任務範本必須包含如下所示的 Liquid 元素才能擷取 dataObject
:
{{ task.input.source-ref | grant_read_access }}
如果輸入資訊清單檔案利用 source
來識別資料物件,則工作任務範本可利用下列內容擷取 dataObject
:
{{ task.input.source }}
下列註釋前 Lambda 範例包含邏輯,可用於識別 dataObject
所用的索引鍵,並使用 Lambda return 陳述式的 taskObject
來指向該資料物件。
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
當所有工作者已註釋資料物件,或在已達到 TaskAvailabilityLifetimeInSeconds
時 (以先發生者為準),Ground Truth 會將這些註釋傳送到您的註釋後 Lambda。此 Lambda 通常用於註釋合併。
提示
若要查看合併後 Lambda 函數的範例,請參閱 aws-sagemaker-ground-truth-recipe
下列程式碼區塊包含註釋後請求結構描述。每個參數皆詳述於下列項目符號清單。
{ "version": "2018-10-16", "labelingJobArn":
<string>
, "labelCategories": [<string>
], "labelAttributeName":<string>
, "roleArn" :<string>
, "payload": { "s3Uri":<string>
} }
-
version
(字串):Ground Truth 內部使用的版本號碼。 -
labelingJobArn
(字串):標籤工作的 Amazon Resource Name ARN或 。在使用 Ground Truth API操作時,ARN這可用於參考標籤工作,例如DescribeLabelingJob
。 -
labelCategories
(字串清單):包括您在主控台指定的標籤類別與其他屬性,或包含在標籤類別組態檔案的標籤類別與其他屬性。 -
labelAttributeName
(字串):標籤工作的名稱,或在建立標籤工作時指定的標籤屬性名稱。 -
roleArn
(字串):您在建立標籤工作時指定的IAM執行角色的 Amazon Resource Name (ARN)。 -
payload
(JSON 物件):包含s3Uri
金鑰JSON的 ,用於識別 Amazon S3 中該資料物件註釋資料的位置。下列第二個程式碼區塊顯示此註釋檔案範例。
下列程式碼區塊包含註釋後請求範例。此範例請求的每個參數都會在程式碼區塊下方說明。
範例 註釋後 Lambda 請求
{ "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" } }
注意
如無工作者處理資料物件,且已達到 TaskAvailabilityLifetimeInSeconds
,則會標記資料物件為失敗,也不會納入註釋後 Lambda 調用。
下列程式碼區塊包含承載結構描述。這是註釋後 Lambda 請求payload
JSON物件中 s3Uri
參數指示的檔案。例如,如先前的程式碼區塊是註釋後 Lambda 請求,則下列註釋檔案位於 s3://amzn-s3-demo-bucket/annotations.json
。
每個參數皆詳述於下列項目符號清單。
範例 註釋檔案
[ { "datasetObjectId":
<string>
, "dataObject": { "s3Uri":<string>
, "content":<string>
}, "annotations": [{ "workerId":<string>
, "annotationData": { "content":<string>
, "s3Uri":<string>
} }] } ]
-
datasetObjectId
(字串):針對您傳送至標籤工作的每個資料物件識別 Ground Truth 向其指派的唯一 ID。 -
dataObject
(JSON 物件):已標記的資料物件。如資料物件包含在輸入資訊清單檔案,且利用source
索引鍵 (例如字串) 加以識別,則dataObject
會包含可識別該資料物件的content
索引鍵。否則,資料物件的位置 (例如,連結或 S3URI) 會以 識別s3Uri
。 -
annotations
(JSON物件清單):此清單包含工作者針對該 提交的每個註釋的單一JSON物件dataObject
。單一JSON物件包含唯一workerId
,可用於識別提交該註釋的工作者。annotationData
索引鍵包含以下其中一項:-
content
(字串):包含註釋資料。 -
s3Uri
(字串):包含URI可識別註釋資料位置的 S3。
-
下表包含在不同類型註釋的承載您可能找到的內容範例。
您的註釋後 Lambda 函式可能包含類似以下內容的邏輯,以便循環檢視並存取請求所包含的所有註釋。如需完整範例,請參閱 aws-sagemaker-ground-truth-recipe
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))
提示
當您執行資料合併演算法時,您可利用 AWS 資料庫服務來儲存結果,或者您可將處理結果傳回 Ground Truth。您傳回 Ground Truth 的資料會儲存在 S3 儲存貯體 (已於標籤工作設定期間指定用於輸出) 的合併註釋清單檔案。
作為回報,Ground Truth 需要格式如下的回應:
範例 預期傳回的資料
[ { "datasetObjectId":
<string>
, "consolidatedAnnotation": { "content": { "<labelattributename>
": {# ... label content
} } } }, { "datasetObjectId":<string>
, "consolidatedAnnotation": { "content": { "<labelattributename>
": {# ... label content
} } } } . . . ]
此時,所有傳送到您 S3 儲存貯體的資料 (除了 datasetObjectId
之外) 位於 content
物件。
當您傳回 content
的註釋時,會在工作輸出資訊清單檔案產生項目,如下所示:
範例 輸出資訊清單中的標籤格式
{ "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 } }
由於自訂範本及其收集的資訊可能相當複雜,因此 Ground Truth 不會針對資料提供進一步處理。