Open21

AmazonPersonalizeを試す

0Yu0Yu

チュートリアル資料

開発者ドキュメント
Amazon Personalizeでレコメンドしてみる話

セットアップ

新しいIAMポリシーを作る

  1. IAM コンソール (https://console.aws.amazon.com/iam) にサインインする

  2. ナビゲーションペインで、[ポリシー] を選択する

  3. [ポリシーの作成] を選択する

  4. [JSON] タブを選択する

  5. 次の JSON ポリシードキュメントをテキストフィールドに貼り付ける

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "personalize:*"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "iam:PassRole"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "iam:PassedToService": "personalize.amazonaws.com"
                }
            }
        }
    ]
}
          
  1. 完了したら、[ポリシーの確認] を選択する

  2. [ポリシーの確認] ページの [名前] に、ポリシーの名前を入力します。必要に応じて、[説明] に説明を入力する

  3. [Summary (概要)] で、ポリシーを確認して、そのポリシーに付与されているアクセス許可を確認し、[Create policy (ポリシーの作成)] を選択する

  4. IAM ユーザーまたはグループに新しいポリシーをアタッチする

https://docs.aws.amazon.com/ja_jp/personalize/latest/dg/aws-personalize-set-up-permissions.html#set-up-required-permissions

0Yu0Yu

IAM 用の Amazon Personalize ロールの作成

Amazon Personalize ロール
IAM がリソースにアクセスし、ユーザーに代わってタスクを実行することを許可する

  1. IAM コンソール (https://console.aws.amazon.com/iam) にサインインする

  2. ナビゲーションペインで [ロール] を選択する

  3. [Create role (ロールの作成)] を選択する

  4. Select type of trusted entity (信頼されたエンティティのタイプの選択)] で、[AWS サービス] を選択する

  5. [このロールを使用するサービスを選択] で、[Amazon Personalize] を選択する

  6. Next: Permissions (次へ: アクセス許可).] を選択する

  7. [Attach permissions policies (アクセス許可ポリシーをアタッチする)] で、「新しいIAMポリシーを作る」で作成した新しいIAMポリシーの作成ポリシー(例: PersonalizePolicy)を選択する

  • リストにポリシーを表示するには、[Filter policies (ポリシーのフィルタ)] クエリフィルタにポリシー名の一部を入力する
  • ポリシー名の横にあるチェックボックスをオンにする
  1. [次へ: タグ.] を選択する。タグは追加しない。[Next: Review] を選択する

  2. [確認] セクションの [ロール名] に、ロールの名前を入力します (例: PersonalizeRole) ロールの説明] で、ロールの説明を更新し、[ロールの作成.] を選択する

  3. 新しいロールを選択して、ロールの概要ページを開く

  4. [ロールの ARN] の値をコピーして保存する。データセットを 内にインポートするときに必要になる。

  5. 次に、「使用開始」実習を完了すれば、トレーニングデータを作成し、 Amazon Personalize バケットAmazon S3へのアクセスを許可する準備が整います。」を参照する。
    →トレーニングデータの作成へ

https://docs.aws.amazon.com/ja_jp/personalize/latest/dg/aws-personalize-set-up-permissions.html#set-up-create-role-with-permissions

0Yu0Yu

トレーニングデータの作成

  1. s3バケットを作る
  2. csvをアップロードする
  3. s3のバケットポリシーを以下のものにかきかえる(アクセス権限をあたえる)
{
    "Version": "2012-10-17",
    "Id": "PersonalizeS3BucketAccessPolicy",
    "Statement": [
        {
            "Sid": "PersonalizeS3BucketAccessPolicy",
            "Effect": "Allow",
            "Principal": {
                "Service": "personalize.amazonaws.com"
            },
            "Action": [
                "s3:GetObject",
                "s3:ListBucket",
                "s3:PutObject"
            ],
            "Resource": [
                "arn:aws:s3:::自分のバケット名",
                "arn:aws:s3:::自分のバケット名/*"
            ]
        }
    ]
}

https://docs.aws.amazon.com/ja_jp/personalize/latest/dg/gs-prerequisites.html#gs-upload-to-bucket
https://docs.aws.amazon.com/ja_jp/personalize/latest/dg/granting-personalize-s3-access.html#bucket-policy-for-batch-workflows

0Yu0Yu

ソリューションの作成

Solution name:shopping-example-solution
Receipe selection:Amazon Personalize

  • ここでAmazon Personalize (CNN×バンディットアルドリズムのやつ) を選択
  • activeになるまで待つ

キャンペーンを開始する

Campaign name:shopping-example-cp
Minimum provisioned TPS:1

  • しばらくする(activeになる)とTest campaign resultsが表示されるので、ここでテストをする。あるいはCLIでテストする。
  • CLIでテストする場合、以下のソースコードを実行する
#ec2実行ロールにpersonalize:GetRecommendationsの権限が必要

import boto3
import sys

params = sys.argv
length = len(params)
itemlist = ['N','板チョコ','チョコフレーク','チョコクッキー','ポテチ','クッキー','羊羹','えびせん','チリポテト','バニラアイス','せんべい']

personalizert = boto3.client('personalize-runtime', 
region_name='ap-northeast-1')

response=personalizert.get_recommendations(

campaignArn="arn:aws:personalize:ap-northeast-1:xxxxxxxx:campaign/shopping-example-cp",
     userId=params[1])

print("Recommended items")

for item in response['itemList'][0:5]:
         print (itemlist[int(item['itemId'])])

$ source ~/s3select_example/env/bin/activate
$ python getitems.py 1 #チョコが好き

参考

https://qiita.com/ikegam1/items/22ee984313808e91d64f#キャンペーンを開始する

0Yu0Yu

参考

レシピに応じてレコメンデーションの取得要件が違う

https://docs.aws.amazon.com/ja_jp/personalize/latest/dg/working-with-predefined-recipes.html

データセットは少なくともインタラクションデータが必要

  • ユーザーとアイテム間のインタラクションの履歴データとリアルタイムデータを保存する
  • USER_ID (string),ITEM_ID (string),TIMESTAMP (long)をJSONの必須フィールドとして指定する

https://docs.aws.amazon.com/ja_jp/personalize/latest/dg/how-it-works-dataset-schema.html

0Yu0Yu

必要なインタラクションデータ
各インタラクションに指定するトレーニングデータは、スキーマと一致する必要があります。スキーマによっては、インタラクションメタデータに空の値や Null 値を含めることができます。少なくとも、インタラクションごとに以下を指定する必要があります。

  • ユーザー ID
  • 項目 ID
  • タイムスタンプ (Unix エポック時間形式)

https://docs.aws.amazon.com/ja_jp/personalize/latest/dg/interactions-datasets.html

0Yu0Yu

ソリューションとキャンペーンの更新について

  • Amazon Personalizeは2 時間ごとに最新のソリューションバージョンを自動的に更新される
  • キャンペーンでは、更新されたソリューションバージョンが自動的に使用される。
  • キャンペーンを手動で更新するには、まずコンソールまたはCreateSolutionVersionオペレーションを使用して新しいソリューションバージョンを作成してトレーニングする。update
  • 次に、 コンソールの[Campaign (キャンペーン)] ページまたはUpdateCampaignオペレーションを使用して、キャンペーンを手動で更新する。

https://docs.aws.amazon.com/ja_jp/personalize/latest/dg/native-recipe-new-item-USER_PERSONALIZATION.html