透過批次區段工作取得使用者區段 - Amazon Personalize

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

透過批次區段工作取得使用者區段

如果您使用 USER _ SEGMENTATION recipe,則可以建立批次區段作業,以使用您的解決方案版本取得使用者區段。每個使用者區段會依據每位使用者與您庫存中的項目互動的可能性,以遞減順序排序。根據配方,您的輸入資料必須是JSON格式的項目 (項目親和性配方) 或項目屬性 (料號-屬性-親和性配方) 清單。您可以使用 Amazon Personalize 主控台 AWS Command Line Interface (AWS CLI) 或建立批次區段任務 AWS SDKs。

建立批次區段任務時,您可以指定到輸入和輸出位置的 Amazon S3 路徑。Amazon S3 是基於前綴的。如果您為輸入資料位置提供前置詞,Amazon Personalize 會使用符合該前置詞的所有檔案作為輸入資料。例如,如果您提供,s3://amzn-s3-demo-bucket/folderName且儲存貯體也有路徑為的資料夾s3://amzn-s3-demo-bucket/folderName_test,Amazon Personalize 會使用這兩個資料夾中的所有檔案作為輸入資料。若只要使用特定資料夾中的檔案作為輸入資料,請以前置碼分隔符號結束 Amazon S3 路徑,例如/:如s3://amzn-s3-demo-bucket/folderName/需 Amazon S3 如何組織物件的詳細資訊,請參閱組織、列出和使用物件

建立批次區段工作 (主控台)

完成後準備批次建議的輸入資料,即可建立批次區段工作。此程序假設您已使用 USER _ SEGEMENTATION 方案建立解決方案和解決方案版本 (訓練過的模型)。

若要建立批次區段工作 (主控台)
  1. https://console.aws.amazon.com/personalize/家中打開 Amazon Personalize 化控制台並登錄到您的帳戶。

  2. 在 [資料集群組] 頁面上,選擇您的資料集群組。

  3. 在導覽窗格中選擇批次區段工作,然後選擇建立批次區段工作

  4. Batch 區段工作詳細資訊中,對於批次區段工作名稱,指定批次區段工作的名稱。

  5. 在 [解決方案] 中,選擇解決方案,然後選擇您要用來產生建議的解決方案版本 ID。只有使用 USER _ SEGEMENTATION 方案時,才能建立批次區段工作。

  6. 對於使用者人數,選擇性地指定 Amazon Personalize 為每個使用者區段產生的使用者數量。預設為 25。最大值是 5 百萬。

  7. 對於輸入來源,請指定輸入檔案的 Amazon S3 路徑,或使用瀏覽 S3 選擇您的 Amazon S3 儲存貯體。

    使用下列語法:s3://amzn-s3-demo-bucket/<folder name>/<input JSON file name>.json

    您的輸入資料必須採用正確的格式,以符合您的解決方案所使用的配方。如需輸入資料範例,請參閱Batch 區段工作輸入和輸出 JSON 範例

  8. 對於輸出目的地,請指定輸出位置的路徑,或使用瀏覽 S3 選擇您的 Amazon S3 儲存貯體。我們建議您為輸出資料使用不同的位置 (資料夾或不同的 Amazon S3 儲存貯體)。

    使用下列語法:s3://amzn-s3-demo-bucket/<output folder name>/

  9. 對於IAM角色,請選擇下列其中一項:

    • 選擇 [建立並使用新的服務角色],然後輸入 [服務角色名稱] 以建立新角色,或

    • 如果您已建立具有正確權限的角色,請選擇 [使用現有的服務角色],然後選擇IAM角色。

    您使用的角色必須分別具有對輸入和輸出 Amazon S3 儲存貯體的讀取和寫入存取權。

  10. 對於篩選器配置,可選擇選擇選擇一個過濾器以將過濾器應用於用戶細分。如果您的篩選器使用預留位置參數,請確定參數的值包含在您的輸入中JSON。如需詳細資訊,請參閱在輸入 JSON 中提供篩選器值

  11. 對於「標籤」,選擇性地新增任何標籤 如需標記 Amazon Personalize 資源的詳細資訊,請參閱標記 Amazon Personalize 化資

  12. 選擇「建立批次區段工作」。Batch 區段工作建立開始,並顯示「Batch 區段工作」頁面,並顯示「Batch 區段工作詳細資訊」區段。

  13. 批次區段任務的狀態變更為作中時,您可以從指定的輸出 Amazon S3 儲存貯體擷取任務的輸出。輸出檔案的名稱格式為 input-name.out

