AWS Amazon Personalizeでレコメンド機能を作成(ドメインデータセットグループ編)


Amazon Personalizeとは

Amazon.com がリアルタイムのパーソナライズされたレコメンデーションに使用するのと同じ機械学習 (ML) テクノロジーを使用してアプリケーションを構築できます。ML の専門知識は必要ありません。

事前設定

それでは設定していきます。

今回は下記の公式サイトのドメインデータセットグループのチュートリアルに沿って設定を行います。

https://docs.aws.amazon.com/ja_jp/personalize/latest/dg/gs-prerequisites.html

このチュートリアルでは、600 名のユーザーからの 9,700 本の映画に対する 100,000 件のレーティングで構成される履歴データを使用します。

トレーニングデータのアップロード

MovieLensからml-latest-small.zipをダウンロードしてして解凍します。

ratings.csvを開き、下記の編集をします。

  • rating列の削除
  • userIdとmovieIdの列の名前をそれぞれUSER_IDITEM_IDに変更します。
  • EVENT_TYPE列を追加して、全てのレコードの値をwatchに変更します。
    (列の最初にwatchを入力して、セルの右下をダブルクリックする事で全てのレコードにwatchをセットできます。)

下記は変更後の一部抜粋となります。

USER_ID,ITEM_ID,timestamp,EVENT_TYPE
1,1,964982703,watch
1,3,964981247,watch
1,6,964982224,watch
1,47,964983815,watch
1,50,964982931,watch

変更したファイルをS3バケットにアップロードします。

IAMポリシーの作成

Personalizeではファイルのインポートとエクスポートをする為にS3へのアクセス権限が必要になります。

下記の内容でポリシーを作成します。
bucket-nameをS3バケット名に書き換えてください。

今回は、PersonalizeS3BucketAccessPolicyという名前でポリシーを作成しました。

{
    "Version": "2012-10-17",
    "Id": "PersonalizeS3BucketAccessPolicy",
    "Statement": [
        {
            "Sid": "PersonalizeS3BucketAccessPolicy",
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::bucket-name",
                "arn:aws:s3:::bucket-name/*"
            ]
        }
    ]
}

IAMロールの作成

次に、IAMロールを作成します。

ロールを作成をクリックして、

信頼されたエンティティタイプ:AWSのサービス
ユースケース:personalize

を選択します。

作成済のポリシーPersonalizeS3BucketAccessPolicyを選択します。

ロール名:PersonalizeRole

と入力して、ロールを作成を完了します。

S3バケットポリシーの設定

Personalizeからデータをインポートする際にS3にアクセスするための下記の権限が必要ですので、該当S3のバケットポリシーに追加します。

DOC-EXAMPLE-BUCKETをS3バケット名に書き換えてください。

Amazon Personalize でインポートジョブを作成する際に、「There was an error with your dataset import Insufficient privileges for accessing data in S3 (S3 のデータにアクセスするための権限が不十分で、データセットのインポートにエラーが発生しました)」というエラーを解決するにはどうすればよいですか?

https://aws.amazon.com/jp/premiumsupport/knowledge-center/personalize-import-insufficient-privileges-s3-error/
{
 "Version": "2012-10-17",
 "Id": "PersonalizeS3BucketAccessPolicy",
 "Statement": [
 {
            "Sid": "PersonalizeS3BucketAccessPolicy",
            "Effect": "Allow",
            "Principal": {
                "Service": "personalize.amazonaws.com"
            },
            "Action": [
                "s3:GetObject",
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::DOC-EXAMPLE-BUCKET",
                "arn:aws:s3:::DOC-EXAMPLE_BUCKET/*"
            ]
        }
    ]
}

ドメインデータセットグループの作成

PersonalizeサービスからGet startedボタンをクリックします。

Name:my_dsgroup
Domain:Video on demand

Dataset name:my_dataset
Schema name:my_schema

Dataset import job name:my_dsimportjob
Data location:S3にアップロードしたファイルのS3 URI
Custom IAM role ARN:作成したIAMロール(PersonalizeRole)のARN

レコメンダーの作成

Dashboardの中央のカード[Use video on demand recommenders]のCreate recommendersボタンをクリックします。

Top picks for youだけにチェックを付けて、Recommender nameを入力します。(今回は”my_toppicks_recommender”と入力)

レコメンデーションデータの取得

テストとして、User IDが1のレコメンデーションデータを取得してみます。

作成されたレコメンダー(my_toppicks_recommender)を選択して、[Test recommender]欄のUser IDに1を入力してGet recommendationsボタンをクリックします。

すると、下の[Recommendations]欄にItem IDが表示されました。

, ,

コメントを残す

メールアドレスが公開されることはありません。