目次
ご挨拶
はじめまして。3月に入社した森と申します。中途半端な時期に入社し、SAAを速やかに取得しなければと学習しております!資格の取得に併せて技術を向上させるため、努力を積み重ねていきたいと思っています。早速ではありますがハンズオンを開始します。
参考サイト
概要理解
AWS の主要な AI/ML サービス
Amazon Personalize
Amazon Personalize を使用すると、デベロッパーは機械学習 (ML) を使用して、厳選されたレコメンデーションとインテリジェントなユーザーセグメンテーションを大規模にすばやく構築してデプロイできます。Amazon Personalize は個々のニーズに合わせて調整できるため、適切なカスタマーエクスペリエンスを適切なタイミングと場所で提供できます。
ネット検索時に表示される「おすすめ」のような便利な機能を機械学習を活用して実現したサービスと解釈できそうです。
ハンズオン
データセットを確認していきます。
データセットとスキーマ
ここでは、メタ情報(誰が)、アイテム情報(何を)、いつ、何をしたなどのデータセット(データのコンテナ)を指します。
レシピ(付け加える味付けのようなもの。)について確認していきます。
レシピの選択
レシピとは、私なりの超簡単解釈によると「要素を追加することで、最適解を出すもの。」と解釈しました。
・全体の流れは次の様に流れます。
作業開始
・AWS ハンズオン資料からデータをダウンロードしておきます。
・S3から作成します。
一意の名前を付ける。
データの前処理
AWS ハンズオン資料からダウンロードしたデータをコンソール上で設定するスキーマと整合させます。
- EVENT_TYPEのカラムを追加する。
- 適当なビデオ視聴状況を入力する。
(枠外にある説明は入力しません。)
S3にデータをアップロード
IAMポリシー・ロールを作成
AWS ハンズオン資料からダウンロードしたバケットポリシーもありますが、PersonalizeからS3にアクセスするための権限をあえて手作業で作ります。
ポリシー作成
ナビゲーションバーから、ポリシーを先に作成していきます。
JSONをクリックし、次のポリシーを記載ペーストします。
こちらを参照⇒Amazon Personalize に対する、Amazon S3 リソースへのアクセスの付与
「bucket-name」は先ほど作成したバケット名を入力します。
{
"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/*"
]
}
]
}
ロール作成
エンティティは「AWSのサービス」、ユースケースは「personalize」。
先程作成したポリシーを検索してアタッチします。その他は触りません。
次はS3のバケットポリシーを設定
PersonalizeからS3への接続は設定しましたが、S3側の設定をしていないので設定します。
S3のバケットポリシーを設定(参考資料)
バケット名は書き換えてポリシーを追加しましょう。
{
"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の設定
オレンジのボタンから開始します。
ナビゲーションバーの「Create dataset group」をクリック。
任意の名前を付けて、ドメインはビデオを選択します。データ型が決まっているので、選択を失敗すると手戻りが発生しちゃいます。
再びオレンジのボタンから「item interractions dataset」をクリック。
直接インポートを選択します。
データセットの名前を付けて、新たにスキーマを作成します。
スキーマはデフォルトで大丈夫です。CSVデータをスキーマの定型に合わせているためです。
次にjob名を決めます。
そして、S3の画面からオブジェクトのURIをコピーしてきて、Personalizeの画面に貼り付けます。
IAMロールを選択します。先程作成したロールをアタッチします。
IAMの画面からARNをコピーしてきて、Personalizeの画面に貼り付けます。
そしてインポートを開始します。
ソリューションを設定
ナビゲーションバーの下の方の「Solutions and recipes」をクリック。
「create solution」から設定を開始します。
ソリューションの作成と構成
レシピの機能について参考
今回はユーザーが何をしたいかを知りたいこともあるので、「User-Personalization」を選択します。
補足としてオプションが充実しているようです。
キャンペーンを設定
最終的な予測をする工程に入っていきます。名前を決めて、先程作成したソリューションを選択し、推奨設定のバージョン(今は1つしかない。)を入力します。
スループットによって自動的にスケールするようです。
デフォルトでいきます。
作成ができたら、実際にコードではなく、コンソールで試すことができます。
画像の例であると5番さんに上から順番におすすめの映画が表示されています。
ここまで基本的な設定はできましたが、もしチューニングする場合は、次の公式サイトをご参考に。
チューニング資料(メトリクスを使用してソリューションバージョンを評価)
リソースの削除
ハンズオンが終了しましたので、通常の削除方法を記載します。
1.Campaignsを削除します。(10分程度かかります。)
ここでしっかり時間をかけることで、以降の削除でエラーが出にくいです。
2.Solutions and recipesを削除します。
赤枠をクリックした後の画面で削除を行います。
3.Datasetsを削除します。
赤枠をクリックした後の画面で削除を行います。
4.Manage dataset groupsを削除します。
5.S3バケットを削除します。
空にしてから、削除ですね。
6.一口メモ(CloudShellでのリソース削除)
エラーを出してしまうとデータセットグループの再作成に時間がかかってしまうことがあります。こういった時に以下のコマンドをお試しください。
personalizeにおいてデータセットグループを作成してすぐに削除を使用とすると、次のようなエラーが出ます。画面上で作成が完了していても、実際は作成に数十分かかります。
最初に次のコマンドで消したいデータセットのARNを確認します。そのために、データセットグループのARNから調べます。
aws personalize list-dataset-groups
そして、次のコマンドでデータセットのARNを調べます。
aws personalize list-datasets --dataset-group-arn <データセットグループのARN>
データセットを削除します。
aws personalize delete-dataset --dataset-arn "<データセットのARN>"
次にスキーマを探します。
aws personalize list-schemas
スキーマを削除します。
aws personalize delete-schema --schema-arn "スキーマのARN"
次に削除したいデータセットグループのARNを探します。
aws personalize list-dataset-groups
見つけたら消します。
aws personalize delete-dataset-group --dataset-group-arn "<データセットグループのARN>"
感想
普段接しているおすすめ機能がこのようなアルゴリズムで作られていて、実際に活用されているのが驚きと感動がありました。少しずつ知識経験を向上させたいです。
では!
1つずつ誠実に取り組み、技術を身に着けて発信も併せて行っていきます!