建立批次推論任務 - Amazon Personalize

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

建立批次推論任務

建立批次推論任務,以根據 Amazon S3 的輸入資料取得使用者的批次項目建議。輸入資料可以是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 如何組織物件的詳細資訊,請參閱整理、列出和使用您的物件

如需 Amazon Personalize 中批次工作流程的詳細資訊,包括許可要求、建議評分,以及準備和匯入輸入資料,請參閱 使用自訂資源取得批次項目建議

建立批次推論任務 (主控台)

完成 後準備批次建議的輸入資料,您就可以建立批次推論任務。此程序假設您已建立解決方案和解決方案版本 (訓練模型)。

建立批次推論任務 (主控台)
  1. https://console.aws.amazon.com/personalize/在家中開啟 Amazon Personalize 主控台並登入您的帳戶。

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

  3. 在導覽窗格中的自訂資源下,選擇批次推論任務

  4. 選擇 Create batch inference job (建立批次推論任務)

  5. 選擇批次推論任務類型。

    • 若要產生不含主題的項目建議,請選擇項目建議

    • 如果您使用類似項目配方,並想要將描述性主題新增至類似項目的群組,請使用內容產生器選擇主題建議。若要產生主題,您必須具有項目名稱資料和文字資料的項目資料集。如需詳細資訊,請參閱包含內容生成器主題的 Batch 推薦

  6. Batch inference job details (批次推論任務詳細資訊)Batch inference job name (批次推論任務名稱) 中,指定批次推論任務的名稱。

  7. 針對解決方案,選擇解決方案,然後選擇您要用來產生建議的解決方案版本 ID

  8. 針對結果數目,選擇性地指定每行輸入資料的建議數目。預設為 25。

  9. 如果您的批次任務產生具有主題的建議,請在主題建議詳細資訊中選擇包含項目資料集中項目名稱或標題的資料欄。此資料有助於產生更相關的主題。如需詳細資訊,請參閱包含內容生成器主題的 Batch 推薦

  10. 輸入來源中,指定輸入檔案的 Amazon S3 路徑。

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

    您的輸入資料必須為解決方案使用的配方的正確格式。如需輸入資料範例,請參閱 批次推論任務輸入和輸出JSON範例

  11. 對於解密金鑰,如果您使用自己的 AWS KMS 金鑰進行儲存貯體加密,請指定金鑰的 Amazon Resource Name (ARN)。Amazon Personalize 必須具有使用您的金鑰的許可。如需授予許可的詳細資訊,請參閱授予亞馬遜個性化許可以使用您的AWS KMS密鑰

  12. 輸出目的地中,指定輸出位置的路徑。我們建議您使用不同的輸出資料位置 (資料夾或不同的 Amazon S3 儲存貯體)。

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

  13. 對於加密金鑰,如果您使用自己的 AWS KMS 金鑰進行加密,請指定金鑰ARN的 。Amazon Personalize 必須具有使用您的金鑰的許可。如需授予許可的詳細資訊,請參閱授予亞馬遜個性化許可以使用您的AWS KMS密鑰

  14. 針對IAM服務角色,選擇您在設定期間為 Amazon Personalize 建立IAM的服務角色。此角色必須分別具有輸入和輸出 Amazon S3 儲存貯體的讀取和寫入存取權。

  15. 篩選條件中,選擇性地選擇要將篩選條件套用至批次建議的篩選條件。如果您的篩選條件使用預留位置參數,請確定參數的值包含在您的輸入 中JSON。如需詳細資訊,請參閱在輸入中提供篩選條件值 JSON

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

  17. 選擇 Create batch inference job (建立批次推論任務)。即會開始建立批次推論任務,並出現 Batch inference jobs (批次推論任務) 頁面,其中顯示 Batch inference job detail (批次推論任務詳細資訊) 區段。

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

建立批次推論任務 (AWS CLI)

完成 後準備批次建議的輸入資料,您就可以使用 CreateBatchInferenceJob操作建立批次推論任務。

建立批次推論任務

