Amazon-Personalize

Amazon Personalizeのハンズオンやってみた。

ご挨拶

はじめまして。3月に入社した森と申します。中途半端な時期に入社し、SAAを速やかに取得しなければと学習しております!資格の取得に併せて技術を向上させるため、努力を積み重ねていきたいと思っています。早速ではありますがハンズオンを開始します。

参考サイト

AWS ハンズオン資料

概要理解

AWS の主要な AI/ML サービス
Amazon Personalize

Amazon Personalize を使用すると、デベロッパーは機械学習 (ML) を使用して、厳選されたレコメンデーションとインテリジェントなユーザーセグメンテーションを大規模にすばやく構築してデプロイできます。Amazon Personalize は個々のニーズに合わせて調整できるため、適切なカスタマーエクスペリエンスを適切なタイミングと場所で提供できます。

ネット検索時に表示される「おすすめ」のような便利な機能を機械学習を活用して実現したサービスと解釈できそうです。

ハンズオン

データセットを確認していきます。
データセットとスキーマ

ここでは、メタ情報(誰が)、アイテム情報(何を)、いつ、何をしたなどのデータセット(データのコンテナ)を指します。

レシピ(付け加える味付けのようなもの。)について確認していきます。
レシピの選択

レシピとは、私なりの超簡単解釈によると「要素を追加することで、最適解を出すもの。」と解釈しました。

・全体の流れは次の様に流れます。
image.png

作業開始

AWS ハンズオン資料からデータをダウンロードしておきます。

・S3から作成します。
image.png
一意の名前を付ける。

データの前処理

AWS ハンズオン資料からダウンロードしたデータをコンソール上で設定するスキーマと整合させます。

  1. EVENT_TYPEのカラムを追加する。
  2. 適当なビデオ視聴状況を入力する。
    (枠外にある説明は入力しません。)
    image.png

S3にデータをアップロード

image.png
image.png

IAMポリシー・ロールを作成

image.png
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/*"
            ]
        }
    ]
}

image.png

ロール作成
image.png
エンティティは「AWSのサービス」、ユースケースは「personalize」。
先程作成したポリシーを検索してアタッチします。その他は触りません。
image.png

次は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/*"
      ]
    }
  ]
}

image.png

Personalizeの設定

オレンジのボタンから開始します。
image.png

ナビゲーションバーの「Create dataset group」をクリック。
任意の名前を付けて、ドメインはビデオを選択します。データ型が決まっているので、選択を失敗すると手戻りが発生しちゃいます。
image.png

再びオレンジのボタンから「item interractions dataset」をクリック。
image.png

直接インポートを選択します。
image.png

データセットの名前を付けて、新たにスキーマを作成します。
image.png

スキーマはデフォルトで大丈夫です。CSVデータをスキーマの定型に合わせているためです。
image.png
image.png

次にjob名を決めます。
image.png

そして、S3の画面からオブジェクトのURIをコピーしてきて、Personalizeの画面に貼り付けます。
image.png
image.png

IAMロールを選択します。先程作成したロールをアタッチします。
IAMの画面からARNをコピーしてきて、Personalizeの画面に貼り付けます。
image.png
image.png
そしてインポートを開始します。
image.png

ソリューションを設定

ナビゲーションバーの下の方の「Solutions and recipes」をクリック。
「create solution」から設定を開始します。
image.png
ソリューションの作成と構成
レシピの機能について参考

今回はユーザーが何をしたいかを知りたいこともあるので、「User-Personalization」を選択します。
補足としてオプションが充実しているようです。
image.png
image.png
image.png
image.png

キャンペーンを設定

image.png

最終的な予測をする工程に入っていきます。名前を決めて、先程作成したソリューションを選択し、推奨設定のバージョン(今は1つしかない。)を入力します。
image.png

スループットによって自動的にスケールするようです。
image.png

デフォルトでいきます。
image.png
作成ができたら、実際にコードではなく、コンソールで試すことができます。

画像の例であると5番さんに上から順番におすすめの映画が表示されています。
image.png
image.png

ここまで基本的な設定はできましたが、もしチューニングする場合は、次の公式サイトをご参考に。
チューニング資料(メトリクスを使用してソリューションバージョンを評価)

リソースの削除

ハンズオンが終了しましたので、通常の削除方法を記載します。

1.Campaignsを削除します。(10分程度かかります。)

ここでしっかり時間をかけることで、以降の削除でエラーが出にくいです。
image.png

2.Solutions and recipesを削除します。

赤枠をクリックした後の画面で削除を行います。
image.png
image.png

3.Datasetsを削除します。

赤枠をクリックした後の画面で削除を行います。
image.png

4.Manage dataset groupsを削除します。

image.png

5.S3バケットを削除します。

空にしてから、削除ですね。
image.png
image.png

6.一口メモ(CloudShellでのリソース削除)

エラーを出してしまうとデータセットグループの再作成に時間がかかってしまうことがあります。こういった時に以下のコマンドをお試しください。

personalizeにおいてデータセットグループを作成してすぐに削除を使用とすると、次のようなエラーが出ます。画面上で作成が完了していても、実際は作成に数十分かかります。
image.png

最初に次のコマンドで消したいデータセットの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>"

感想

普段接しているおすすめ機能がこのようなアルゴリズムで作られていて、実際に活用されているのが驚きと感動がありました。少しずつ知識経験を向上させたいです。

では!

返信を残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA