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

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

创建批量分段任务

如果您使用 USER_SEGUMENTION 配方,则可以创建批处理区段作业以获取解决方案版本中的用户细分。根据每个用户与库存中商品互动的概率,每个用户细分按降序排序。根据配方的不同,输入数据必须是物品列表(物品亲和力食谱) 或物品属性 (物品属性-亲和力食谱) 以 JSON 格式。您可以使用 Amazon Personalize 化控制台创建批处理细分任务Amazon Command Line Interface(Amazon CLI),或Amazon开发工具包。

有关 Amazon Personalize 中批处理工作流程的更多信息,包括权限要求以及准备和导入输入数据,请参阅获取批量推荐和用户细分.

创建批量分段任务(控制台)

完成之后准备和导入批量输入数据,您已准备好创建批量分段任务。此过程假定您已经使用 Item-Affinity 配方创建解决方案和解决方案版本(训练模型)。

要获取创建批量分段任务(控制台)

  1. 在打开 Amazon Personalize 控制台https://console.aws.amazon.com/personalize/home然后登录您的账户。

  2. 在存储库的数据集组页面中,选择数据集组。

  3. 选择批量分段任务在导航窗格中,选择创建批处理细分作业.

  4. In批处理细分作业详情,对于Batch 区段作业名称中,为批量分段任务指定一个名称。

  5. 适用于解决方案,选择解决方案然后选择解决方案版本 ID要使用它来生成推荐。只有在使用 USER_SEGENTIONAL 配方时,才能创建批处理区段作业。

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

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

    使用下面的语法:s3://<name of your S3 bucket>/<folder name>/<input JSON file name>

    您的输入数据必须采用解决方案使用的配方的正确格式。有关输入数据示例请参阅输入和输出 JSON 示例.

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

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

  9. 适用于IAM 角色,选择以下选项之一:

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

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

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

  10. 适用于筛选条件(可选)选择一个筛选器,将筛选器应用于添加到输出 JSON 文件的推荐。有关更多信息,请参阅筛选批处理推荐和用户细分.

  11. 适用于标签(可选)添加任何标签。有关标记 Amazon Personalize 资源的更多信息,请参阅为 AAmazon Personalize son.

  12. 选择创建批处理细分作业. Batch 细分工作创建开始,Batch 分段任务此时将显示页面Batch 细分作业详情显示的部分。

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

创建批量分段任务 (Amazon CLI)

完成之后准备和导入批量输入数据,您已准备好使用以下命令创建批量分段任务create-batch-segment-job代码。指定作业名称,替换Solution version ARN使用解决方案版本的 Amazon 资源名称 (ARN),然后将IAM service role ARN使用您在设置过程中为 Amazon Persation (个性化) 创建的 IAM 服务角色的 ARN。此角色必须分别对您的输入和输出 Amazon S3 存储桶拥有读写访问权限。适用于num-results指定您希望 Amazon Personalize 化为每行输入数据预测的用户数量。

ReplaceS3 input pathS3 output path使用指向输入文件和输出位置的 Amazon S3 路径。我们建议您的输出数据使用不同的位置(文件夹或其他 Amazon S3 存储桶)。您可以对添加到输出 JSON 文件的推荐应用过滤器。有关更多信息,请参阅筛选批处理推荐和用户细分.

对于输入和输出位置使用以下语法:s3://<name of your S3 bucket>/<folder name>/<input JSON file name>s3://<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 \ --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开发工具包)

完成之后准备和导入批量输入数据,您已准备好使用CreateBatchSegmentJoboperation. 以下代码显示如何使用Amazon SDK for Python (Boto3)要么Amazon SDK for Java 2.x.

对于输入和输出位置使用以下语法:s3://<name of your S3 bucket>/<folder name>/<input JSON file name>s3://<name of your S3 bucket>/<output folder name>/.

SDK for Python (Boto3)

使用以下命令create_batch_segment_job创建批量分段任务的代码。指定Job name,替换Solution version ARN使用解决方案版本的 Amazon 资源名称 (ARN),然后将IAM service role ARN使用您在设置过程中为 Amazon Persation (个性化) 创建的 IAM 服务角色的 ARN。此角色必须分别对您的输入和输出 Amazon S3 存储桶拥有读写访问权限。适用于numResults指定您希望 Amazon Personalize 化为每行输入数据预测的用户数量。

使用指向输入文件和输出位置的 Amazon S3 路径替换 Amazon S3 数据源和数据目标。我们建议您的输出数据使用不同的位置(文件夹或其他 Amazon S3 存储桶)。您可以对添加到输出 JSON 文件的推荐应用过滤器。有关更多信息,请参阅筛选批处理推荐和用户细分.

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

使用以下命令createBatchSegmentJob创建批量分段任务的方法。将以下内容作为参数传递:Amazon Personalize 化服务客户端、解决方案版本的 ARN(亚马逊资源名称)、作业的名称、每行输入数据所需的预测用户数 (numResults)、存储输入数据的 Amazon S3 位置 (s3InputDataSourcepath)、bucket-name/folder name输出数据位置(s3datadeStinationPath)以及服务相关角色的 ARN(请参阅创建 IAM 角色)。我们建议您的输出数据使用不同的位置(文件夹或其他 Amazon S3 存储桶)。

public static String createBatchSegmentJob(PersonalizeClient personalizeClient, String solutionVersionArn, String jobName, 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) .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 ""; }

处理批处理作业可能需要一段时间才能完成。您可以通过调用 DescribeBatchSegmentJob 和传递 batchSegmentJobArn 作为输入参数来检查作业的状态。您还可以在您的Amazon通过调用环境ListBatchSegmentJobs.