Amazon Web Services ブログ

Amazon Personalize の一般のご利用が可能に

本日より、Amazon Personalize がすべての AWS のお客様にご利用いただけるようになりました。AWS re:Invent 2018 のプレビューにて発表された Amazon Personalize は機械学習の経験をほとんど必要とせずに、アプリケーション用に個人にカスタマイズしたレコメンドを作成できる完全マネージド型サービスです。

アプリケーション内でタイムリーに動画をレコメンドする、適切なタイミングでパーソナライズ化した通知メールを配信するなど、データに基づいてカスタマイズしたサービスで、より関連性の高い結果が得られるだけでなく、多くの場合より大きなビジネス収益をもたらします。

効率的なレコメンドシステムを開発するのは、極めて困難な作業です。リアルタイムパーソナライゼーションを構築、最適化、デプロイするには、分析、応用機械学習、ソフトウェア工学、システム運用に関する専門知識が必要です。これらの課題を克服するための知識やスキル、経験がある組織はほとんどないため、新製品や販売促進が導入されたり顧客行動が変化したりすると、単純なルールで構築されたシステムは脆弱となり、維持費も高くなります。

Amazon.com は 20 年以上にわたり、商品の発見からチェックアウトまでのパーソナライズ化した購入体験を提供する機械学習モデルを完成させてきました。Amazon Personalize はこのようなソリューションに通常伴う複雑なインフラストラクチャや機械学習に対処せずとも、これらを使ったようなカスタムモデルを開発者が構築できるように支援します。

Amazon Personalize ではオプションで顧客の人口統計情報 (年齢、場所など) だけでなく、アクティビティデータ (ページ閲覧数、サインアップ、購入など) を独自に表示します。他にも記事、商品、動画、音楽といったレコメンドするアイテムのインベントリを表示します。さらに Amazon Personalize はデータの処理と検証、重要なものの特定、正しいアルゴリズムの選択、データに合わせてカスタマイズし API を介してアクセス可能なパーソナライゼーションモデルのトレーニングと最適化を行います。Amazon Personalize が分析したあらゆるデータは非公開かつセキュアに保管され、カスタマイズしたレコメンドにのみ利用されます。生成されたパーソナライゼーションモデルはお客様自身だけのもので、他社が使用することはありません。

1 度の API 呼び出しでユーザーへのレコメンドを作成し、カスタマーエクスペリエンスをパーソナライズして、より多くのエンゲージメント、より高いコンバージョン、マーケティングキャンペーンでのパフォーマンスを向上させることが可能です。たとえばドミノピザでは Amazon Personalizeを使用し、デジタル特性を利用したプロモーションなど、個人にカスタマイズしたコミュニケーションを行っています。ソニーインタラクティブエンタテインメントは Amazon SageMaker とともに Amazon Personalize を使用して、機械学習の開発を自動化および高速化し、規模に応じてより効果的なカスタマイズを推し進めています。

つまりパーソナライズとは、自身の Amazon.com に 24 時間体制で意のままに利用できる機械学習のパーソナライゼーションチームを持つことを意味するのです。

Amazon Personalizeの紹介

Amazon Personalize では Amazon S3 に保存された履歴データ、アプリケーションからリアルタイムに送信されたストリーミングデータ、またはその両方に基づいてレコメンドを作成できます。

このため、レコメンドソリューションを構築するための柔軟性が大幅に向上します。たとえば、履歴データに基づいて最初のレコメンダーを作成し、十分な数のライブイベントを蓄積してから定期的にレコメンドすることができます。開始するための履歴データがない場合でも、しばらくイベントを取り込んでからレコメンダーを作成することもできます。

以前のブログ投稿で履歴データを取り上げましたが、今回はライブイベントの取り込みに焦点を当てています。

