Amazon Personalizeつかってみた

AWS運用自動化サービス「Cloud Automator」

こんにちは、PS課のミネです。

今年のre:inventで発表されたAmazon Personalizeとは、パーソナライゼーションやレコメンデーションに関する機械学習の知識がほとんど無くとも、ユーザーがモデルをデプロイできるサービスです。

そんなAmazon Personalizeですがpreviewに当選しましたので、以下のAWS公式ブログ/サンプルを参考にデータセットはRで準備し、AWS CLIでリソースの作成をしてAmazon Personalizeを利用してみたいと思います。

データセット準備

AWS公式ブログでも利用されているMoviLensのratings.csvからデータセットを準備します。AWS公式ブログはPythonで実行されていますが、今回はRで実行してみました。

あとはAWS CLIでの作業になります。
S3バケットへアップロードします。

S3バケットのバケットポリシーはPersonalizeからアクセスできるよう以下のようにします。

AWS CLIでAmazon Personalizeを操作可能にする

Amazon PersonalizeはまだpreviewのためデフォルトではAWS CLIで操作できないようです。
以下を実行して操作可能にします。

スキーマ作成

AWS CLIでAmazpn Personalizeが操作できるようになったところで、データセット用にスキーマを作成します。Amazon Personalizeでは事前に定義されたキーワードを使う必要があります。
まずはスキーマをJSONファイル(schema.json)へ書き込みます。

作成したJSONファイルの内容からAMazon Personalizeにスキーマを作成します。

スキーマのARNが返ってくるので以下のコマンドでスキーマの内容を確認できます。

データセットグループ作成

データセットグループを作成します。データセットグループとはデータセットやこの後作成するSolution・Campaignをひとまとめにしたものです。

データセットグループのARNが返れば成功です。
続いてデータセットを作成します。

こちらもデータセットのARNが返ってくれば成功です。

データセットのインポート

先ほどS3へアップロードしたCSVをAmazon Personalizeのデータセットへインポートします。インポートするにはインポートジョブを作成・実行する必要があります。

まずはインポート用のIAMロールを作成します。IAMポリシーは以下とします。

IAMロールの信頼関係は以下のようにAmazon Personalizeを指定します。

作成したIAMロールを使用してインポートジョブを実行します。

インポートジョブのARNが返ってくるので、以下のコマンドでジョブの実行ステータスが確認できます。latestDatasetImportJobRunstatusがActiveになるとインポート成功です。

Solutionの作成

Amazon Personalizeでは学習アルゴリズムのことをレシピと呼ぶようです。レシピはPersonalizeでデフォルトで用意されているものもありますが、ユーザーが持ち込むことも可能です。インポートしたデータをレシピに学習させたものをSolutionと呼ぶようです。今回のレシピはデフォルトで用意されているDeepFMを利用します。

Solutionの作成は以下のコマンドで実行します。DeepFMのレシピのARNを指定しています。事前定義されたレシピのARNはドキュメントで確認可能です。min-tpsは「minimum transactions per second」の略です。今回は1としておきます。

ちなみに上記コマンドでレシピのARNを指定せずに--perform-auto-mlのオプションを使ってAutoMLを利用することができます。AutoMLを利用すればデータセットに対して最適なレシピを選択するのも自動で実行されます。各アルゴリズムに対して知識がなくとも、レシピが選択できるので非常に便利です。

以下のコマンドでSolutionの状態を確認します。latestSolutionVersionstatusがActiveとなれば学習完了です。完了までには少し時間がかかります。

Solutionの学習が完了すると、以下のコマンドで各メトリクスが確認できます。

Campaignの作成

トレーニングしたSolutionをデプロイしますが、Personalizeでは「Campaign」というコンポーネントでSolutionがデプロイされます。以下のコマンドでCampaignを作成します。--update-modeAUTOを指定していますが、これはSolutionが更新されると自動でCampaignが更新されるというオプションです。MANUALを指定した場合はSolutionを更新しても自動でCampaignは更新されず、aws personalize update-campaignで更新する必要があります。

レコメンドしてみる

それではレコメンドしてみます。以下のコマンドでレコメンドできます。--query "itemList[*].itemId"でITEM_IDのリストが返ってくるようになっています。

以下が返り値の例です。

まとめ

いかがでしたでしょうか。いとも簡単にレコメンデーションのモデルをデプロイすることが出来ました。今回は事前定義されたレシピを明示的に選択しましたが、AutoMLを有効にするとその選択すらいらなくなります。ほとんど労力をかけずによりよいレコメンデーションの仕組みをアプリケーションに組み込めるわけですね。

AWS運用自動化サービス「Cloud Automator」