Path: blob/master/site/ja/agents/tutorials/ranking_tutorial.ipynb
25118 views
Copyright 2023 The TF-Agents Authors.
TF-Agents でのランキングに関するチュートリアル
セットアップ
はじめに
このチュートリアルでは、TF-Agents Bandits ライブラリの一部として実装されているランキングアルゴリズムについて説明します。ランキング問題では、イテレーションごとにエージェントにアイテムのセットが提示され、それらの一部またはすべてをリストに階数付けするタスクが課されます。このランキングの決定は、何らかの形式のフィードバックを受け取ります(例えば、ユーザーが選択した項目の 1 つまたは複数をクリックするかしないかなど)。エージェントの目標は、時間の経過とともにより良い意思決定を行うことを目標に、いくつかの指標/報酬を最適化することです。
前提条件
TF-Agents のランキングアルゴリズムは、「アームごと」のバンディット問題で動作する特殊なタイプのバンディットエージェントに属しています。したがって、このチュートリアルを最大限に活用するには、読者はバンディットとアームごとのバンディットのチュートリアルをよく理解する必要があります。
ランキング問題とそのバリアント
このチュートリアルでは、ユーザーに商品を販売する例を使用します。すべてのイテレーションで、アイテムのセットと、場合によっては表示する必要があるアイテムの数を示す数値を受け取ります。手元にあるアイテムの数は、常にそれらを配置するスロットの数以上であると想定しています。ユーザーが表示されたアイテムの 1 つ以上と対話する確率を最大化するには、ディスプレイのスロットを埋める必要があります。 .ユーザーとアイテムは特徴量によって記述されます。
ユーザーが気に入ったアイテムをディスプレイに表示できれば、ユーザーとアイテムの相互作用の可能性が高まります。したがって、ユーザーとアイテムのペアがどのように一致するかを学習することをお勧めします。しかし、ユーザーがアイテムを気に入っているかはどうかどうすればわかるのでしょうか?この目的のために、フィードバックタイプを導入します。
#フィードバックタイプ
フィードバック信号(報酬)が選択された 1 つのアイテムに直接関連付けられるバンディットの問題とは対照的に、ランキングではフィードバックが表示されたアイテムの「良さ」にどのように変換されるかを考慮する必要があります。つまり、表示されたアイテムのすべてまたは一部にスコアを割り当てる必要があります。私たちのライブラリでは、ベクトルフィードバックとカスケードフィードバックの 2つの異なるタイプのフィードバックを提供しています。
ベクトルフィードバック
ベクトルフィードバックのタイプでは、エージェントが出力ランキングのすべてのアイテムに対してスカラースコアを受け取ると仮定します。これらのスカラーは、出力ランキングと同じ順序でベクトルにまとめられます。したがって、フィードバックはランキングの要素数と同じサイズのベクトルです。
このフィードバックのタイプは、フィードバックシグナルをスコアに変換することについて心配する必要がないという意味で、非常に単純です。一方、アイテムの採点の責任は設計者(つまり、あなた)にあります。アイテムとその位置、およびユーザーが操作したかどうかに基づいて、どのようなスコアを与えるかを決定するのはシステム設計者です。
##カスケードフィードバック
カスケードフィードバックのタイプ(Craswell et al., 2008 によって造られた用語)では、ユーザーが表示されたアイテムを一番上のスロットから順番に見ると仮定します。ユーザーはクリックするに値するアイテムを見つけるとすぐにクリックし、現在の階数付けされたリストに戻ることはありません。クリックされたアイテムの下のアイテムも見ません。どのアイテムもクリックしない可能性もあります。これは、表示されているアイテムのどれもクリックする価値がない場合に発生します。この場合、ユーザーはすべてのアイテムを確認します。
フィードバック信号は、選択した要素のインデックスとクリックの値の 2 つの要素で構成されます。次に、この情報をスコアに変換するのがエージェントのタスクです。バンディットライブラリの実装では、表示されたがクリックされていないアイテムには低いスコア(通常は 0 または -1)が与えられ、クリックされたアイテムにはクリック値が与えられ、クリックされたアイテム以外のアイテムはエージェントによって無視されるという規則が実装されました。
多様性と探求
ユーザーがアイテムをクリックする可能性を最大化するには、最もスコアの高いアイテムを選択してランキングの上位に入れるだけでは十分ではありません。さまざまな興味を持つユーザーの場合、彼らはスポーツに最も興味があるかもしれませんが、芸術や旅行も好きです。すべてのスポーツアイテムに最高の推定スコアを与え、最高のスロットにすべてのスポーツアイテムを表示することは、最適ではない場合があります。ユーザーは芸術や旅行の気分になっている可能性があります。したがって、高得点の興味の対象を組み合わせて表示することをお勧めします。表示されるアイテムのスコアを最大化するだけでなく、それらが多様なセットを形成していることを確認することが重要です。
他の限定情報学習問題(バンディットなど)と同様に、私たちの決定は即時の報酬だけでなく、トレーニングデータと将来の報酬にも影響することを覚えておくことも重要です。常に現在の推定スコアに基づいてアイテムのみを表示すると、まだ十分に調査していない高スコアのアイテムを見逃す可能性があり、そのため、それらがどれほど優れているかを認識できません。つまり、意思決定プロセスに探索を組み込む必要があります。
上記の概念と考慮事項はすべて、私たちのライブラリで対応しています。このチュートリアルでは、詳細について説明します。
ユーザーのシミュレーション: テスト環境
コードベースを詳しく見ていきましょう!
まず、ユーザーとアイテムの特徴量をランダムに生成するクラスである環境を定義し、決定後にフィードバックを提供します。
いつクリックしないかを決定する環境のモデルも必要です。ライブラリには、距離ベースとゴーストアクションの 2 つの方法があります。
距離ベースでは、ユーザー特徴量がどのアイテム特徴量にも十分に近くない場合、ユーザーはクリックしません。
ゴーストアクションモデルでは、追加の虚数アクションを単位ベクトルアイテム特徴量の形で設定します。ユーザーがゴーストアクションのいずれかを選択すると、ノークリックになります。
ランキング環境を定義する準備がほぼ整いました。あともう少しで完了です。グローバル(ユーザー)とアイテム特徴量のサンプリング関数を定義します。これらの特徴量は、ユーザーの行動をシミュレートするために環境によって使用されます。グローバルおよびアイテム特徴量の加重内積が計算され、ユーザーがクリックする確率は内積値に比例します。内積の重み付けは、以下の scores_weight_matrix
によって定義されます。
それでは、上記の環境に取り組むいくつかの異なるエージェントを定義しましょう!すべてのエージェントは、アイテムとユーザーのペアのスコアを推定するネットワークをトレーニングします。違いはポリシー、つまり、トレーニングされたネットワークを使用してランキングを決定する方法にあります。実装されたポリシーは、スコアに基づく単なるスタックランキングから、多様性と探索を考慮して、これらの側面の混合を調整する機能にまで及びます。
トレーニングループを開始する前に、トレーニングデータに関してもう 1 つ注意しなければならないことがあります。
決定時にポリシーに提示されるアーム特徴量には、ポリシーが選択できるすべてのアイテムが含まれます。ただし、トレーニングでは、便宜上、決定出力の順序で選択されたアイテムの特徴量が必要です。この目的のために、次の関数が使用されます(わかりやすくするためにここにコピーされています)。
バンディットのチュートリアルと同様に、トレーニングするサンプルをエージェントに供給するリプレイバッファを定義します。次に、ドライバーを使用してすべてをまとめます。環境が特徴量を提供し、ポリシーがランキングを選択し、サンプルが収集されてトレーニングされます。
報酬をプロットしましょう!
次のステップ
このチュートリアルには、使用するポリシー/エージェント、環境のいくつかのプロパティ、さらにはフィードバックモデルなど、調整可能なパラメータが多数含まれています。これらのパラメータを自由に試してみてください。
tf_agents/bandits/agents/examples/v2/train_eval_ranking.py
には、すぐに実行できるランキングの例もあります。