高度なプロセスは次のようになります。

  1. データセットグループを作成して、アプリケーションから送信されたイベントを格納する。
  2. インタラクションデータセットを作成し、そのスキーマを定義する (この時点ではデータは必要ありません)。
  3. イベントトラッカーを作成して、Amazon Personalize にイベントを送信する。
  4. Amazon Personalize へのイベント送信を開始する。
  5. レコメンドするレシピを選択する、または AutoML を使って Amazon Personalize に自動的にレシピを選択させる。
  6. ソリューションを作成する、つまりデータセットのレシピをトレーニングする。
  7. キャンペーンを作成して、アイテムのレコメンドを開始する。

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

動画のレコメンドのクリックストリームを取り込むとします。初回セットアップウィザードを使用して、これらのイベントを格納するためのデータセットグループを作成します。ここでは開始するための履歴データがないとします。クリックストリームがすべてのイベント生成し、イベント取り込み SDK を使用して取り込みます。

データセットグループを作成するには名前が必要です。

次に、インタラクションデータセットを作成する必要があります。これは、ユーザーがアイテムをどのように操作しているか (いいね! する、クリックするなど) を示します。もちろん、データを記述するスキーマを定義する必要があります。ここでは Amazon Personalize が提供するデフォルトのスキーマを使用します。

インポートジョブをオプションで定義し、履歴データをデータセットに追加できます。前述のように、すべてのデータはストリームから取得されるため、このステップは省略します。

イベントトラッカーの設定

次のステップはイベントトラッカーを作成し、ストリーミングイベントをデータセットグループに送信できるようにします。

しばらく待つと、トラッカーの準備が整います。トラッキング ID をメモしてください。イベントを送信するために必要となります。

データセットの作成

Amazon Personalize がイベントトラッカーを作成すると、そのイベントトラッカーに関連付けられているデータセットグループに新しいデータセットが自動的に作成されます。このデータセットには以下の情報を格納する、明確に定義されたスキーマがあります。

  • User_idsession_id: これらの値はアプリケーションによって定義されています。
  • Tracking_id: イベントトラッカー ID です。
  • timestampitem_idevent_typeevent_value: これらの値はイベント自体を説明しており、アプリケーションがこれらを渡す必要があります。

リアルタイムイベントは 2 つの異なる方法で、このデータセットに送信できます。

  • AWS SDK を介したサーバー側: コードが AWS の内部 (Amazon EC2 や AWS Lambda など) でホストされているか、外部でホストされているかにかかわらず、あらゆるソースからの取り込みが発生する可能性があります。
  • AWS Amplify JavaScript ライブラリを使用する。

両方のオプションを見てみましょう。

AWS SDK を使用したリアルタイムイベントの送信

これは極めて簡単なプロセスです。PutEvents API を使用するだけで、単一のイベントまたは最大 10 個のイベントのリストを送信できます。もちろん AWS SDK のいずれも使用できます。boto3 SDK を使ってイベントを送信できるのは、私のお気に入りの言語が Python だからです。

import boto3
personalize_events = boto3.client('personalize-events')
personalize_events.put_events(
    trackingId = <TRACKING_ID>,
    userId = <USER_ID>,
    sessionId = <SESSION_ID>,
    eventList = [
      {
          "eventId": "event1",
          "sentAt": 1549959198,
          "eventType": "rating",
          "properties": """{\"itemId\": \"123\", \"eventValue\": \"4\"}"""
      },
      {
          "eventId": "event2",
          "sentAt": 1549959205,
          "eventType": "rating",
          "properties": """{\"itemId\": \"456\", \"eventValue\": \"2\"}"""
      }
    ]
)

このアプリケーションでは、動画 123 が 4、動画 456 が 2 と評価されました。適切なトラッキング識別子を使用して、2 つのイベントをイベントトラッカーに送信しました。

  • eventId: アプリケーション固有の識別子。
  • sentAt: スキーマに定義されているタイムスタンププロパティに一致するタイムスタンプ。この値は Unix エポック (1970 年 1 月 1 日 00:00:00.000 UTC) 以降の秒で、特定のタイムゾーンとは無関係です。
  • eventType: スキーマで定義された event_type プロパティに一致するイベントタイプ。
  • Properties: スキーマで定義された item_idevent_value プロパティ。

