建立預測結果與輸入記錄的關聯性 - Amazon SageMaker

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

建立預測結果與輸入記錄的關聯性

建立大型資料集的預測時,您可以排除預測不需要的屬性。完成預測後,您可以建立一些已排除屬性與這些預測,或與報告中其他輸入資料的關聯性。使用批次轉換來執行這些資料處理步驟,您通常不需要額外的預先處理或後續處理。您只能使用JSON和CSV格式化的輸入檔案。

建立推論與輸入記錄關聯的工作流程

下圖顯示建立推論與輸入記錄關聯性的工作流程。

將推論與輸入記錄相關聯的工作流程。

若要建立推論與輸入資料的關聯性,有三個主要步驟:

  1. 先篩選掉推論不需要的輸入資料,再將輸入資料傳送至批次轉換任務。使用 InputFilter 參數判斷做為模型輸入使用的屬性。

  2. 建立輸入資料與推論結果的關聯性。使用 JoinSource 參數,結合輸入資料與推論。

  3. 篩選掉已加入的資料,保留所需輸入,在報告中提供解譯預測的內容。使用 OutputFilter 將已聯結資料集的指定部分儲存在輸出檔案。

在批次轉換任務中使用資料處理

使用 CreateTransformJob 建立批次轉換工作處理資料時:

  1. DataProcessing 資料結構中使用 InputFilter 參數,指定要傳遞到模型的輸入部分。

  2. 使用轉換的資料和 JoinSource 參數加入原始輸入資料。

  3. 使用 OutputFilter 參數指定在輸出檔中要包含加入輸入和批次換任務轉換資料的哪些部分。

  4. 選擇 JSON-或-CSV 格式化的文件進行輸入:

    • 對於 JSON-或JSON行格式的輸入檔案, SageMaker 可以將SageMakerOutput屬性新增至輸入檔案,或建立具有SageMakerInputSageMakerOutput屬性的新JSON輸出檔案。如需詳細資訊,請參閱DataProcessing

    • 對於CSV格式化的輸入文件,連接的輸入數據後跟轉換後的數據,輸出是一個文CSV件。

如果您使用演算法和 DataProcessing 結構,它必須同時支援您選擇的輸入檔和輸出檔格式。例如,對於的TransformOutput欄位 CreateTransformJobAPI,您必須將ContentTypeAccept參數設定為下列其中一個值:text/csvapplication/json、或application/jsonlines。在檔案中指定欄和指定CSV檔案屬性的JSON語法不同。使用錯誤的語法會造成錯誤。如需詳細資訊,請參閱批次轉換範例。如需內建演算法之輸入和輸出檔格式的詳細資訊,請參閱使用 Amazon SageMaker 內建演算法或預先訓練的模型

輸入和輸出的記錄分隔符號也必須與您選擇的檔案輸入一致。SplitType 參數指出如何分割輸入資料集中的記錄。AssembleWith 參數指出如何重新組合輸出記錄。如果您將輸入和輸出格式設為 text/csv,您還必須將 SplitTypeAssembleWith 參數設為 line。如果將輸入和輸出格式設為 application/jsonlines,您就可以同時將 SplitTypeAssembleWith 設為 line

對於CSV檔案,您不能使用內嵌換行符號。對於JSON檔案,屬性名稱會保留SageMakerOutput供輸出使用。JSON輸入檔案不能具有此名稱的屬性。如有,則可能覆寫輸入檔中的資料。

支援的JSONPath操作

若要篩選並加入輸入資料和推論,請使用JSONPath子運算式。 SageMaker 僅支援已定義JSONPath運算子的子集。下表列出了支持的JSONPath運算符。對於數CSV據,每一行被視為一個數JSON組,所以只有基於索引JSONPaths可以應用$[0],例如$[1:]。CSV數據也應遵循RFC格式

JSONPath運營商 描述 範例
$

查詢的根元素。所有路徑表達式的開頭都必須有此運算子。

$
.<name>

以點標記的子元素。

$.id

*

萬用字元。用以代替屬性名稱或數值。

$.id.*

['<name>' (,'<name>')]

以括號標記的元素或多個子元素。

$['id','SageMakerOutput']

[<number> (,<number>)]

索引或索引陣列。也支援負索引值。-1 索引是指陣列的最後一個元素。

$[1] , $[1,3,5]

[<start>:<end>]

陣列分割運算子。array slice() 方法會擷取陣列的一部分,並傳回新的陣列。如果省略 <start>, SageMaker 使用陣列的第一個元素。如果省略 <end>, SageMaker 使用陣列的最後一個元素。

$[2:5], $[:5], $[2:]

當使用括號表示法來指定特定欄位的多個子元素時,不支援括號內子項的額外巢狀。例如,支援 $.field1.['child1','child2'],但不支援 $.field1.['child1','child2.grandchild']

有關JSONPath運算符的詳細資訊,請參閱中JsonPath的 GitHub。

批次轉換範例

以下範例會示範一些結合輸入資料和預測結果的常見方式。

範例:僅輸出推論

根據預設,DataProcessing 參數不會將推論結果與輸入聯結。它只會輸出推論結果。

如果您想明確指定不與輸入連接結果,請使用 Amazon SageMaker Python SDK 並在轉換器呼叫中指定下列設定。

sm_transformer = sagemaker.transformer.Transformer(…) sm_transformer.transform(…, input_filter="$", join_source= "None", output_filter="$")

若要使用輸出推論 AWS SDK對於 Python,請將以下代碼添加到您的 CreateTransformJob 請求中。以下程式碼模擬預設的行為。

{ "DataProcessing": { "InputFilter": "$", "JoinSource": "None", "OutputFilter": "$" } }

範例:輸出推論聯結輸入資料

