

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

# 入门 (AWS CLI)
<a name="getting-started-cli"></a>

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

在开始本练习之前，请先执行以下操作：
+ 查看入门[入门先决条件](gs-prerequisites.md)。
+ 设置 AWS CLI，如[设置 AWS CLI](aws-personalize-set-up-aws-cli.md)中所述。

完成入门练习后，为避免产生不必要的费用，请删除您创建的资源。有关更多信息，请参阅 [删除 Amazon Personalize 资源的要求](deleting-resources.md)。

**注意**  
本练习中的 AWS CLI 命令在 Linux 上进行了测试。有关在 Windows 上使用 AWS CLI 命令的信息，请参阅《AWS Command Line Interface 用户指南》**中的[为 AWS Command Line Interface 指定参数值](https://docs.aws.amazon.com/cli/latest/userguide/cli-using-param.html)。

## 步骤 1：导入训练数据
<a name="gs-create-ds"></a>

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

1. 通过运行以下命令来创建数据集组。您可以通过传递 [AWS Key Management Service](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html) 密钥 ARN 和对该密钥具有访问权限的 IAM 角色的 ARN 作为输入参数来加密数据集组。有关 API 的更多信息，请参阅[CreateDatasetGroup](API_CreateDatasetGroup.md)。

   ```
   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-object` 和 `list-objects` 命令适用于大多数 Amazon Personalize 对象。这些命令没有在本练习的其余部分中显示，但它们是可用的。

1. 通过将以下代码保存到名为 `MovieRatingSchema.json` 的文件来创建一个 JSON 格式的架构文件。此架构与您之前添加到 `ratings.csv` 的标题匹配。架构名称为 `Interactions`，它与 Amazon Personalize 识别的数据集之一匹配。有关更多信息，请参阅 [为 Amazon Personalize 架构创建架构 JSON 文件](how-it-works-dataset-schema.md)。

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

1. 通过运行以下命令创建架构。指定您在上一个步骤中保存的文件。此示例将该文件显示为属于当前文件夹。有关 API 的更多信息，请参阅[CreateSchema](API_CreateSchema.md)。

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

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

   ```
   {
     "schemaArn": "arn:aws:personalize:us-west-2:acct-id:schema/MovieRatingSchema"
   }
   ```

1. 通过运行以下命令来创建一个空数据集。提供之前的步骤中返回的数据集组 ARN 和架构 ARN。`dataset-type` 必须与上一个步骤中的架构 `name` 匹配。有关 API 的更多信息，请参阅[CreateDataset](API_CreateDataset.md)。

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

1. 将训练数据添加到数据集。

   1. 通过运行以下命令来创建数据集导入作业。提供之前步骤中返回的数据集 ARN 和 Amazon S3 存储桶名称。提供您在[为 Amazon Personalize 创建 IAM 角色](set-up-required-permissions.md#set-up-create-role-with-permissions)中创建的 AWS Identity and Access Management (IAM) 角色 ARN。有关 API 的更多信息，请参阅[CreateDatasetImportJob](API_CreateDatasetImportJob.md)。

      ```
      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://amzn-s3-demo-bucket/ratings.csv \
        --role-arn roleArn
      ```

      这将显示数据集导入作业 ARN，例如：

      ```
      {
        "datasetImportJobArn": "arn:aws:personalize:us-west-2:acct-id:dataset-import-job/MovieRatingImportJob"
      }
      ```

   1. 通过使用 `describe-dataset-import-job` 命令来检查状态。提供上一个步骤中返回的数据集导入作业 ARN。有关 API 的更多信息，请参阅[DescribeDatasetImportJob](API_DescribeDatasetImportJob.md)。

      ```
      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://amzn-s3-demo-bucket/ratings.csv"
            },
            "roleArn": "role-arn",
            "status": "CREATE PENDING",
            "creationDateTime": 1542392161.837,
            "lastUpdatedDateTime": 1542393013.377
        }
      }
      ```

      当状态显示为 ACTIVE 时，数据集导入完成。然后，您可以使用指定的数据集来训练模型。
**注意**  
导入需要耗费时间。等待数据集导入完成，然后使用数据集训练模型。

## 步骤 2：创建解决方案（训练模型）
<a name="gs-create-solution"></a>

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

使用食谱和训练数据来训练模型。Amazon Personalize 提供一组预定义的食谱。有关更多信息，请参阅 [选择食谱](working-with-predefined-recipes.md)。在本练习中，您使用的是 User-Personalization-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"
   }
   ```

1. 使用 `describe-solution` 命令检查*创建* 状态。提供上一步中返回的解决方案 ARN。有关 API 的更多信息，请参阅[DescribeSolution](API_DescribeSolution.md)。

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

1.  通过自动训练，解决方案处于活动状态后，解决方案版本训练将在一小时内开始。训练开始后，您可以通过以下 [ListSolutionVersions](https://docs.aws.amazon.com/personalize/latest/dg/API_ListSolutionVersions.html) 命令获取解决方案版本的 Amazon 资源名称（ARN）：

   ```
   aws personalize list-solution-versions --solution-arn arn:aws:personalize:us-west-2:acct-id:solution/MovieSolution
   ```

1. 通过使用 `describe-solution-version` 命令来检查解决方案版本的*训练* 状态。提供上一步中返回的解决方案版本 ARN。有关 API 的更多信息，请参阅[DescribeSolutionVersion](API_DescribeSolutionVersion.md)。

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

1. 当解决方案版本 `status` 为活动时，表示训练完成。

   现在，您可以使用解决方案版本，查看训练指标并创建市场活动。
**注意**  
训练需要时间。在活动中使用此版本的解决方案之前，等待训练完成（解决方案的*训练*状态显示为 ACTIVE）。

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

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

## 步骤 3：创建市场活动（部署解决方案）
<a name="gs-create-campaign"></a>

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

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

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

1. 通过运行以下命令来检查部署状态。提供上一步中返回的活动 ARN。有关 API 的更多信息，请参阅[DescribeCampaign](API_DescribeCampaign.md)。

   ```
   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”。

## 步骤 4：获得建议
<a name="gs-test"></a>

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

**注意**  
并非所有配方都支持 `GetRecommendations` API。有关更多信息，请参阅 [选择食谱](working-with-predefined-recipes.md)。  
您在此步骤中调用的 AWS 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"
      },
      ...
  ]
}
```