AmazonPersonalizeを試す

チュートリアル資料
開発者ドキュメント
Amazon Personalizeでレコメンドしてみる話
セットアップ
新しいIAMポリシーを作る
-
IAM コンソール (https://console.aws.amazon.com/iam) にサインインする
-
ナビゲーションペインで、[ポリシー] を選択する
-
[ポリシーの作成] を選択する
-
[JSON] タブを選択する
-
次の JSON ポリシードキュメントをテキストフィールドに貼り付ける
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"personalize:*"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"iam:PassRole"
],
"Resource": "*",
"Condition": {
"StringEquals": {
"iam:PassedToService": "personalize.amazonaws.com"
}
}
}
]
}
-
完了したら、[ポリシーの確認] を選択する
-
[ポリシーの確認] ページの [名前] に、ポリシーの名前を入力します。必要に応じて、[説明] に説明を入力する
-
[Summary (概要)] で、ポリシーを確認して、そのポリシーに付与されているアクセス許可を確認し、[Create policy (ポリシーの作成)] を選択する
-
IAM ユーザーまたはグループに新しいポリシーをアタッチする

IAM 用の Amazon Personalize ロールの作成
Amazon Personalize ロール
IAM がリソースにアクセスし、ユーザーに代わってタスクを実行することを許可する
-
IAM コンソール (https://console.aws.amazon.com/iam) にサインインする
-
ナビゲーションペインで [ロール] を選択する
-
[Create role (ロールの作成)] を選択する
-
Select type of trusted entity (信頼されたエンティティのタイプの選択)] で、[AWS サービス] を選択する
-
[このロールを使用するサービスを選択] で、[Amazon Personalize] を選択する
-
Next: Permissions (次へ: アクセス許可).] を選択する
-
[Attach permissions policies (アクセス許可ポリシーをアタッチする)] で、「新しいIAMポリシーを作る」で作成した新しいIAMポリシーの作成ポリシー(例: PersonalizePolicy)を選択する
- リストにポリシーを表示するには、[Filter policies (ポリシーのフィルタ)] クエリフィルタにポリシー名の一部を入力する
- ポリシー名の横にあるチェックボックスをオンにする
-
[次へ: タグ.] を選択する。タグは追加しない。[Next: Review] を選択する
-
[確認] セクションの [ロール名] に、ロールの名前を入力します (例: PersonalizeRole) ロールの説明] で、ロールの説明を更新し、[ロールの作成.] を選択する
-
新しいロールを選択して、ロールの概要ページを開く
-
[ロールの ARN] の値をコピーして保存する。データセットを 内にインポートするときに必要になる。
-
次に、「使用開始」実習を完了すれば、トレーニングデータを作成し、 Amazon Personalize バケットAmazon S3へのアクセスを許可する準備が整います。」を参照する。
→トレーニングデータの作成へ

トレーニングデータの作成
- s3バケットを作る
- csvをアップロードする
- 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

TODO:Itemdata import job detailsする
(items.csvをかきかえる)
Done

s3バケットにアップロードするコマンド
$ aws s3 cp testfile.csv s3://my-s3select/
PythonでCSVファイルをS3 SELECTする

ソリューションの作成
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#キャンペーンを開始する

参考
レシピに応じてレコメンデーションの取得要件が違う
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

TODO:user/itemスキーマの作成
(JSONで指定する型はDBの型定義に準拠する)
https://docs.aws.amazon.com/ja_jp/personalize/latest/dg/users-datasets.html

必要なインタラクションデータ
各インタラクションに指定するトレーニングデータは、スキーマと一致する必要があります。スキーマによっては、インタラクションメタデータに空の値や Null 値を含めることができます。少なくとも、インタラクションごとに以下を指定する必要があります。
- ユーザー ID
- 項目 ID
- タイムスタンプ (Unix エポック時間形式)
https://docs.aws.amazon.com/ja_jp/personalize/latest/dg/interactions-datasets.html

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

公式チートシート

メモ

ログを見る
- AWS CloudTrail

リソースのクリーンアップ