您可以使用 create-batch-inference-job命令來建立批次推論任務。指定任務名稱、Solution version ARN將 取代為您解決方案版本的 Amazon Resource Name (ARN),並將 取代IAM service role ARN為您在設定期間為 Amazon Personalize 建立之IAM服務角色ARN的 。此角色必須分別具有輸入和輸出 Amazon S3 儲存貯體的讀取和寫入存取權。選擇性地提供篩選條件ARN來篩選建議。如果您的篩選條件使用預留位置參數,請確定參數的值包含在您的輸入 中JSON。如需詳細資訊,請參閱篩選批次建議和使用者區段 (自訂資源)

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

此範例包含選用的使用者個人化配方特定itemExplorationConfig超參數: explorationWeightexplorationItemAgeCutOff。選擇性地包含 explorationWeightexplorationItemAgeCutOff值來設定探勘。如需詳細資訊,請參閱使用者個人化配方

aws personalize create-batch-inference-job \ --job-name Batch job name \ --solution-version-arn Solution version ARN \ --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 \ --batch-inference-job-config "{\"itemExplorationConfig\":{\"explorationWeight\":\"0.3\",\"explorationItemAgeCutOff\":\"30\"}}"

建立產生主題的批次推論任務

若要產生類似項目的主題,您必須使用類似項目配方,且您的項目資料集必須具有文字欄位和項目名稱資料欄。如需 主題建議的詳細資訊,請參閱 包含內容生成器主題的 Batch 推薦

下列程式碼會建立批次推論任務,以產生具有主題的建議。將 batch-inference-job-mode 設定為 THEME_GENERATIONCOLUMN_NAME 將 取代為存放項目名稱資料的欄名稱。

aws personalize create-batch-inference-job \ --job-name Themed batch job name \ --solution-version-arn Solution version ARN \ --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 \ --batch-inference-job-mode THEME_GENERATION \ --theme-generation-config "{\"fieldsForThemeGeneration\": {\"itemName\":\"COLUMN_NAME\"}}"

建立批次推論任務 (AWS SDKs)

完成 後準備批次建議的輸入資料,您就可以使用 CreateBatchInferenceJob操作建立批次推論任務。

建立批次推論任務

您可以使用下列程式碼來建立批次推論任務。指定任務名稱、解決方案版本的 Amazon Resource Name (ARN),以及您在設定期間為 Amazon Personalize 建立ARNIAM的服務角色。此角色必須具有輸入和輸出 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 為每個輸入資料行預測的項目數量。選擇性地提供篩選條件ARN來篩選建議。如果您的篩選條件使用預留位置參數,請確定參數的值包含在您的輸入 中JSON。如需詳細資訊,請參閱篩選批次建議和使用者區段 (自訂資源)

SDK for Python (Boto3)

此範例包含選用的使用者個人化配方特定itemExplorationConfig超參數: explorationWeightexplorationItemAgeCutOff。選擇性地包含 explorationWeightexplorationItemAgeCutOff值來設定探勘。如需詳細資訊,請參閱使用者個人化配方

