[アップデート]Amazon Personalizeで新たなレシピUser-Personalization-v2とPersonalized-Ranking-v2が使えるようになりました

2024.06.03

データアナリティクス事業本部インテグレーション部機械学習チーム・新納(にいの)です。

Amazon Personalizeには、レコメンドに利用するアルゴリズムであるレシピという概念があります。特定ユーザーに向けたパーソナライズや類似アイテムの推薦など、実現したいレコメンデーションに合わせたレシピを使ってモデルを作成します。

2024年5月2日に発表されたAmazon Personalizeのアップデートにより、User-Personalization-v2Personalized-Ranking-v2という2つの新しいレシピが増えました。

レシピ概要

以下のドキュメントを参考にしています。

User-Personalization-v2

ユーザーに最も関連性の高いアイテムをレコメンドするためのレシピで、「あなたにおすすめの商品です」といった形でレコメンデーションを提供します。

Personalized-Ranking-v2

アイテムのリストを特定ユーザーにパーソナライズされた形で並び替え、ランキングを作成するレシピです。

特徴

  • パフォーマンス・精度向上
    • ニューラルネットワークアーキテクチャの一種であるTransformerというアーキテクチャを採用しており、公式ドキュメントによるとレコメンデーションの精度が最大9%向上し、レコメンデーションの対象範囲が最大1.8倍拡大しています。
  • スケーラビリティの向上
    • 最大500万件のアイテム、最大30億件のユーザー・アイテムのインタラクションデータを使った学習が可能です。
  • アイテムメタデータを推論レスポンスに含める
    • アイテムメタデータをデータセットとしてインポートしている場合、レコメンド結果にメタデータとして追加コストなしで含めることができます。生成AIと組み合わせると、このメタデータをプロンプトに含めることもできます。
    • 旧バージョンでは、メタデータを推論レスポンスに追加する場合はリクエスト1,000件につき0.0167USDのコストがかかります。

詳細は以下をご参照ください。

過去バージョンとの違い

それぞれのレシピの過去バージョンとの違いは以下の通り。

項目 User-Personalization、Personalized-Ranking User-Personalization-v2、Personalized-Ranking-v2
アーキテクチャ RNNとバンディットアルゴリズムの組み合わせ Transformer(ニューラルネットワークアーキテクチャの一種)
アイテム数 最低1000件〜最大750,000件 最低1000件〜最大5,000,000件
HPO(ハイパーパラメータ最適化) デフォルト無効 常に有効(無効にはできない)
料金 リアルタイム推論
1 か月あたり最初の 7,200 万件のリクエストの場合、1000件あたり0.0556USD
次の1か月あたり6億4,800万件のリクエストの場合、1000件あたり0.0278USD
1 か月あたり7億2,000万件超のリクエストの場合、1000件あたり0.0139USD
バッチ推論
一ヶ月あたり対象リージョンごとに最初の 2,000 万件のレコメンデーションの場合、1000件あたり0.067 USD
一ヶ月あたり対象リージョンごとに次の 1億8,000万件のレコメンデーションの場合、1000件あたり0.058USD
一ヶ月あたり対象リージョンごとに2億件以上のレコメンデーションの場合、1000件あたり0.050 USD
アップロードされたデータ1GBあたり0.05USD
トレーニング用に取り込まれたインタラクション1,000件あたり0.002USD
レコメンデーションリクエスト(リアルタイム・バッチ両方) 1,000 件あたり0.15 USD
推論レスポンスへメタデータ追加 リクエスト1,000件につき0.0167USD 追加コストなし

実際に使ってみた

これらのv2のレシピを実際に利用してみます。

以下のサイトより映画の評価データ(ml-latest.zip)をダウンロードして利用します。このデータを加工して、「特定のユーザーがある映画をある時間に見た」というリストとIDに紐づいた映画リストを作成し、次に見る映画をPersonalizeを使っておすすめするというシナリオです。レコード数を絞って、ユーザー10,000件に紐づく1,000,000レコードのデータを利用します。

特定のユーザーがある映画をある時間に見た」というリストは以下のような形式でinteractions.csvという名称でS3バケット上に保存します。

USER_ID,ITEM_ID,TIMESTAMP
110561,47629,1311928128
110561,48600,1312008463
110561,49824,1311927593
110561,50160,1311927753
110561,50705,1312008089
110561,50872,1311928477
(中略)

スキーマは以下の通り指定しました。

{
	"type": "record",
	"name": "Interactions",
	"namespace": "com.amazonaws.personalize.schema",
	"fields": [
		{
			"name": "USER_ID",
			"type": "string"
		},
		{
			"name": "ITEM_ID",
			"type": "string"
		},
		{
			"name": "TIMESTAMP",
			"type": "long"
		}
	],
	"version": "1.0"
}

映画タイトル・ジャンルを含むIDに紐づいた映画リストは以下のような形式でmovies.csvという名称でS3バケット上に保存します。ml-latest.zipの中のmovies.csvのタイトルをitem_idに変更し、interactions.csvのIDと突合できるようにしています。

item_id,title,genres
1,Toy Story (1995),Adventure|Animation|Children|Comedy|Fantasy
2,Jumanji (1995),Adventure|Children|Fantasy
3,Grumpier Old Men (1995),Comedy|Romance
4,Waiting to Exhale (1995),Comedy|Drama|Romance
5,Father of the Bride Part II (1995),Comedy
6,Heat (1995),Action|Crime|Thriller
7,Sabrina (1995),Comedy|Romance
8,Tom and Huck (1995),Adventure|Children
(中略)