これは Java のコードスニペットと同じです。

List<Event> eventList = new ArrayList<>();
eventList.add(new Event().withProperties(properties).withType(eventType));
PutEventsRequest request = new PutEventsRequest()
  .withTrackingId(<TRACKING_ID>)
  .withUserId(<USER_ID>)
  .withSessionId(<SESSION_ID>)
  .withEventList(eventList);
client.putEvents(request)

これでお分かりでしょう!

AWS Amplify を使ったリアルタイムイベントの送信

AWS Amplify は AWS を利用したスケーラブルなモバイルおよびウェブアプリケーションの作成、設定、実装を容易にする、JavaScript ライブラリです。Amazon Personalize のイベント追跡サービスと統合しています。

イベントを送信する前に、いくつかの設定手順が必要です。簡潔にするために、Amazon Personalize ドキュメントにある詳細な説明をご参照ください。

  • ユーザーを認証するために、Amazon Cognito に ID プールを作成する。
  • プール ID とトラッカー ID を使用して、Amazon Personalize プラグインを設定する。

一度この手順を行うと、Amazon Personalize にイベントを送信できます。イベントタイプには任意のテキスト文字列を依然使用できますが、特別なタイプがいくつか利用可能となっています。

  • Identify を使用すると、特定のユーザーの userId を Amazon Personalize に送信できます。そのため userId はその後の呼び出しで、オプションでのパラメータになります。
  • MediaAutoTrack は自動的にメディアイベントの再生、一時停止、再開の位置を計算し、Amazon Personalize はその位置をイベント値として使用します。

AWS Amplify でサンプルイベントを送信する方法は、次のとおりです。

Analytics.record({
    eventType: "Identify",
    properties: {
      "userId": "<USER_ID>"
    }
}, "AmazonPersonalize");
Analytics.record({
    eventType: "<EVENT_TYPE>",
    properties: {
      "itemId": "<ITEM_ID>",
      "eventValue": "<EVENT_VALUE>"
    }
}, "AmazonPersonalize");
Analytics.record({
    eventType: "MediaAutoTrack",
    properties: {
      "itemId": "<ITEM_ID>",
      "domElementId": "MEDIA DOM ELEMENT ID"
    }
}, "AmazonPersonalize");

ご覧のとおり、これもとても簡単です。

レコメンドソリューションの作成

イベントの取り込み方法が分かったので、レコメンドソリューションのトレーニング方法を定義しましょう。

最初にレシピを選択する必要がありますが、これはレシピがアルゴリズムよりもはるかに多く、事前定義された特徴変換、アルゴリズムの初期パラメータ、自動モデルチューニングも含まれているためです。したがって、レシピはパーソナライゼーションの専門知識を持つ必要性を排除します。Amazon Personalize にはさまざまなユースケースに適した、レシピがいくつか付属しています。

とはいえ、機械学習に慣れていなければ、これらのレシピのどれがご自分のユースケースに最適か分からないかもしれません。でも大丈夫です。前述のように、Amazon Personalizeは、最適なレシピを自動的に検索する新しい技術であるAutoMLをサポートしています。ですから、この機能を有効にしましょう。ついでに、レシピのパラメータを自動的に調整するよう Amazon Personalize に命令します。

これらはどれも AWS コンソールではとても簡単です。この先自動化したいので、代わりに AWS CLI を使用します。

$ aws personalize create-solution \
  --name jsimon-movieclick-solution \ 
  --perform-auto-ml --perform-hpo \
  --dataset-group-arn $DATASET_GROUP_ARN

これで、ソリューションをトレーニングする準備が整いました。サーバーに関して、心配はありません。トレーニングは完全マネージド型のインフラストラクチャで行われます。

