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

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

入门 (Amazon CLI)

在本练习中,您将使用 Amazon Command Line Interface (Amazon CLI) 来探索 Amazon Personalize。您创建一个活动,该活动返回给定用户 ID 的电影推荐。

在开始本练习之前,请先执行以下操作:

完成入门练习后,为避免产生不必要的费用,请按照清理资源中的步骤,删除您创建的资源。

注意

本练习中的 Amazon CLI 命令已在 Linux 上进行了测试。有关在 Windows 上使用 Amazon CLI 命令的信息,请参阅《Amazon Command Line Interface 用户指南》中的为 Amazon Command Line Interface指定参数值

按照步骤操作以创建一个数据集组,向此组添加数据集,然后使用电影评级数据填充此数据集。

  1. 通过运行以下命令来创建数据集组。您可以通过传递 Amazon Key Management Service 密钥 ARN 和对该密钥具有访问权限的 IAM 角色的 ARN 作为输入参数来加密数据集组。有关该 API 的更多信息,请参阅CreateDatasetGroup

    aws personalize create-dataset-group --name MovieRatingDatasetGroup --kms-key-arn arn:aws:kms:us-west-2:01234567890:key/1682a1e7-a94d-4d92-bbdf-837d3b62315e --role-arn arn:aws:iam::01234567890:KMS-key-access

    这将显示数据集组 ARN,例如:

    { "datasetGroupArn": "arn:aws:personalize:us-west-2:acct-id:dataset-group/MovieRatingDatasetGroup" }

    使用 describe-dataset-group 命令显示您创建的数据集组,并指定返回的数据集组 ARN。

    aws personalize describe-dataset-group \ --dataset-group-arn arn:aws:personalize:us-west-2:acct-id:dataset-group/MovieRatingDatasetGroup

    这将显示此数据集组及其属性,例如:

    { "datasetGroup": { "name": "MovieRatingDatasetGroup", "datasetGroupArn": "arn:aws:personalize:us-west-2:acct-id:dataset-group/MovieRatingDatasetGroup", "status": "ACTIVE", "creationDateTime": 1542392161.262, "lastUpdatedDateTime": 1542396513.377 } }
    注意

    在数据集组中创建数据集之前,等待该组的 status 显示为“ACTIVE”。此操作通常很快。

    如果您不记得数据集组 ARN,则使用 list-dataset-groups 命令显示您创建的所有数据集组及其 ARN。

    aws personalize list-dataset-groups
    注意

    describe-objectlist-objects 命令适用于大多数 Amazon Personalize 对象。这些命令没有在本练习的其余部分中显示,但它们是可用的。

  2. 通过将以下代码保存到名为 MovieRatingSchema.json 的文件来创建一个 JSON 格式的架构文件。此架构与您之前添加到 ratings.csv 的标题匹配。架构名称为 Interactions,它与 Amazon Personalize 识别的数据集之一匹配。有关更多信息,请参阅 架构

    { "type": "record", "name": "Interactions", "namespace": "com.amazonaws.personalize.schema", "fields": [ { "name": "USER_ID", "type": "string" }, { "name": "ITEM_ID", "type": "string" }, { "name": "TIMESTAMP", "type": "long" } ], "version": "1.0" }
  3. 通过运行以下命令创建架构。指定您在上一个步骤中保存的文件。此示例将该文件显示为属于当前文件夹。有关该 API 的更多信息,请参阅CreateSchema

    aws personalize create-schema \ --name MovieRatingSchema \ --schema file://MovieRatingSchema.json

    这将显示架构 Amazon 资源名称 (ARN),例如:

    { "schemaArn": "arn:aws:personalize:us-west-2:acct-id:schema/MovieRatingSchema" }
  4. 通过运行以下命令来创建一个空数据集。提供之前的步骤中返回的数据集组 ARN 和架构 ARN。dataset-type 必须与上一个步骤中的架构 name 匹配。有关该 API 的更多信息,请参阅CreateDataset

    aws personalize create-dataset \ --name MovieRatingDataset \ --dataset-group-arn arn:aws:personalize:us-west-2:acct-id:dataset-group/MovieRatingDatasetGroup \ --dataset-type Interactions \ --schema-arn arn:aws:personalize:us-west-2:acct-id:schema/MovieRatingSchema

    这将显示数据集 ARN,例如:

    { "datasetArn": "arn:aws:personalize:us-west-2:acct-id:dataset/MovieRatingDatasetGroup/INTERACTIONS" }
  5. 将训练数据添加到数据集。

    1. 通过运行以下命令来创建数据集导入作业。提供之前步骤中返回的数据集 ARN 和 Amazon S3 存储桶名称。提供您在中创建的 Amazon Identity and Access Management (IAM) 角色 ARN。为 Amazon Personalize 创建 IAM 角色有关该 API 的更多信息,请参阅CreateDatasetImportJob

      aws personalize create-dataset-import-job \ --job-name MovieRatingImportJob \ --dataset-arn arn:aws:personalize:us-west-2:acct-id:dataset/MovieRatingDatasetGroup/INTERACTIONS \ --data-source dataLocation=s3://bucketname/ratings.csv \ --role-arn roleArn

      这将显示数据集导入作业 ARN,例如:

      { "datasetImportJobArn": "arn:aws:personalize:us-west-2:acct-id:dataset-import-job/MovieRatingImportJob" }
    2. 通过使用 describe-dataset-import-job 命令来检查状态。提供上一个步骤中返回的数据集导入作业 ARN。有关该 API 的更多信息,请参阅DescribeDatasetImportJob

      aws personalize describe-dataset-import-job \ --dataset-import-job-arn arn:aws:personalize:us-west-2:acct-id:dataset-import-job/MovieRatingImportJob

      这将显示数据集导入作业的属性,包括其状态。最初,status 显示为 CREATE PENDING,例如:

      { "datasetImportJob": { "jobName": "MovieRatingImportJob", "datasetImportJobArn": "arn:aws:personalize:us-west-2:acct-id:dataset-import-job/MovieRatingImportJob", "datasetArn": "arn:aws:personalize:us-west-2:acct-id:dataset/MovieRatingDatasetGroup/INTERACTIONS", "dataSource": { "dataLocation": "s3://<bucketname>/ratings.csv" }, "roleArn": "role-arn", "status": "CREATE PENDING", "creationDateTime": 1542392161.837, "lastUpdatedDateTime": 1542393013.377 } }

      当状态显示为 ACTIVE 时,数据集导入完成。然后,您可以使用指定的数据集来训练模型。

      注意

      导入需要耗费时间。等待数据集导入完成,然后使用数据集训练模型。