import boto3 personalize_rec = boto3.client(service_name='personalize') personalize_rec.create_batch_inference_job ( solutionVersionArn = "Solution version ARN", jobName = "Batch job name", roleArn = "IAM service role ARN", filterArn = "Filter ARN", batchInferenceJobConfig = { # optional USER_PERSONALIZATION recipe hyperparameters "itemExplorationConfig": { "explorationWeight": "0.3", "explorationItemAgeCutOff": "30" } }, 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

此範例包含選用的使用者個人化配方特定itemExplorationConfig欄位: explorationWeightexplorationItemAgeCutOff。選擇性地包含 explorationWeightexplorationItemAgeCutOff值來設定探勘。如需詳細資訊,請參閱使用者個人化配方

public static String createPersonalizeBatchInferenceJob(PersonalizeClient personalizeClient, String solutionVersionArn, String jobName, String filterArn, String s3InputDataSourcePath, String s3DataDestinationPath, String roleArn, String explorationWeight, String explorationItemAgeCutOff) { long waitInMilliseconds = 60 * 1000; String status; String batchInferenceJobArn; try { // Set up data input and output parameters. S3DataConfig inputSource = S3DataConfig.builder() .path(s3InputDataSourcePath) .build(); S3DataConfig outputDestination = S3DataConfig.builder() .path(s3DataDestinationPath) .build(); BatchInferenceJobInput jobInput = BatchInferenceJobInput.builder() .s3DataSource(inputSource) .build(); BatchInferenceJobOutput jobOutputLocation = BatchInferenceJobOutput.builder() .s3DataDestination(outputDestination) .build(); // Optional code to build the User-Personalization specific item exploration config. HashMap<String, String> explorationConfig = new HashMap<>(); explorationConfig.put("explorationWeight", explorationWeight); explorationConfig.put("explorationItemAgeCutOff", explorationItemAgeCutOff); BatchInferenceJobConfig jobConfig = BatchInferenceJobConfig.builder() .itemExplorationConfig(explorationConfig) .build(); // End optional User-Personalization recipe specific code. CreateBatchInferenceJobRequest createBatchInferenceJobRequest = CreateBatchInferenceJobRequest.builder() .solutionVersionArn(solutionVersionArn) .jobInput(jobInput) .jobOutput(jobOutputLocation) .jobName(jobName) .filterArn(filterArn) .roleArn(roleArn) .batchInferenceJobConfig(jobConfig) // Optional .build(); batchInferenceJobArn = personalizeClient.createBatchInferenceJob(createBatchInferenceJobRequest) .batchInferenceJobArn(); DescribeBatchInferenceJobRequest describeBatchInferenceJobRequest = DescribeBatchInferenceJobRequest.builder() .batchInferenceJobArn(batchInferenceJobArn) .build(); long maxTime = Instant.now().getEpochSecond() + 3 * 60 * 60; // wait until the batch inference job is complete. while (Instant.now().getEpochSecond() < maxTime) { BatchInferenceJob batchInferenceJob = personalizeClient .describeBatchInferenceJob(describeBatchInferenceJobRequest) .batchInferenceJob(); status = batchInferenceJob.status(); System.out.println("Batch inference 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 batchInferenceJobArn; } catch (PersonalizeException e) { System.out.println(e.awsErrorDetails().errorMessage()); } return ""; }
SDK for JavaScript v3
// Get service clients module and commands using ES6 syntax. import { CreateBatchInferenceJobCommand } 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 inference job's parameters. export const createBatchInferenceJobParam = { jobName: "JOB_NAME", jobInput: { s3DataSource: { path: "INPUT_PATH", }, }, jobOutput: { s3DataDestination: { path: "OUTPUT_PATH", }, }, roleArn: "ROLE_ARN", solutionVersionArn: "SOLUTION_VERSION_ARN", numResults: 20, }; export const run = async () => { try { const response = await personalizeClient.send( new CreateBatchInferenceJobCommand(createBatchInferenceJobParam), ); console.log("Success", response); return response; // For unit tests. } catch (err) { console.log("Error", err); } }; run();

處理批次任務可能需要一段時間才能完成。您可以藉由呼叫 DescribeBatchInferenceJob 並傳遞 batchRecommendationsJobArn 作為輸入參數來檢查任務的狀態。您也可以呼叫 ,列出 AWS 環境中所有 Amazon Personalize 批次推論任務ListBatchInferenceJobs

建立產生主題的批次推論任務

若要產生類似項目的主題,您必須使用類似項目配方,且您的項目資料集必須具有文字欄位和項目名稱資料欄。如需 主題建議的詳細資訊,請參閱 包含內容生成器主題的 Batch 推薦

下列程式碼會建立批次推論任務,以產生具有主題的建議。將 batchInferenceJobMode 集保留為 "THEME_GENERATION"COLUMNN_NAME 以存放項目名稱資料的欄名稱取代 。

import boto3 personalize_rec = boto3.client(service_name='personalize') personalize_rec.create_batch_inference_job ( solutionVersionArn = "Solution version ARN", jobName = "Batch job name", roleArn = "IAM service role ARN", filterArn = "Filter ARN", batchInferenceJobMode = "THEME_GENERATION", themeGenerationConfig = { "fieldsForThemeGeneration": { "itemName": "COLUMN_NAME" } }, 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>/"}} )