マルチスロット パーソナル化 (プレビュー)
重要
2023 年 9 月 20 日以降は、新しい Personalizer リソースを作成できなくなります。 Personalizer サービスは、2026 年 10 月 1 日に廃止されます。
マルチスロット パーソナル化 (プレビュー) を使用すると、複数のアクション (製品やコンテンツなど) がユーザーに示される Web レイアウト、カルーセル、リストで、コンテンツを対象にすることができます。 Personalizer のマルチスロット API を使用すると、Personalizer 内の AI モデルで、ユーザー インターフェイス内の配置を考慮し、それから学習して、特定の動作をもたらすユーザー コンテキストや製品を学習できます。 たとえば、特定の製品やコンテンツでは、ページのメインの強調表示にするより、サイド バーやフッターにする方が、クリック数が増えることを、Personalizer で学習できます。
この記事では、マルチスロット パーソナル化によって結果が向上する理由、それを有効にする方法、どのようなときにそれを使用かについて説明します。 この記事は、Rank
や Reward
などの Personalizer API の使用経験と、アプリケーションでのその使用方法についての概念的な理解が既にあることを前提に書かれています。 Personalizer とそのしくみについて詳しく理解していない場合は、読み進む前に次のことを確認してください。
重要
マルチスロット パーソナル化はパブリック プレビューの段階にあります。 機能、アプローチ、プロセスは、ユーザーからのフィードバックに基づいて変更されます。 マルチスロットのプレビューを有効にすると、ループ内の他の Personalizer 機能は完全に無効になります。 マルチスロット パーソナル化を Personalizer ループでいったん有効にすると、無効にすることはできません。 マルチスロット パーソナル化用に Personalizer ループを構成する前に、このドキュメントを読み、その影響について検討してください。
どのようなときにマルチスロット パーソナル化を使用するか
製品やコンテンツをユーザーに表示するときは常に、複数のアイテムを顧客に表示できます。 次に例を示します。
- ホーム ページの Web サイト レイアウト: 多くのタイルやページ領域が、形状やサイズが異なるボックス、バナー、サイド バーでのコンテンツの強調専用に使用されます。 マルチスロット パーソナル化は、このレイアウトの特性が顧客の選択肢とアクションにどのように影響するかを学習します。
- カルーセル: 動的にコンテンツが変化するカルーセルには、循環するアイテムが必要です。 マルチスロット パーソナル化は、シーケンスと表示期間がクリックとエンゲージメントにどのように影響するかを学習できます。
- 関連する製品やコンテンツと埋め込み参照: バナー、サイド バー、ふちどり、フッター ボックスの追加のコンテンツや製品への参照を埋め込んだり配置したりすることで、ユーザーを引き付けるのが一般的です。 マルチスロット パーソナル化を使用すると、ユーザーを増やす可能性が最も高い場所に参照を割り当てるのに役立ちます。
- 検索結果または一覧: リストまたはタイルとして結果を提供するアプリケーション検索機能の場合は、マルチスロット パーソナル化を使用して、従来のランカーよりも多くのメタデータを考慮して、先頭で強調表示する項目を選択できます。
- 動的チャネルとプレイリスト: マルチスロット パーソナル化は、動的チャネルで次に再生するビデオまたは曲のリストの短いシーケンスを決定するのに役立ちます。
マルチスロット パーソナル化を使用すると、アクションを選択する必要があるユーザー インターフェイスの "スロット" を宣言できます。 また、Personalizer が製品の配置を改善するために使用できる、スロットに関するより多くの情報を提供することもできます。たとえば、大きいボックスにするか小さいボックスか? キャプションまたは機能だけのどちらを表示するか、 フッターかサイド バーか、などです。
マルチスロット パーソナル化を使用する方法
- マルチスロット パーソナル化を有効にする
- Rank 要求用の JSON オブジェクトを作成する
- スロットとベースライン アクションを定義する Rank API を呼び出す
- Rewards API を呼び出す
マルチスロット パーソナル化を有効にする
マルチスロット パーソナル化が役に立つかどうかを理解して決定するには、後の「シングルスロットとマルチスロットのパーソナル化の違い」を参照してください。 マルチスロット パーソナル化はプレビュー機能です: マルチスロット パーソナル化を有効にすると元に戻すことができず、運用環境で実行されている Personalizer ループに影響を与えるので、マルチスロット パーソナル化の API をテストする場合は、新しい Personalizer ループを作成することをお勧めします。
マルチスロット パーソナル化にループを変換することに決めたら、以下の手順をこのような Personalizer ループについて 1 回実行する必要があります。
Personalizer インスタンスをマルチスロットにアップグレードする
Note
マルチスロット パーソナル化 (プレビュー) は、Personalizer サービスの他の機能に影響します。 この変更を元に戻すことはできません。 マルチスロット パーソナル化を有効にする前に、「マルチスロット パーソナル化 (プレビュー)」を参照してください。
- Azure portal の [リソース管理] の [Personalizer リソース] で自動最適化を無効化し、 [モデルと学習設定] ページで自動最適化をオフにして保存します。
Note
マルチスロット パーソナル化は、自動最適化を無効にしない限り機能しません。 マルチスロット パーソナル化の自動最適化は、今後サポートされる予定です。
- Azure portal の [リソース管理] の [Personalizer リソース] で Personalizer をマルチスロットに更新し、[モデルと学習設定] ページで、[学習設定のエクスポート] を選択します。 ダウンロードした JSON ファイルの arguments フィールドは、 --cb_explore_adf で始まっています。 これを --ccb_explore_adf に変更し、ファイルを保存します。 CB (Contextual Bandit) と CCB (条件付き Contextual Bandit) は、それぞれ単一スロットと複数スロットのパーソナル化に使用されるアルゴリズムです。 ADF (Action Dependent Features) は、アクションが機能によって表現または識別されることを意味します。
ポータルの同じタブの [学習設定のインポート] で、最近変更した JSON ファイルを参照して選択し、アップロードします。 これにより、Personalizer インスタンスが "マルチスロット" Personalizer に更新され、マルチスロットの Rank と Reward の呼び出しがサポートされるようになります。
Rank 要求用の JSON オブジェクトを作成する
マルチスロット パーソナル化を使用するには、シングルスロットのパーソナル化 API とは若干異なる API が必要です。
スロット オブジェクトの各 Rank 呼び出し要求で、アクションの割り当てに使用できるスロットを宣言します。
- スロットの配列: スロットの配列を宣言する必要があります。 スロットには "順序がある": 配列での各スロットの位置が重要です。 各スロットが取得する傾向のある報酬、クリック、変換の数に基づいて、多いものから順にスロットの定義を並べることを強くお勧めします。 たとえば、小さいフッターではなく、Web サイトの大きなホーム ページの "ヒーロー" ボックスをスロット 1 として配置します。 他の全てのことが同じなら、シーケンスの前にあるものほど、報酬を取得する可能性が高いアクションが、Personalizer によって割り当てられます。
- スロット ID: 各スロットにスロット ID を与える必要があります。これは、この Rank 呼び出しに含まれるすべてのスロットについて一意の文字列です。
- スロットのフィーチャー: それについて説明し、他のスロットとさらに区別するために、追加のメタデータを提供する必要があります。 これらは "フィーチャー" と呼ばれます。 スロットのフィーチャーを決定するときは、コンテキストとアクションのフィーチャーに推奨されるものと同じガイドラインに従う必要があります (コンテキストとアクションのフィーチャーに関する記事を参照)。 一般的なスロットのフィーチャーは、ユーザー インターフェイス要素のサイズ、位置、見た目の特徴を特定するのに役立ちます。 例:
position: "top-left"
、size: "big"
、animated: "no"
、sidebar: "true"
、sequence: "1"
。 - ベースライン アクション: 各スロットのベースライン アクション ID を指定する必要があります。 これは、Personalizer が存在しない場合にそのスロットに表示されるアクションの ID です。 これは、徒弟モードで Personalizer をトレーニングし、オフライン評価を行うときに意味のある数値を持つようにするために必要です。
- 十分な数のアクション: Personalizer が各スロットに少なくとも 1 つのアクションを割り当てることができるように、スロットより多くのアクションを指定して Rank を呼び出す必要があります。 Personalizer により、スロット間でアクションのレコメンデーションは繰り返されない: ランクの応答では、各アクションは多くて 1 つのスロットに割り当てられます。
スロットの追加や削除、フィーチャーの追加や変更、配列の順序変更を行うことができる: Personalizer の調整とトレーニングは、新しい情報に基づいて行われます。
フィーチャーの例がいくつか含まれる slots
オブジェクトの例を次に示します。 slots
オブジェクトの大部分は安定しており (UI がゆっくり変化する傾向があるため)、そのほとんどは頻繁に変更されない: ただし、各 Rank 呼び出しに適切なベースライン アクション ID を割り当てる必要があります。
"slots": [
{
"id": "BigHighlight",
"features": [
{
"size": "Large",
"position": "Left-Middle"
}
],
"baselineAction": "BlackBoot_4656"
},
{
"id": "Sidebar1",
"features": [
{
"size": "Small",
"position": "Right-Top"
}
],
"baselineAction": "TrekkingShoe_1122"
}
]
Rank API の応答を使用する
上記の要求からのマルチスロット Rank 応答は次のようになります。
{
"slots": [
{
"id": "BigHighlight",
"rewardActionId": "WhiteSneaker_8181"
},
{
"id": "SideBar1",
"rewardActionId": "BlackBoot_4656"
}
],
"eventId": "123456D0-BFEE-4598-8196-C57383D38E10"
}
各スロットの rewardActionId を受け取り、それを使用してユーザー インターフェイスが適切にレンダリングされます。
Reward API を呼び出す
Personalizer により、得られる報酬が最大になるアクションを選択する方法が学習されます。 アプリケーションによってユーザーの行動が観察され、観察された反応に基づいて Personalizer の "報酬スコア" が計算されます。 たとえば、ユーザーが "slotId": "SideBar1",
でアクションをクリックした場合、"1" を Personalizer に送信して、そのアクション選択に正の強化を提供します。
Reward API により、その URL の報酬に対して eventId が指定されます。
https://{endpoint}/personalizer/v1.0/events/{eventId}/reward
たとえば、上記のイベントの報酬は、ID: 123456D0-BFEE-4598-8196-C57383D38E10/reward で https://{endpoint}/personalizer/v1.0/events/123456D0-BFEE-4598-8196-C57383D38E10/reward/reward
に送信されます。
{
"reward": [
{
"slotId": "BigHighlight",
"value": 0.2
},
{
"slotId": "SideBar1",
"value": 1.0
},
]
}
Reward API の 1 回の呼び出しだけで、すべての報酬スコアを提供する必要はありません。 Reward API を複数回呼び出し、それぞれで適切な eventId と slotId を指定できます。 イベントでスロットの報酬スコアが提供されない場合は、ループに対して構成されている既定の報酬 (通常は 0) が Personalizer によって暗黙的に割り当てられます。
シングルスロットとマルチスロットのパーソナル化の違い
シングルスロットとマルチスロットのパーソナル化では、Rank API と Reward API の使い方に違いがあります。
Description | シングルスロット パーソナル化 | マルチスロット パーソナル化 |
---|---|---|
Rank API 呼び出し要求の要素 | コンテキスト オブジェクトとアクションのリストを送信します | コンテキスト、アクションのリスト、スロットの順序付きリストを送信します |
ベースラインを指定するランク要求 | Personalizer により、アクション リストの最初のアクションがベースライン アクションとして取得されます (Personalizer が存在しない場合にアプリケーションによって選択される項目)。 | 各スロットで使用されたはずのベースライン ActionID を指定する必要があります。 |
Rank API 呼び出しの応答 | rewardActionId フィールドで示されているアクションが、アプリケーションにより強調表示されます | 応答には、要求で指定されたスロットごとに異なる rewardActionId が含まれています。 アプリケーションにより、各スロットにそれらの rewardActionId アクションが表示されます。 |
Reward API の呼び出し | 報酬スコアを指定して、Reward API を呼び出します。このスコアは、ユーザーがこの特定の eventId で rewardActionId と対話した方法から計算されます。 たとえば、ユーザーがそれをクリックした場合は、報酬 1 を送信します。 | rewardActionId のアクションによって目的のユーザー動作がどの程度よく誘発されたかに基づき、各スロットの報酬を指定します。 これは、同じ eventId を使用して、1 回または複数回の Reward API 呼び出しで送信できます。 |
Personalizer ループでマルチスロットを有効にした場合の影響
さらに、マルチスロットを有効にする場合は、次の点を考慮します。
Description | シングルスロット パーソナル化 | マルチスロット パーソナル化 |
---|---|---|
非アクティブなイベントとアクティブ化 | アクティブ化 API を呼び出すと、Personalizer によってイベントがアクティブ化されて、報酬スコアの指定が待機され、報酬待機時間を超えた場合は構成されている既定の報酬が割り当てられます。 | Personalizer によってアクティブ化され、eventId で指定されたすべてのスロットに対する報酬が待機されます |
徒弟モード | Personalizer の Rank API によって常にベースライン アクションが返され、ベースライン アクションを模倣して内部モデルがトレーニングされます。 | Personalizer の Rank API により、baselineAction フィールドで指定されているスロットごとにベースライン アクションが返されます。 Personalizer により、最初のものの模倣で内部モデルがトレーニングされます |
学習速度 | 強調表示されている 1 つのアクションからのみ学習されます | 任意のスロットとの対話から学習できます。 これは通常、報酬を得られるユーザーの行動が多くなることを意味し、Personalizer の学習が速くなります。 |
オフライン評価 | どのアクションが選択されたのかに基づいて、Personalizer のパフォーマンスを、ベースラインおよび最適化された学習設定と比較します。 | (プレビューの制限) 配列内の最初のスロットのパフォーマンスのみが評価されます。 より正確な評価のため、報酬が最も多いスロットが配列内の最初のスロットであるのを確認することをお勧めします。 |
自動最適化 (プレビュー) | Personalizer のループで、オフライン評価をバックグラウンドで定期的に実行し、管理者の介入なしに学習設定を最適化できます | (プレビューの制限) マルチスロット API が有効になっている Personalizer ループでは、自動最適化は無効になります。 |