要训练模型,您需要使用CreateSolution操作创建用于训练模型的配置,并开启自动训练。该解决方案会在一小时内自动开始训练第一个解决方案。

使用食谱和训练数据来训练模型。Amazon Personalize 提供一组预定义的食谱。有关更多信息,请参阅 选择食谱。在本练习中,您将使用用户个性化-v2 配方。

  1. 通过运行以下命令创建用于训练模型的配置。此命令创建使用自动训练的解决方案。它每七天自动创建一个新的解决方案版本(默认)。

    aws personalize create-solution \ --name MovieSolution \ --dataset-group-arn arn:aws:personalize:us-west-2:acct-id:dataset-group/MovieRatingDatasetGroup \ --recipe-arn arn:aws:personalize:::recipe/aws-user-personalization-v2 \ --perform-auto-training \ --solution-config "{\"autoTrainingConfig\": {\"schedulingExpression\": \"rate(7 days)\"}}"

    这将显示解决方案 ARN,例如:

    { "solutionArn": "arn:aws:personalize:us-west-2:acct-id:solution/MovieSolution" }
  2. 使用 describe-solution 命令检查创建 状态。提供上一步中返回的解决方案 ARN。有关该 API 的更多信息,请参阅DescribeSolution

    aws personalize describe-solution \ --solution-arn arn:aws:personalize:us-west-2:acct-id:solution/MovieSolution

    这将显示解决方案的属性和创建 status。例如:

    { "solution": { "name": "MovieSolution", "solutionArn": "arn:aws:personalize:us-west-2:acct-id:solution/MovieSolution", "performHPO": false, "performAutoML": false, "recipeArn": "arn:aws:personalize:::recipe/aws-user-personalization-v2", "datasetGroupArn": "arn:aws:personalize:us-west-2:acct-id:dataset-group/MovieRatingDatasetGroup", "solutionConfig": { "algorithmHyperParameters": { "apply_recency_bias": "true" }, "featureTransformationParameters": {}, "autoTrainingConfig": { "schedulingExpression": "rate(7 days)" } }, "status": "ACTIVE", "creationDateTime": "2021-05-12T16:27:59.819000-07:00", "lastUpdatedDateTime": "2021-05-12T16:27:59.819000-07:00" } }
  3. 通过自动训练,解决方案版本训练将在解决方案处于活动状态后在一分钟内开始。训练开始后,您可以使用以下ListSolution版本命令获取解决方案版本的 Amazon 资源名称 (ARN):

    aws personalize list-solution-versions --solution-arn arn:aws:personalize:us-west-2:acct-id:solution/MovieSolution
  4. 通过使用 describe-solution-version 命令来检查解决方案版本的训练 状态。提供上一步中返回的解决方案版本 ARN。有关该 API 的更多信息,请参阅DescribeSolutionVersion

    aws personalize describe-solution-version \ --solution-version-arn arn:aws:personalize:us-west-2:acct-id:solution/MovieSolution/version-id

    将显示解决方案版本的属性和训练 status。最初,状态显示为 CREATE PENDING,例如:

    { "solutionVersion": { "solutionVersionArn": "arn:aws:personalize:us-west-2:acct-id:solution/MovieSolution/<version-id>", ..., "status": "CREATE PENDING" } }
  5. 当解决方案版本 status 为活动时,表示训练完成。

    现在,您可以使用解决方案版本,查看训练指标并创建市场活动。

    注意

    训练需要时间。在活动中使用此版本的解决方案之前,等待训练完成(解决方案的训练状态显示为 ACTIVE)。

  6. 您可通过检查解决方案版本的指标来验证解决方案的性能。通过运行以下命令来获取解决方案版本的指标。提供之前返回的解决方案版本 ARN。有关该 API 的更多信息,请参阅GetSolutionMetrics

    aws personalize get-solution-metrics \ --solution-version-arn arn:aws:personalize:us-west-2:acct-id:solution/MovieSolution/version-id

    此时将显示示例响应:

    { "solutionVersionArn": "arn:aws:personalize:us-west-2:acct-id:solution/www-solution/<version-id>", "metrics": { "coverage": 0.0485, "mean_reciprocal_rank_at_25": 0.0381, "normalized_discounted_cumulative_gain_at_10": 0.0363, "normalized_discounted_cumulative_gain_at_25": 0.0984, "normalized_discounted_cumulative_gain_at_5": 0.0175, "precision_at_10": 0.0107, "precision_at_25": 0.0207, "precision_at_5": 0.0107 } }

