Amazon Web Services ブログ

現在利用可能: Amazon Personalize のバッチレコメンド

本日、Amazon Personalize がバッチレコメンドをサポートするようになったことをお知らせいたします。

AWS re:Invent 2018 にて開催された Personalize は機械学習の経験をほとんど必要とせずに、アプリケーション用に個人にカスタマイズしたレコメンドを作成できる完全マネージド型サービスです。

Personalize ではオプションで顧客の人口統計情報 (年齢、場所など) だけでなく、アクティビティデータ (ページ閲覧数、サインアップ、購入など) を独自に表示します。次に、記事、製品、ビデオ、音楽など、レコメンドする項目のインベントリを提供します。以前のブログ記事で説明したように、Amazon Simple Storage Service (S3) に保存された履歴データと、JavaScript トラッカーまたはサーバー側からリアルタイムで送信されたストリーミングデータの両方を使用できます。

さらに Personalize はデータの処理と検証、重要なものの特定、正しいアルゴリズムの選択、データに合わせてカスタマイズし API を介してアクセス可能なパーソナライゼーションモデルのトレーニングと最適化を行います。これによってお客様のビジネスアプリケーションを簡単に呼び出すことができます。

ただし、一部のお客様からは、バッチのレコメンドがユースケースにより適しているとの声が寄せられています。たとえば、非常に多数のユーザーまたは項目に対するレコメンド事項を一度に計算し、それらを保存して、電子メールや通知送信などのバッチ指向のワークフローに時間をかけてフィードする機能が必要な場合があります。そのような方法を使うこともできますが、リアルタイムのレコメンドエンドポイントを使用すると、バッチ処理がより便利になり、費用対効果が高まります。

簡単なデモを見てみましょう。

バッチレコメンド事項の紹介
簡単にするために、この投稿でトレーニングされた映画のおすすめソリューションMovieLens データセットで再利用します。ここでは、このソリューションに基づいてリアルタイムキャンペーンをデプロイする代わりに、バッチレコメンドジョブを作成します。

まず、映画をおすすめしたいユーザーを定義しましょう。S3 バケットに保存する JSON ファイルにユーザー ID を表示しただけです。

{"userId": "123"}
{"userId": "456"}
{"userId": "789"}
{"userId": "321"}
{"userId": "654"}
{"userId": "987"}

次に、そのバケットにバケットポリシーを適用して、Personalize がバケット内のオブジェクトを読み書きできるようにします。ここでは AWS コンソールを使用していますが、PutBucketAcl API を使用するとプログラムで同じことを実行できます。

それでは、Personalize コンソールに進み、バッチ推論ジョブを作成しましょう。

ご想像のとおり、S3 バケットへのアクセスを許可するには、ジョブに名前を付け、PersonalizeAWS Identity and Access Management (IAM) ロールを選択する必要があります。バケットポリシーはすでに処理されています。

次に、映画をレコメンドするために使用するソリューションを選択します。

最後に、復号化と暗号化のための任意の AWS Key Management Service (KMS) キーを使用して、入力データと出力データの場所を定義します。

しばらくすると、ジョブは完了し、バケットからレコメンド事項を取得できます。

$ aws s3 cp s3://jsimon-personalize-euwest-1/batch/output/batch/users.json.out -
{"input":{"userId":"123"}, "output": {"recommendedItems": ["137", "285", "14", "283", "124", "13", "508", "276", "275", "475", "515", "237", "246", "117", "19", "9", "25", "93", "181", "100", "10", "7", "273", "1", "150"]}}
{"input":{"userId":"456"}, "output": {"recommendedItems": ["272", "333", "286", "271", "268", "313", "340", "751", "332", "750", "347", "316", "300", "294", "690", "331", "307", "288", "304", "302", "245", "326", "315", "346", "305"]}}
{"input":{"userId":"789"}, "output": {"recommendedItems": ["275", "14", "13", "93", "1", "117", "7", "246", "508", "9", "248", "276", "137", "151", "150", "111", "124", "237", "744", "475", "24", "283", "20", "273", "25"]}}
{"input":{"userId":"321"}, "output": {"recommendedItems": ["86", "197", "180", "603", "170", "427", "191", "462", "494", "175", "61", "198", "238", "45", "507", "203", "357", "661", "30", "428", "132", "135", "479", "657", "530"]}}
{"input":{"userId":"654"}, "output": {"recommendedItems": ["272", "270", "268", "340", "210", "313", "216", "302", "182", "318", "168", "174", "751", "234", "750", "183", "271", "79", "603", "204", "12", "98", "333", "202", "902"]}}
{"input":{"userId":"987"}, "output": {"recommendedItems": ["286", "302", "313", "294", "300", "268", "269", "288", "315", "333", "272", "242", "258", "347", "690", "310", "100", "340", "50", "292", "327", "332", "751", "319", "181"]}}

実際のシナリオでは、これらのレコメンド事項をさらに処理するためにダウンストリームのアプリケーションにフィードを送ります。もちろん、コンソールを使用する代わりに、CreateBatchInferenceJobDescribeBatchInferenceJob、および ListBatchInferenceJobs API を使用して、プログラムでジョブを作成および管理します。

今すぐご利用いただけます!
アプリケーションにパーソナライズを追加する方法として、Amazon Personalize でバッチレコメンドを使用するのが簡単で費用対効果が高いです。本日は、Personalize が利用可能なすべてのリージョンにて、この機能を使用いただけます。

Amazon Personalize の AWS フォーラム、または通常の AWS サポートの連絡先からフィードバックをお寄せください。

Julien