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

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

入门 (Amazon CLI)

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

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

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

注意

这些区域有:Amazon CLI命令在 Linux 上进行了测试。有关使用Amazon CLI命令的信息,请参阅为 指定参数值Amazon Command Line Interface中的Amazon Command Line Interface用户指南

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

  1. 通过运行以下命令来创建数据集组。您可以通过传递Amazon Key Management Service密钥 ARN 和对该密钥具有访问权限的角色的 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 Supply 识别的三种类型的数据集之一匹配。有关更多信息,请参阅数据集和架构

    { "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操作创建用于训练模型的配置。其次,您使用 CreateSolutionVersion操作来训练模型。

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

  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

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

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

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

    这将显示解决方案的属性和创建 status。最初,状态显示为 CREATE PENDING,例如:

    { "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", "datasetGroupArn": "arn:aws:personalize:us-west-2:acct-id:dataset-group/MovieRatingDatasetGroup", "solutionConfig": {}, "status": "ACTIVE", "creationDateTime": "2021-05-12T16:27:59.819000-07:00", "lastUpdatedDateTime": "2021-05-12T16:27:59.819000-07:00" } }
  3. 当解决方案为 ACTIVE 时,通过运行以下命令来训练模型。

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

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

    { "solutionVersionArn": "arn:aws:personalize:us-west-2:acct-id:solution/MovieSolution/<version-id>" }

    检查训练使用解决方案版本的状态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" } }
  4. 当解决方案版本status为 ACTIVE,则训练完成。

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

    注意

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

  5. 您可通过检查解决方案版本的指标来验证解决方案的性能。通过运行以下命令来获取解决方案版本的指标。提供之前返回的解决方案版本 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。有关更多信息,请参阅第 1 步:选择配方

您在此步骤中调用的 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" }, ... ] }