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

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

创建批量细分作业

如果您使用了 USER_SEGMENTATION 食谱,则可以创建批量细分作业,以获取解决方案版本的用户细分。根据每个用户与您库存物品交互的概率,按降序对每个用户细分进行排序。根据食谱,您的输入数据必须是 JSON 格式的物品列表(Item-Affinity 食谱)或物品属性(Item-Attribute-Affinity 食谱)。您可以使用 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 如何组织对象的更多信息,请参阅组织、列出和处理您的对象

创建批量细分作业(控制台)

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

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

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

  3. 在导航窗格中选择批量细分作业,然后选择创建批量细分作业

  4. 批量细分作业详细信息 中,对于批量细分作业名称,为您的批量细分作业指定一个名称。

  5. 对于解决方案,选择解决方案,然后选择要用于生成建议的解决方案版本 ID。只有使用了 USER_SEGEMENTATION 食谱,您才能创建批量细分作业。

  6. 对于用户数量,可以选择指定 Amazon Personalize 为每个用户细分生成的用户数量。默认值为 25。最大值为 500 万。

  7. 对于输入源,指定输入文件的 Amazon S3 路径,或者使用浏览 S3 选择您的 Amazon S3 存储桶。

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

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

  8. 对于输出目标,指定输出位置的路径,或使用浏览 S3 选择您的 Amazon S3 存储桶。我们建议使用不同的输出数据位置(文件夹或其他 Amazon S3 存储桶)。

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

  9. 对于 IAM 角色,选择下列一个选项:

    • 选择创建和使用新的服务角色,然后输入服务角色名称以创建新角色,或者

    • 如果您已经创建了具有正确权限的角色,请选择使用现有服务角色,并选择 IAM 角色。

    您使用的角色必须分别对您的输入和输出 Amazon S3 存储桶具有读写权限。

  10. 对于筛选器配置,可以选择一个过滤器,将筛选器应用于用户细分。如果您的筛选器使用占位符参数,请确保这些参数的值包含在您的输入 JSON 中。有关更多信息,请参阅 在您的输入 JSON 中提供筛选器值

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

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

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

创建批量细分作业 (Amazon CLI)

完成为批量建议准备输入数据后,就可以使用以下 create-batch-segment-job 代码创建批量细分作业了。指定作业名称,将 Solution version ARN 替换为解决方案版本的 Amazon 资源名称 (ARN),然后将 IAM service role ARN 替换为您在设置期间为 Amazon Personalize 创建的 IAM 服务角色的 ARN。此角色必须分别对您的输入和输出 Amazon S3 存储桶具有读写权限。对于 num-results,指定您希望 Amazon Personalize 为每行输入数据预测的用户数量。默认值为 25。最大值为 500 万。(可选)提供 filter-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>/

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

创建批量区段作业 (Amazon SDK)

完成为批量建议准备输入数据后,就可以通过 CreateBatchSegmentJob 操作创建批量细分作业了。以下代码展示了如何创建批量细分作业。为作业命名,指定要使用的解决方案版本的 Amazon 资源名称 (ARN),为您的 Amazon Personalize IAM 角色指定 ARN,并指定您的输入文件和输出位置的 Amazon S3 路径。您的 IAM 服务角色必须分别对您的输入和输出 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 为每行输入数据预测的用户数量。默认值为 25。最大值为 500 万。(可选)提供 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 = Number of predicted users, filterArn = "Filter ARN", roleArn = "IAM service role ARN", 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
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 作为输入参数来检查作业的状态。您也可以致电列出您 Amazon 环境中的所有 Amazon Personalize 批量细分任务ListBatchSegmentJobs