建立批次區段工作 (AWS CLI)

完成之後準備批次建議的輸入資料,您就可以使用下列create-batch-segment-job程式碼建立批次區段工作。指定任務名稱,取代Solution version ARN為您解決方案版本的 Amazon 資源名稱 (ARN),並取IAM service role ARN代為您在ARN設定期間為 Amazon Personalize 建立的IAM服務角色。此角色必須分別具有對您的輸入和輸出 Amazon S3 儲存貯體的讀取和寫入存取權。針對num-results指定您希望 Amazon Personalize 預測每行輸入資料的使用者數量。預設為 25。最大值是 5 百萬。選擇性地提供一個filter-arn來篩選使用者區段。如果您的篩選器使用預留位置參數,請確定參數的值包含在您的輸入中JSON。如需詳細資訊,請參閱篩選批次建議和使用者區段 (自訂資源)

取代S3 input pathS3 output path使用 Amazon S3 路徑到您的輸入檔案和輸出位置。我們建議您為輸出資料使用不同的位置 (資料夾或不同的 Amazon S3 儲存貯體)。輸入和輸出位置使用下列語法:s3://amzn-s3-demo-bucket/<folder name>/<input JSON file name>.jsons3://amzn-s3-demo-bucket/<output folder name>/

aws personalize create-batch-segment-job \ --job-name Job name \ --solution-version-arn Solution version ARN \ --num-results The number of predicted users \ --filter-arn Filter ARN \ --job-input s3DataSource={path=s3://S3 input path} \ --job-output s3DataDestination={path=s3://S3 output path} \ --role-arn IAM service role ARN { "batchSegmentJobArn": "arn:aws:personalize:us-west-2:acct-id:batch-segment-job/batchSegmentJobName" }

建立批次區段工作 (AWS SDKs)

完成之後準備批次建議的輸入資料,您就可以使用該CreateBatchSegmentJob作業建立批次節段工單。下列程式碼顯示如何建立批次區段工作。為任務命名、指定要使用的解決方案版本的 Amazon 資源名稱 (ARN)、ARN為您的 Amazon Personalize IAM 角色指定,以及指定輸入檔案和輸出位置的 Amazon S3 路徑。您的IAM服務角色必須分別具有對輸入和輸出 Amazon S3 儲存貯體的讀取和寫入存取權。

我們建議您為輸出資料使用不同的位置 (資料夾或不同的 Amazon S3 儲存貯體)。輸入和輸出位置使用下列語法:s3://amzn-s3-demo-bucket/<folder name>/<input JSON file name>.jsons3://amzn-s3-demo-bucket/<output folder name>/

針對numResults,指定您希望 Amazon Personalize 預測每行輸入資料的使用者數量。預設為 25。最大值是 5 百萬。選擇性地提供一個filterArn來篩選使用者區段。如果您的篩選器使用預留位置參數,請確定參數的值包含在您的輸入中JSON。如需詳細資訊,請參閱篩選批次建議和使用者區段 (自訂資源)

SDK for Python (Boto3)
import boto3 personalize_rec = boto3.client(service_name='personalize') personalize_rec.create_batch_segment_job ( solutionVersionArn = "Solution version ARN", jobName = "Job name", numResults = 25, filterArn = "Filter ARN", roleArn = "IAM service role ARN", jobInput = {"s3DataSource": {"path": "s3://amzn-s3-demo-bucket/<folder name>/<input JSON file name>.json"}}, jobOutput = {"s3DataDestination": {"path": "s3://amzn-s3-demo-bucket/<output folder name>/"}} )
SDK for Java 2.x
public static String createBatchSegmentJob(PersonalizeClient personalizeClient, String solutionVersionArn, String jobName, String filterArn, int numResults, String s3InputDataSourcePath, String s3DataDestinationPath, String roleArn, String explorationWeight, String explorationItemAgeCutOff) { long waitInMilliseconds = 60 * 1000; String status; String batchSegmentJobArn; try { // Set up data input and output parameters. S3DataConfig inputSource = S3DataConfig.builder() .path(s3InputDataSourcePath) .build(); S3DataConfig outputDestination = S3DataConfig.builder() .path(s3DataDestinationPath) .build(); BatchSegmentJobInput jobInput = BatchSegmentJobInput.builder() .s3DataSource(inputSource) .build(); BatchSegmentJobOutput jobOutputLocation = BatchSegmentJobOutput.builder() .s3DataDestination(outputDestination) .build(); CreateBatchSegmentJobRequest createBatchSegmentJobRequest = CreateBatchSegmentJobRequest.builder() .solutionVersionArn(solutionVersionArn) .filterArn(filterArn) .jobInput(jobInput) .jobOutput(jobOutputLocation) .jobName(jobName) .numResults(numResults) .roleArn(roleArn) .build(); batchSegmentJobArn = personalizeClient.createBatchSegmentJob(createBatchSegmentJobRequest) .batchSegmentJobArn(); DescribeBatchSegmentJobRequest describeBatchSegmentJobRequest = DescribeBatchSegmentJobRequest.builder() .batchSegmentJobArn(batchSegmentJobArn) .build(); long maxTime = Instant.now().getEpochSecond() + 3 * 60 * 60; // wait until the batch segment job is complete. while (Instant.now().getEpochSecond() < maxTime) { BatchSegmentJob batchSegmentJob = personalizeClient .describeBatchSegmentJob(describeBatchSegmentJobRequest) .batchSegmentJob(); status = batchSegmentJob.status(); System.out.println("batch segment job status: " + status); if (status.equals("ACTIVE") || status.equals("CREATE FAILED")) { break; } try { Thread.sleep(waitInMilliseconds); } catch (InterruptedException e) { System.out.println(e.getMessage()); } } return batchSegmentJobArn; } catch (PersonalizeException e) { System.out.println(e.awsErrorDetails().errorMessage()); } return ""; }
SDK for JavaScript v3
// Get service clients module and commands using ES6 syntax. import { CreateBatchSegmentJobCommand } from "@aws-sdk/client-personalize"; import { personalizeClient } from "./libs/personalizeClients.js"; // Or, create the client here. // const personalizeClient = new PersonalizeClient({ region: "REGION"}); // Set the batch segment job's parameters. export const createBatchSegmentJobParam = { jobName: 'NAME', jobInput: { /* required */ s3DataSource: { /* required */ path: 'INPUT_PATH', /* required */ // kmsKeyArn: 'INPUT_KMS_KEY_ARN' /* optional */' } }, jobOutput: { /* required */ s3DataDestination: { /* required */ path: 'OUTPUT_PATH', /* required */ // kmsKeyArn: 'OUTPUT_KMS_KEY_ARN' /* optional */' } }, roleArn: 'ROLE_ARN', /* required */ solutionVersionArn: 'SOLUTION_VERSION_ARN', /* required */ numResults: 20 /* optional */ }; export const run = async () => { try { const response = await personalizeClient.send(new CreateBatchSegmentJobCommand(createBatchSegmentJobParam)); console.log("Success", response); return response; // For unit tests. } catch (err) { console.log("Error", err); } }; run();

處理批次任務可能需要一段時間才能完成。您可以藉由呼叫 DescribeBatchSegmentJob 並傳遞 batchSegmentJobArn 作為輸入參數來檢查任務的狀態。您也可以撥打電話列出 AWS 環境中的所有 Amazon Personalize 批次區段任務ListBatchSegmentJobs