Amazon Web Services ブログ

Amazon Personalize の推奨スコアのご紹介

Amazon Personalize を使用すると、Amazon.com で使用されているのと同じ機械学習テクノロジーを使用して、事前の機械学習の経験を必要とせずに、ウェブサイト、アプリ、広告、メールなどをパーソナライズできます。Amazon Personalize を使用すると、シンプルな API インターフェイスを介してユーザーのためにパーソナライズされたレコメンデーションを生成できます。Amazon Personalize は、パーソナライズされたレコメンデーションごとに生成された推奨スコアの提供を開始しました。これらのスコアは、レコメンデーションの関連性の相対的差異を理解するのに役立ちます。この投稿では、これらのスコアの使用法と解釈につ​​いて説明します。

推奨スコアの使用

Amazon Personalize の推奨スコアは、レコメンデーションに追加のビジネスロジックを適用するのに役立ちます。以下の例をいくつか見てみましょう。

  • 相対しきい値を超えるアイテムを推奨します。たとえば、返されたアイテムの中で最高スコアの 50% を超えるスコアを持つアイテムのみを推奨します。推奨スコアが 0.001 を超えるアイテムのみを推奨するなど、絶対しきい値を設定することはお勧めしません。
  • あるユーザーについて、アイテムのスコアが非常に高い場合は、特別なアクションを実行します。たとえば、アイテムのスコアが 0.2 を超える場合、ユーザーに特別な通知を送信するか、特別な UI エレメントを表示して、この信頼性の高いアイテムについてユーザーに知らせます。
  • レコメンデーションの関連性と、スポンサー付きコンテンツの表示などの他のビジネス目標との間でバランスを調整するなど、Personalize の結果に対してカスタマイズされた再ランキングを実行します。

推奨スコアは、リアルタイムレコメンデーションおよびバッチレコメンデーションを通じて利用できます。リアルタイムレコメンデーションについては、Amazon Personalize コンソールからも利用できます。スコアは、次のレシピを使用して作成されたソリューションバージョンで有効となります。

  • arn:aws:personalize:::recipe/aws-hrnn
  • arn:aws:personalize:::recipe/aws-hrnn-metadata
  • arn:aws:personalize:::recipe/aws-hrnn-coldstart
  • arn:aws:personalize:::recipe/aws-personalized-ranking

現時点では、aws-sims および aws-popularity-count レシピを使用して作成されたソリューションのスコアは使用できません。

この投稿では、コンソールで推奨スコアを取得する方法の簡単なデモを行います。これまでに Amazon Personalize を使用したことがない場合は、続行する前に開始方法を参照してください。

リアルタイムレコメンデーションのスコアの取得

Amazon Personalize コンソールでは、GetRecommendations または GetPersonalizedRanking API からのチェック結果を簡単に見つけることができます。本番アプリケーションでは、AWS CLI または言語固有の SDK を使用してこれらの API を呼び出します。推奨スコアを取得するには、Amazon Personalize SDK を更新してください。詳細については、リアルタイムレコメンデーションの取得を参照してください。

次の手順では、コンソールからレコメンデーションとスコアを取得する方法について詳しく説明します。

キャンペーンの選択

Amazon Personalize では、キャンペーンはユーザーにレコメンデーションを行うために使用されます。上記のように、ソリューションのバージョンがスコアをサポートするレシピを使用するキャンペーンが必要になります。新しいキャンペーンを作成するか、既存のキャンペーンを再利用できます。

新しいキャンペーンを作成するには、以下の手順を完了してください。

  1. [キャンペーン] タブで、[キャンペーンの作成] を選択します。
  2. [キャンペーン名] に名前を入力します。
  3. [ソリューション] については、ソリューションを選択してから、スコアが有効なレシピを使用するソリューションのバージョンを選択します
  4. [キャンペーンの作成] をクリックします。

次のスクリーンショットは、aws-hrnn レシピで作成されたソリューションを使用したキャンペーンの詳細を示しています。このキャンペーンは、推奨スコアを生成するために使用されます。

レコメンデーションの取得

キャンペーンを作成または更新すると、ユーザーにおすすめのアイテム、アイテムに類似したアイテム、またはユーザーのための入力アイテムの再ランキングリストを取得できます。キャンペーンの詳細ページで、テストする userIditemId、または inputList を入力します。

次のスクリーンショットは、推奨アイテムとそのスコアを含む GetRecommendations の呼び出しの結果を含むキャンペーンの詳細ページを示しています。