您必须先部署解决方案版本,然后才能获得建议。部署解决方案也称为创建活动。一旦您创建活动,您的客户端应用程序就可以使用 GetRecommendations API 获得建议。

  1. 通过运行以下命令来创建活动。提供上一步中返回的解决方案版本 ARN。有关该 API 的更多信息,请参阅CreateCampaign

    aws personalize create-campaign \ --name MovieRecommendationCampaign \ --solution-version-arn arn:aws:personalize:us-west-2:acct-id:solution/MovieSolution/version-id \ --min-provisioned-tps 1

    此时将显示示例响应:

    { "campaignArn": "arn:aws:personalize:us-west-2:acct-id:campaign/MovieRecommendationCampaign" }
  2. 通过运行以下命令来检查部署状态。提供上一步中返回的活动 ARN。有关该 API 的更多信息,请参阅DescribeCampaign

    aws personalize describe-campaign \ --campaign-arn arn:aws:personalize:us-west-2:acct-id:campaign/MovieRecommendationCampaign

    此时将显示示例响应:

    { "campaign": { "name": "MovieRecommendationCampaign", "campaignArn": "arn:aws:personalize:us-west-2:acct-id:campaign/MovieRecommendationCampaign", "solutionVersionArn": "arn:aws:personalize:us-west-2:acct-id:solution/MovieSolution/<version-id>", "minProvisionedTPS": "1", "creationDateTime": 1543864775.923, "lastUpdatedDateTime": 1543864791.923, "status": "CREATE IN_PROGRESS" } }
    注意

    在获得来自活动的推荐之前,等待 status 显示为“ACTIVE”。

通过运行 get-recommendations 命令来获得建议。提供上一步中返回的活动 ARN。在请求中,指定电影评级数据集中的用户 ID。有关该 API 的更多信息,请参阅GetRecommendations

注意

并非所有配方都支持 GetRecommendations API。有关更多信息,请参阅 选择食谱

您在此步骤中调用的 Amazon CLI 命令与前面的步骤中调用的命令不同。personalize-runtime

aws personalize-runtime get-recommendations \ --campaign-arn arn:aws:personalize:us-west-2:acct-id:campaign/MovieRecommendationCampaign \ --user-id 123

在响应中,活动将返回用户可能喜欢的物品推荐(电影 ID)的列表。此列表按用户的相关性进行降序排序。

{ "itemList": [ { "itemId": "14" }, { "itemId": "15" }, { "itemId": "275" }, { "itemId": "283" }, { "itemId": "273" }, ... ] }