创建批量推理作业 - Amazon Personalize
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

创建批量推理作业

创建批量推理作业,根据 Amazon S3 的输入数据获取针对用户的批量物品建议。输入数据可以是 JSON 格式的用户列表或物品列表(或两者兼而有之)。您可以使用 Amazon Personalize 控制台、 Amazon Command Line Interface (Amazon CLI) 或 Amazon 软件开发工具包创建批量推理作业。

创建批量推理作业时,您可以指定输入和输出位置的 Amazon S3 路径。Amazon S3 基于前缀。如果您为输入数据位置提供前缀,则 Amazon Personalize 会使用与该前缀匹配的所有文件作为输入数据。例如,如果您提供 s3://<name of your S3 bucket>/folderName 且存储桶中还有一个路径为 s3://<name of your S3 bucket>/folderName_test 的文件夹,则 Amazon Personalize 会使用两个文件夹中的所有文件作为输入数据。要仅使用特定文件夹中的文件作为输入数据,请使用前缀分隔符作为 Amazon S3 路径的结尾,例如 /: s3://<name of your S3 bucket>/folderName/。有关 Amazon S3 如何组织对象的更多信息,请参阅组织、列出和处理您的对象

有关 Amazon Personalize 中批量工作流程的更多信息(包括权限要求、建议评分以及准备和导入输入数据),请参阅使用自定义资源获取批量项目推荐

创建批量推理作业(控制台)

完成为批量建议准备输入数据后,就可以创建批量推理作业了。此过程假定您已创建了一个解决方案和一个解决方案版本(经过训练的模型)。