特定のユーザーについて、HRNN レシピベースのソリューションは、アイテムのデータセット内のすべてのアイテムを相互に相対的にスコアリングします。つまり、各アイテムのスコアは 0 から 1 の間 (1 を含みます) であり、ユーザーのすべてのアイテムスコアの合計は 1 となります。たとえば、ユーザーのために映画のレコメンデーションを生成していて、アイテムデータセットに 3 つの映画がある場合、それらのスコアは 0.6、0.3、および 0.1 のようになります。アイテムデータセットに 10,000 の映画がある場合、平均スコアは 1/10,000 になり、最も高いスコアの映画であっても絶対スコアが小さい場合があります。したがって、スコアは相対的に解釈される必要があります。

数学的な用語では、各ユーザーとアイテムのペア (u,i) の HRNN スコアは次のように計算されます。ここで、「exp」は指数関数、wu および wi/j はそれぞれ学習されたユーザーとアイテムの埋め込みであり、Σ はアイテムデータセット内のすべてのアイテムの合計を表しています。

ユーザーとアイテムの埋め込みであるwu および wi/j の間の内積または点乗積に注目してください。これは、特定のユーザーとアイテムの間の適合レベルを表しています。

以下のスクリーンショットは、成功した GetPersonalizedRanking の呼び出しが記載されたキャンペーンの詳細ページを示しています。右下にスコアを返しています。

aws-personalized-ranking レシピを使用して作成されたソリューションの場合、GetPersonalizedRanking API からの出力のアイテムも、0 から 1 のスケールで相互に相対的にスコアリングされます。ただし、GetRecommendations API の結果とは異なり、アイテムデータセット内のすべての可能なアイテムではなく、入力された ItemID についてのスコアの合計が 1 になります。入力リストは通常​​、ITEMS データセット内のアイテムの総数よりもはるかに小さいため、絶対値は、GetRecommendations API の同じユーザーとアイテムのペアのスコアよりも大きくなることがあります。したがって、GetPersonalizedRanking 操作の inputList 内のさまざまなアイテムのスコアは、相互に相対的に解釈される必要があります。

数学的には、GetPersonalizedRanking のスコアリング関数は、GetRecommendations と同じですが、再ランキングのために入力アイテムのみを考慮する点が異なります。これは、スコアを分ける他のアイテムが少ないため、スコアが 1 により近づきやすいことを意味します。

GetPersonalizedRanking API の場合、トレーニング時に ITEMS または INTERACTIONS データセットにない inputList のアイテムはスコアなしで返され、リストの最後にランク付けされます。

バッチレコメンデーションのスコアの取得

スコアは、スコアが有効なレシピから派生したソリューションのバージョンを使用して作成されたバッチ推論ジョブの結果に含まれます。バッチレコメンデーションのスコアを取得するには、以下の手順を実行します。詳細については、バッチレコメンデーションの取得を参照してください。

  1. Amazon Personalize コンソールの [バッチ推論ジョブ] タブで、スコアが有効なレシピのソリューションのバージョンを使用して新しいバッチ推論ジョブを作成します。
  2. ジョブが完了したら、出力 Amazon S3 に移動します。出力ファイルのサフィックスは .out です。この投稿では、入力ファイルが batch-20-lines.json であるため、予想される出力ファイル名は batch-20-lines.json.out です。次のスクリーンショットは、S3 に書き込まれて S3 コンソールで表示される batch-20-lines.json.out を示しています。
  3. Amazon S3 からファイルをダウンロードします。
  4. テキストエディターでファイルを開きます。

スコアが出力に表示されます。推奨スコアのない古い出力スキーマは次のとおりです。

{
    "input": {...}
    "output": {
        "recommendedItems": ["item1", "item2"],
    },
    "error": "…"
}

スコア付きのこの新しい出力スキーマは次のとおりです。

{
    "input": {...}
    "output": {
        "recommendedItems": ["item1", "item2"],
        "scores": [score1, score2]
    },
    "error": "..."
}

以下は、*.out ファイルからのサンプル出力です。出力は読みやすいようにフォーマットされています。

{
   "input":{
      "userId":"3962",
      "itemList":["474","465","1014","222"]
   },
   "output":{
      "recommendedItems":["222","474","1014","465"],
      "scores":[0.4897564, 0.265899, 0.165578, 0.078766]
   },
   "error":null
}

まとめ

推奨スコアのリリースにより、レコメンデーションの質に関するより詳細な洞察が得られるようになり、よりスマートなビジネスロジックを記述して、本番システムのダウンストリームを統合できます。Amazon Personalize で今すぐユーザーエクスペリエンスのパーソナライズを始めましょう! 開発者ガイドについては、ここをクリックしてください。

 


著者について

Brandon Huang 氏は、AWS のソフトウェア開発エンジニアで、Amazon Personalize 開発チームのメンバーとして業務を遂行しています。Brandon 氏は、レコメンデーションのためのより迅速でより正確なモデルのトレーニングを専門としており、以前は Amazon Forecast 関連の業務に携わっていました。プログラミングをしていないときは、バドミントンやピアノを楽しんだり、ベイエリアのさまざまな素晴らしいレストランを探索したりしています。