スキーマは以下の通り。上記のデータではジャンルがAction|Crime|Thrillerのように区切られた状態となっているため、"categorical": true を指定しています。

{
    "type": "record",
    "name": "Items",
    "namespace": "com.amazonaws.personalize.schema",
    "fields": [
        {
            "name": "ITEM_ID",
            "type": "string"
        },
        {
            "name": "TITLE",
            "type": [
                "null",
                "string"
            ]
        },
        {
            "name": "GENRES",
            "type": [
                "null",
                "string"
            ],
            "categorical": true
        }
    ],
    "version": "1.0"
}

データセットグループ作成〜データインポートまでの流れは以下エントリと同じです。

ソリューション作成画面でレシピを選択するドロップダウンリストから、aws-user-personalization-v2aws-personalized-ranking-v2をそれぞれ選択可能です。

aws-user-personalization-v2

レシピにaws-user-personalization-v2を指定します。

v2のレシピではHPO(ハイパーパラメータ最適化)が常に有効化されており、Hyperparameter configurationではApply recency biasを有効にするかどうかを選択可能です。有効にすると、モデルが最新アイテムのインタラクションデータに重みをつけるようになります。

ソリューションを作成し終えたらソリューションバージョンを確認してみましょう。今回はaws-user-personalizationとaws-user-personalization-v2をそれぞれ同じデータで実行しました。この画面ではソリューションバージョン(モデル)の評価を確認可能です。それぞれの指標の意味は以下の通り。

指標 意味
Coverage 被覆率。ユニークなアイテム総数のうち、実際にPersonalizeがレコメンドしたアイテムの割合。数値が大きいとさまざまな種類のアイテムをレコメンドしていることになる。
Mean reciprocal rank 関連アイテムのレコメンドをどれくらい上位に生成できるかどうか。入力データを学習用・評価用に分割し、それぞれを付き合わせた結果、何番目にアイテムIDがあるかでスコアを算出する。数値が高いほどユーザーの好みとマッチしているということになる。
Precision レコメンドしたアイテムのうち、ユーザーが関心を持つアイテムが含まれている割合。at 5, at 10, at 25はレコメンドアイテム数の違い。
Normalized discounted cumulative gain ユーザーが関心を持つアイテムが上位にあればあるほどスコアが大きくなる。at 5, at 10, at 25はレコメンドアイテム数の違い。

参考:

トレーニング結果比較

training duration(トレーニング時間)が3.019hoursと表記されていますが実際のトレーニング時間ではなく、使用したワーカー数を乗じた時間(処理時間×ワーカー台数)で算出されています。例えば、トレーニング自体は1時間で終わっている場合でもワーカーが3台使われていたら3時間と表記されます。トレーニングに時間がかかりすぎているように見えるかもしれませんが、並列処理によるスケーリングの効果を反映しています。

HPO(ハイパーパラメータ最適化)の設定など、同じデータセットを使っていても全く同じ条件というわけではないので単純な比較はできませんが、後述する旧バージョンと比べてCoverageなどの指標が高くなっています。

aws-user-personalization-v2の実行結果

aws-user-personalization(旧バージョン)の実行結果

レコメンド結果取得

今回はリアルタイムで推論結果を取得するキャンペーンを作成します。Solutionにはaws-user-personalization-v2レシピで作成したソリューションを指定し、自動で最新のソリューションバージョンを利用するよう設定しました。v2レシピは最下部の「Include items metadata in recommendation results」がデフォルトでオンになっています。今回の検証では映画のタイトルやジャンルがメタデータに該当します。

Test campaign resultsでは、マネジメントコンソール上からキャンペーンを介したレコメンド結果取得を試せます。interactions.csvに存在する検証したいユーザーIDを入力し、Items dataset columnsにはTITLEとGENRESを指定して実行結果にメタデータを含めるように設定します。

実行すると以下の通り推論結果を取得できました。このユーザーにはカウボーイビバップ 天国の扉をお勧めする結果となりました。

aws-personalized-ranking-v2

レシピにaws-personalized-ranking-v2を指定します。ソリューション作成までの流れはaws-user-personalization-v2と同じですので割愛します。

トレーニング結果比較

training durationについては前述した通り、実際のトレーニング時間ではなく使用したワーカー数を乗じた時間を表しており、並列処理によるスケーリングが行われています。前項同様、全く同じ条件というわけではないため、必ずしも旧バージョンよりも精度が良くなっているわけではないことにご留意ください。

aws-personalized-ranking-v2の実行結果

aws-personalized-ranking(旧バージョン)の実行結果

レコメンド結果取得

aws-user-personalization-v2と同様、v2レシピを使ったソリューションでキャンペーンを作成し、レコメンド結果を取得します。ユーザーIDとランキングとして表示させたいアイテムIDをカンマ区切りで指定します。

実行結果は以下の通り。このユーザーにはFight ClubやThe Hangoverといった映画を上位にレコメンドし、アニメ作品は推奨しないという結果が取得できました。

最後に

推論レイテンシ・トレーニング時間短縮、精度向上など、パワーアップしたaws-user-personalization-v2とaws-personalized-ranking-v2のご紹介でした。性能面もそうですが、トレーニング設定もシンプルになっており、レコメンド結果に追加コストなしでメタデータを表示できるようになったことでさらに使いやすくなった印象です。

このエントリがどなたかのお役に立てば幸いです。