$ aws personalize create-solution-version \
  --solution-arn $SOLUTION_ARN 

トレーニングの完了後、ソリューションバージョンを使用して、レコメンドキャンペーンを作成できます。

レコメンドキャンペーンのデプロイ

サーバーの心配はまた必要ありません! 実を言えば、キャンペーンは着信トラフィックに応じて自動的に調整されます。サポートするトランザクションの 1 秒あたりの最小数 (TPS) を定義する必要があるだけです。

モデルをホストするための初期フリートのサイズを決めるのに、この数字を使用します。この数字はレコメンドの請求額 (TPS- 時間あたり 0.20 USD) にも影響します。ここではこのパラメータを 10 に設定しています。これで最初は、1 時間あたり 2 USD ​​課金されます。トラフィックが 10 TPSを超えると、Amazon Personalize はスケールアップし、新しい TPS 設定に従って請求額が増加します。トラフィックが減少すると、Amazon Personalize はスケールダウンしますが、最小 TPS 設定を下回ることはありません。

$ aws personalize create-campaign \
  --name jsimon-movieclick-campaign \
  --min-provisioned-tps 10 \
  --solution-version-arn $SOLUTION_VERSION_ARN

後でキャンペーンを新しいソリューションバージョンで更新する必要がある場合は、UpdateCampaign API を使用して、新しいソリューションバージョンの ARN を渡すだけです。

キャンペーンをデプロイしたら、新しい動画のレコメンドができるかどうかをすぐにテストできます。

新しいアイテムをリアルタイムで推薦する

ユーザー ID を渡して、レコメンドを受け取るだけです。

$ aws personalize-rec get-recommendations \
--campaign-arn $CAMPAIGN_ARN \
--user-id 123 --query "itemList[*].itemId"
["1210", "260", "2571", "110", "296", "1193", ...]

これで、レコメンドモデルをアプリケーションに統合する準備が整いました。ウェブアプリケーションでレコメンドする動画のリストを表示するには、次の手順を実行する必要があります。

  • お好きな言語での GetRecommendations APIを使用してキャンペーンを起動し、特定のユーザーの動画のレコメンドを受け取る。
  • バックエンドから動画のメタデータを読み取る (たとえば、画像の URL、タイトル、ジャンル、リリース日など)。
  • ユーザーのブラウザに表示される HTML コードを生成する。

起動中の Amazon Personalize

実際に私の同僚である Jake Wells は、書籍をレコメンドするウェブアプリケーションを作成しました。1,900 万書を超える書評を含むオープンデータセットを使用して、Jake はまず Amazon SageMaker でホストされているノートブックを使ってデータを整理し、準備しました。それから Amazon Personalize を使用してレコメンドモデルをトレーニングし、レコメンドプロセスをデモする簡単なウェブアプリケーションを作成しました。このプロジェクトは本当に素晴らしいものでした。このプロジェクトに関するブログ記事が別に必要なのは間違いありません!

今すぐ利用可能です!

履歴データの処理であろうがイベントストリームの処理であろうが、レコメンドモデルをトレーニングしデプロイするにはいくつかの簡単な API 呼び出しが必要となるだけです。機械学習の経験がまったくないなら、ぜひ aws.amazon.com/personalize にアクセスし、試してみてください。そしてあなたのご感想を送ってください。

Amazon Personalize は以下の地域で利用可能です。米国東部 (オハイオ)、米国東部 (バージニア北部)、米国西部 (オレゴン)、アジアパシフィック (東京)、アジアパシフィック (シンガポール)、および欧州 (アイルランド)

このサービスは AWS 無料利用枠の一部でもあります。申し込み後の最初の2か月は、次のように提供されます:
1.データ処理と保存: 毎月最大20 GB
2.トレーニング: 毎月最大 100 時間のトレーニング
3.予測: 毎月最大 50 TPS 時間のリアルタイムレコメンド

ご意見をお待ちしています!

Julien