创建批量推理作业(控制台)
  1. 打开 Amazon Personalize 控制台(网址为 https://console.aws.amazon.com/personalize/home),并登录您的账户。

  2. 数据集组页面,选择您的数据集组。

  3. 在导航窗格的自定义资源下,选择批量推理作业

  4. 选择创建批量推理作业

  5. 选择批量推理作业类型。

    • 要生成不带主题的物品建议,请选择物品建议

    • 如果您使用 Similar-Items 配方并想向相似物品组添加描述性主题,请选择内容生成器中带有主题的建议。要生成主题,必须有一个包含物品名称数据和文本数据的物品数据集。有关更多信息,请参阅 内容生成器中带有主题的批量建议

  6. 批量推理作业详细信息批量推理作业名称中,指定批量推理作业的名称。

  7. 对于解决方案,选择解决方案,然后选择要用于生成建议的解决方案版本 ID

  8. 对于结果数量,可以选择为每行输入数据指定建议的数量。默认值为 25。

  9. 如果您的批处理作业生成了带有主题的建议,请在带有主题的建议详细信息中,选择物品数据集中包含物品名称或标题的列。这些数据可以帮助生成更相关的主题。有关更多信息,请参阅 内容生成器中带有主题的批量建议

  10. 输入源中,指定输入文件的 Amazon S3 路径。

    使用以下语法:s3://<name of your S3 bucket>/<folder name>/<input JSON file name>.json

    您的输入数据必须采用与您的解决方案使用的食谱对应的正确格式。有关输入数据的示例,请参阅批量推理作业输入和输出 JSON 示例

  11. 对于解密密钥,如果您使用自己的密 Amazon KMS 钥进行存储桶加密,请指定密钥的 Amazon 资源名称 (ARN)。Amazon Personalize 必须拥有使用您的密钥的权限 有关授予权限的信息,请参阅向 Amazon Personalize 授予使用您 Amazon KMS 密钥的权限

  12. 输出目标中,指定输出位置的路径。我们建议使用不同的输出数据位置(文件夹或其他 Amazon S3 存储桶)。

    使用以下语法:s3://<name of your S3 bucket>/<output folder name>/

  13. 对于加密密钥,如果您使用自己的 Amazon KMS 密钥进行加密,请指定密钥的 ARN。Amazon Personalize 必须拥有使用您的密钥的权限 有关授予权限的信息,请参阅向 Amazon Personalize 授予使用您 Amazon KMS 密钥的权限

  14. 对于 IAM 服务角色,选择您在设置过程中为 Amazon Personalize 创建的 IAM 服务角色。此角色必须分别对您的输入和输出 Amazon S3 存储桶具有读写权限。

  15. 筛选条件中,(可选)选择一个筛选条件,以将筛选条件应用于批量建议。如果您的筛选器使用占位符参数,请确保这些参数的值包含在您的输入 JSON 中。有关更多信息,请参阅 在您的输入 JSON 中提供筛选器值

  16. 对于标签,可以选择添加任何标签。有关标记 Amazon Personalize 资源的更多信息,请参阅为 Amazon Personalize 资源添加标签

  17. 选择创建批量推理作业。此时将开始创建批量推理作业,批量推理作业页面将显示,并显示批量推理作业详细信息部分。

    当批量推理作业的状态更改为活动 时,您可以从指定的输出 Amazon S3 存储桶中检索作业的输出。输出文件的名称将采用 input-name.out 格式。

创建批量推理作业 (Amazon CLI)

完成为批量建议准备输入数据后,就可以通过 CreateBatchInferenceJob 操作创建批量推理作业了。

创建批量推理作业

您可以使用 create-batch-inference-job 命令创建批量推理作业。指定作业名称,将 Solution version ARN 替换为解决方案版本的 Amazon 资源名称 (ARN),然后将 IAM service role ARN 替换为您在设置期间为 Amazon Personalize 创建的 IAM 服务角色的 ARN。此角色必须分别对您的输入和输出 Amazon S3 存储桶具有读写权限。(可选)提供筛选器 ARN 来筛选建议。如果您的筛选器使用占位符参数,请确保这些参数的值包含在您的输入 JSON 中。有关更多信息,请参阅 筛选批量建议和用户细分(自定义资源)

S3 input pathS3 output path 替换为指向您的输入文件和输出位置的 Amazon S3 路径。我们建议使用不同的输出数据位置(文件夹或其他 Amazon S3 存储桶)。对输入和输出位置使用以下语法:s3://<name of your S3 bucket>/<folder name>/<input JSON file name>.jsons3://<name of your S3 bucket>/<output folder name>/

该示例包括可选的 User-Personalization 食谱特定的 itemExplorationConfig 超参数:explorationWeightexplorationItemAgeCutOff。(可选)包括 explorationWeightexplorationItemAgeCutOff 值以配置浏览。有关更多信息,请参阅 User-Personalization 食谱

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\"}}"

创建生成主题的批量推理作业

要为相似的物品生成主题,您必须使用 Similar-Items 配方,并且您的物品数据集必须有一个文本字段和一个物品名称数据列。有关带有主题的建议的更多信息,请参阅内容生成器中带有主题的批量建议

以下代码创建了一个批量推理作业,该作业可生成带有主题的建议。将 batch-inference-job-mode 保留设置为 THEME_GENERATION。将 COLUMN_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\"}}"

创建批量推理作业 (Amazon SDK)

完成为批量建议准备输入数据后,就可以通过 CreateBatchInferenceJob 操作创建批量推理作业了。

创建批量推理作业

可以使用以下代码创建批量推理作业。指定作业名称、解决方案版本的 Amazon 资源名称 (ARN),以及您在设置期间为 Amazon Personalize 创建的 IAM 服务角色的 ARN。此角色必须对您的输入和输出 Amazon S3 存储桶具有读写权限。

我们建议使用不同的输出数据位置(文件夹或其他 Amazon S3 存储桶)。对输入和输出位置使用以下语法:s3://<name of your S3 bucket>/<folder name>/<input JSON file name>.jsons3://<name of your S3 bucket>/<output folder name>/

对于 numResults,指定您希望 Amazon Personalize 为每行输入数据预测的物品数量。(可选)提供筛选器 ARN 来筛选建议。如果您的筛选器使用占位符参数,请确保这些参数的值包含在您的输入 JSON 中。有关更多信息,请参阅 筛选批量建议和用户细分(自定义资源)

SDK for Python (Boto3)

该示例包括可选的 User-Personalization 食谱特定的 itemExplorationConfig 超参数:explorationWeightexplorationItemAgeCutOff。(可选)包括 explorationWeightexplorationItemAgeCutOff 值以配置浏览。有关更多信息,请参阅 User-Personalization 食谱

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://<name of your S3 bucket>/<folder name>/<input JSON file name>.json"}}, jobOutput = {"s3DataDestination": {"path": "s3://<name of your S3 bucket>/<output folder name>/"}} )
SDK for Java 2.x

该示例包括可选的 User-Personalization 食谱特定的 itemExplorationConfig 字段:explorationWeightexplorationItemAgeCutOff。(可选)包括 explorationWeightexplorationItemAgeCutOff 值以配置浏览。有关更多信息,请参阅 User-Personalization 食谱

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: { /* 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 integer*/ }; 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 作为输入参数来检查作业的状态。您也可以通过调ListBatchInferenceJobs用列出您 Amazon 环境中的所有 Amazon Personalize 批量推理作业。

创建生成主题的批量推理作业

要为相似的物品生成主题,您必须使用 Similar-Items 配方,并且您的物品数据集必须有一个文本字段和一个物品名称数据列。有关带有主题的建议的更多信息,请参阅内容生成器中带有主题的批量建议

以下代码创建了一个批量推理作业,该作业可生成带有主题的建议。将 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://<name of your S3 bucket>/<folder name>/<input JSON file name>.json"}}, jobOutput = {"s3DataDestination": {"path": "s3://<name of your S3 bucket>/<output folder name>/"}} )