如果您使用 Amazon SageMaker Python SDK 將輸入資料與輸出檔案中的推論結合在一起,請在初始化變壓器物件時指定assemble_withaccept參數。使用轉換呼叫時,join_source 參數請指定為 Input,並指定 split_typecontent_type 參數。split_type 參數的值必須與 assemble_with 相同,且 content_type 參數的值必須與 accept 相同。如需有關參數及其接受值的詳細資訊,請參閱 Amazon SageMaker Python 中的「轉換器」頁面SDK。

sm_transformer = sagemaker.transformer.Transformer(…, assemble_with="Line", accept="text/csv") sm_transformer.transform(…, join_source="Input", split_type="Line", content_type="text/csv")

如果您正在使用 AWS SDK對於 Python(Boto 3),通過將以下代碼添加到請求中,將所有輸入數據與推論聯接起來CreateTransformJobAcceptContentType 的值必須相符,且 AssembleWithSplitType 的值也必須相符。

{ "DataProcessing": { "JoinSource": "Input" }, "TransformOutput": { "Accept": "text/csv", "AssembleWith": "Line" }, "TransformInput": { "ContentType": "text/csv", "SplitType": "Line" } }

對於JSON或 L JSON ines 輸入文件,結果在輸入文JSON件中的SageMakerOutput關鍵字中。例如,如果輸入是包含索引鍵值組的JSON檔案{"key":1},則資料轉換結果可能{"label":1}是。

SageMaker將兩者都存儲在SageMakerInput密鑰的輸入文件中。

{ "key":1, "SageMakerOutput":{"label":1} }
注意

的連結結果JSON必須是索引鍵值配對物件。如果輸入不是鍵值對對象,則 SageMaker 創建一個新JSON文件。在新JSON文件中,輸入數據存儲在SageMakerInput密鑰中,並將結果存儲為SageMakerOutput值。

對於一個CSV文件,例如,如果記錄是[1,2,3],並且標籤結果是[1],則輸出文件將包含[1,2,3,1]

範例:與輸入資料結合的輸出推論,並從輸入中排除 ID 欄 () CSV

如果您使用 Amazon SageMaker Python SDK 將輸入資料與推論輸出聯結,同時從變JSONPath壓器輸入中排除 ID 資料行,請從上述範例中指定相同的參數,以及轉換器呼叫input_filter中的子運算式。例如,如果輸入資料包含五個欄,而第一欄是 ID 欄,請使用下列轉換器請求,選取 ID 欄以外的所有資料欄作為功能。轉換器仍會輸出與推論聯結的所有輸入欄。如需有關參數及其接受值的詳細資訊,請參閱 Amazon SageMaker Python 中的「轉換器」頁面SDK。

sm_transformer = sagemaker.transformer.Transformer(…, assemble_with="Line", accept="text/csv") sm_transformer.transform(…, split_type="Line", content_type="text/csv", input_filter="$[1:]", join_source="Input")

如果您正在使用 AWS SDK對於 Python(博托 3),將以下代碼添加到您的 CreateTransformJob請求中。

{ "DataProcessing": { "InputFilter": "$[1:]", "JoinSource": "Input" }, "TransformOutput": { "Accept": "text/csv", "AssembleWith": "Line" }, "TransformInput": { "ContentType": "text/csv", "SplitType": "Line" } }

若要在中指定資料行 SageMaker,請使用陣列元素的索引。第一欄是索引 0,第二欄是索引 1,第六欄是索引 5。

若要排除輸入的首欄,請將 InputFilter 設為 "$[1:]"。冒號(:)告訴 SageMaker 包括兩個值之間的所有元素,包括在內。例如,$[1:4] 指定第二欄到第五欄。

如果您省略冒號後面的數字,例如 [5:],則子集會包含從第六欄到最後一欄的所有欄。如果您省略冒號前面的數字,例如 [:5],則子集會包含從第一欄 (索引 0) 到第六欄的所有欄。

範例:以 ID 欄結合的輸出推論,並從輸入中排除 ID 欄 () CSV

如果您使用的是 Amazon SageMaker Python SDK,則可以output_filter在轉換器呼叫中指定,以指定僅將特定輸入資料行 (例如 ID 資料行) 與推論結合的輸出。output_filter使用JSONPath子運算式來指定在將輸入資料與推論結果聯結之後,要傳回哪些資料行做為輸出。以下請求顯示,如何在排除 ID 欄的同時進行預測,然後將 ID 欄與推論聯結。請注意,在以下範例,輸出的尾欄 (-1) 包含推論。如果您使用的是JSON檔案,則會將推論結果 SageMaker 儲存在屬性SageMakerOutput中。如需有關參數及其接受值的詳細資訊,請參閱 Amazon SageMaker Python 中的「轉換器」頁面SDK。

sm_transformer = sagemaker.transformer.Transformer(…, assemble_with="Line", accept="text/csv") sm_transformer.transform(…, split_type="Line", content_type="text/csv", input_filter="$[1:]", join_source="Input", output_filter="$[0,-1]")

如果您正在使用 AWS SDK對於 Python(博托 3),通過將以下代碼添加到請求中,僅加入與推論的 ID 列。CreateTransformJob

{ "DataProcessing": { "InputFilter": "$[1:]", "JoinSource": "Input", "OutputFilter": "$[0,-1]" }, "TransformOutput": { "Accept": "text/csv", "AssembleWith": "Line" }, "TransformInput": { "ContentType": "text/csv", "SplitType": "Line" } }
警告

如果您使用的是JSON格式化的輸入檔案,則檔案不能包含屬性名稱SageMakerOutput。此屬性名稱預留給輸出檔案中的推論。如果您的 JSON-format 輸入文件包含具有此名稱的屬性,則輸入文件中的值可能會被推論覆蓋。