開始方法 (AWS CLI) - Amazon Personalize

開始方法 (AWS CLI)

この演習では、AWS Command Line Interface (AWS CLI) を使用して Amazon Personalize を詳しく学びます。映画のレコメンデーションを特定のユーザー ID に返すキャンペーンを作成します。

この演習を開始する前に、以下を実行します。

開始方法の演習を完了したら、不要な料金が発生しないように、作成したリソースを削除します。詳細については、「Amazon Personalize リソースを削除するための要件」を参照してください。

注記

この演習の AWS CLI コマンドは Linux でテストされています。Windows での AWS CLI コマンドの使用については、AWS Command Line Interface ユーザーガイドの「AWS Command Line Interface のパラメータ値の指定」を参照してください。

次の手順に従って、データセットグループを作成し、このグループにデータセットを追加します。次に、映画のレーティングデータを使用してデータセットを事前設定します。

  1. 次のコマンドを実行してデータセットグループを作成します。データセットグループを暗号化するには、AWS 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" }

    作成したデータセットグループを表示するには、返されたデータセットグループの ARN を指定して、describe-dataset-group コマンドを使用します。

    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 オブジェクトで使用できます。これらのコマンドは、この演習で以後取り扱いませんが、いつでも使用可能です。

  2. 次のコードを MovieRatingSchema.json という名前のファイルに保存して、スキーマファイルを JSON 形式で作成します。スキーマは、以前に ratings.csv に追加したヘッダーと一致します。スキーマ名である Interactions は、Amazon Personalize で認識されるデータセットの種類の 1 つと一致します。詳細については、「Amazon Personalize スキーマのスキーマ JSON ファイルの作成」を参照してください。

    { "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 Personalize 向けの IAM ロールの作成 で作成した AWS Identity and Access Management (IAM) ロールの ARN を指定します。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://amzn-s3-demo-bucket/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://amzn-s3-demo-bucket/ratings.csv" }, "roleArn": "role-arn", "status": "CREATE PENDING", "creationDateTime": 1542392161.837, "lastUpdatedDateTime": 1542393013.377 } }

      ステータスが ACTIVE と表示されると、データセットのインポートが完了します。これで、指定したデータセットを使用してモデルをトレーニングする準備が整いました。

      注記

      インポートには時間がかかります。データセットのインポートが完了するまで待ってから、データセットを使用してモデルのトレーニングを開始します。

モデルをトレーニングするには、CreateSolution オペレーションを使用してモデルをトレーニングするための設定を作成し、自動トレーニングをオンのままにします。ソリューションは 1 時間以内に最初のソリューションのトレーニングを自動的に開始します。

レシピとトレーニングデータを使用してモデルをトレーニングします。Amazon Personalize は、事前定義された一連のレシピを提供します。詳細については、「レシピの選択」を参照してください。この演習では、User-Personalization-v2 レシピを使用します。

  1. モデルトレーニングの設定を作成するには、次のコマンドを実行します。このコマンドは、自動トレーニングを使用するソリューションを作成します。7 日ごと (デフォルト) に新しいソリューションバージョンが自動的に作成されます。

    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 コマンドを使用して [create] (作成) のステータスを確認します。前のステップで返されたソリューションの 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. 自動トレーニングでは、ソリューションバージョントレーニングは、ソリューションがアクティブになってから 1 時間以内に開始されます。トレーニングの開始後、次の ListSolutionVersions コマンドを使用して、ソリューションバージョンの Amazon リソースネーム (ARN) を取得できます。

    aws personalize list-solution-versions --solution-arn arn:aws:personalize:us-west-2:acct-id:solution/MovieSolution
  4. describe-solution-version コマンドを使用して、ソリューションバージョンの [training] (トレーニング) ステータスを確認します。前のステップで返ったソリューションバージョンの 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 になったら、トレーニングは完了です。

    これで、トレーニングメトリクスを確認し、ソリューションバージョンを使用してキャンペーンを作成できます。

    注記

    トレーニングには時間がかかります。トレーニングが完了する (ソリューションバージョンのトレーニングのステータスが 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 がサポートされているわけではありません。詳細については、「レシピの選択」を参照してください。

このステップで呼び出す 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" }, ... ] }