ベクトルベースのリコール評価コンポーネントは、リコールのヒット率を計算するために使用されます。 ヒット率は、リコールの精度を評価するために使用できます。 値が高いほど、モデルトレーニング中に生成されたベクトルを使用して実行されるリコールの精度が高いことを示します。 このトピックでは、Vectorベースのリコール評価コンポーネントの動作とコンポーネントの設定方法について説明します。
仕組み
Vectorベースのリコール評価コンポーネントは、u2iリコールとi2iリコールをサポートします。 u2iのリコール中、ユーザベクトルは、上位K個のアイテムをリコールするために使用される。 i2iのリコール中に、アイテムベクトルを使用して上位K回リコールします。 ヒット率は、以下の方法を用いて算出される。例えば、リコールの契機となる関連アイテム (u2iリコール用のユーザベクトルとi2iリコール用のアイテムベクトル) の集合はMである。トリガーアイテムと同様の上位Kアイテムがリコールされます。 N個のリコールされたアイテムはMコレクションに分類されます。 このシナリオでは、上位Kヒット率は、| N |/| M | の式に基づいて計算されます。 このコンポーネントは、M個のコレクションに該当しないアイテムと、不良ケーススタディの対応する距離値も出力します。 Vectorベースのリコール評価コンポーネントは、スタンドアロンモードまたは分散モードで実行できます。 手順:
すべてのワーカーがユーザー埋め込みテーブルまたはアイテム埋め込みテーブルをロードして、k-nearest-neighbor (KNN) で必要なインデックスを作成します。
ワーカーは、埋め込みテーブルに基づいて、K個の最近傍の真のシーケンステーブルをバッチで検索し、上位K個のアイテムを返します。
このコンポーネントは、真のシーケンステーブル内のアイテムのシーケンス値を上位K個のアイテムのシーケンス値と比較することによってヒット率を計算します。
コンポーネントは結果を集計し、結果をMaxComputeテーブルに出力します。
入力
アイテム埋め込みテーブル
アイテムベクトルを格納する埋め込みテーブル。 項目埋め込みテーブルは通常、GraphSAGEなどのトレーニングアルゴリズムによって生成されます。 例:
item id (bigint) | アイテムの埋め込み (文字列) |
23456677 | 0.1、0.2、0.3 .... |
ユーザー埋め込みテーブル
ユーザーベクトルを格納する埋め込みテーブル。 ユーザー埋め込みテーブルは、通常、GraphSAGEなどのトレーニングアルゴリズムによって生成されます。 例:
ユーザーid (bigint) | ユーザー埋め込み (文字列) |
12345 | 0.1、0.2、0.3 .... |
True sequence table
トリガーと関連アイテムを格納するtrueテーブル。 テーブルはグラウンドトゥルースとして使用されます。 u2iのリコールの場合、トリガーid列はユーザーid列にマップされます。 i2iリコールの場合、trigger id列はitem id列にマップされます。 次のtrueシーケンステーブルでは、trigger id列がitem id列にマップされています。
トリガーid (bigint) | アイテムid (string) |
12345 | 23456677,2233445、6837292、... |
出力
total_hitrateテーブル
合計ヒット率の値を格納するテーブル。 例:
hitrate (ダブル) |
0.4 |
hitrate_detailsテーブル
ヒット率の詳細を格納するテーブル。 hitrate_detailsテーブルには、trueシーケンステーブルと同じ行数が含まれています。 例:
id (bigint) | topk_ids (文字列) | topk_dists (string) | hitrate (ダブル) | bad_ids (文字列) | bad_dists (string) |
1123 | 2345,2367,2483,2567 | 0.8,0.7,0.2,0.1 | 0.39 | 2483,2567 | 0.2,0.1 |
このテーブルの行数は、trueシーケンステーブルの行数と同じです。
u2iリコールの場合、id列はuser_id列にマップされます。 i2iリコールの場合、id列はitem_id列にマップされます。
topk_ids列には、トリガーアイテムに関連する上位K個のアイテムのIDが表示されます。 アイテムIDはコンマ (,) で区切ります。
topk_dists列には、topk_ids列のアイテムまでの距離が表示されます。
ヒット率カラムには、各トリガーに対応するリコールされたアイテムのヒット率が表示されます。
bad_ids列には、リコールされたが無関係なアイテムが表示されます。
bad_dists列には、bad_cases列のアイテムまでの距離が表示されます。
コンポーネントパラメーター
コンソールまたはCLIを使用して、ベクトルベースのリコール評価コンポーネントを設定できます。 コンソールとCLIのパラメーターは同じです。 下表に、各パラメーターを説明します。
パラメーター | タイプ | の説明 | |
入力 | item_emb_table (アイテムベクトル表) | String | アイテム埋め込みテーブル。 |
true_seq_table (True sequence table) | String | trueシーケンステーブル。 u2iのリコールの場合、テーブルにはユーザーとユーザー関連アイテムが含まれます。 i2iリコールの場合、テーブルにはアイテムとアイテム関連アイテムが含まれます。 重要 リコールの精度を評価する場合、埋め込みテーブルのデータがTの時点で収集されている場合、真のシーケンステーブルのデータはT + 1の時点で収集されている必要があります。 そうでない場合、実際のヒット率は期待値よりも高くなります。 | |
user_emb_table (ユーザベクトル表) | String (オプション) | ユーザー埋め込みテーブル。 このテーブルはu2iのリコールにのみ提供する必要があります。 | |
Output | total_hitrate (ベクトルベースのリコールヒット率) | String | 合計ヒット率の値を含む出力テーブル。 |
hitrate_details (ベクトルベースのリコールヒット率の詳細) | String | ヒット率の詳細を含む出力テーブル。 | |
パラメーター | recall_type (リコールタイプ) | String | リコールのタイプ。「u2i」または「i2i」になります。 |
emb_dim (ベクトルテーブルの特徴次元) | int | 埋め込みテーブルの埋め込みディメンション。 | |
k (リコールされたアイテムの数) | int | リコールされたアイテムの数。 | |
測定値 (類似度測定) | int (オプション) 。 デフォルト値: 1) | 類似性を測定するために使用されるメソッド。 パラメータを0に設定すると、L2距離が類似度の測定に使用されます。 パラメータを1に設定すると、内積が類似度の測定に使用されます。 L2距離を使用する場合、距離が最も短い上位K個のアイテムが返されます。 内積が使用される場合、最大の内積を有する上位K個のアイテムが返される。 | |
strict (strictモードを有効にするかどうか) | bool (オプション) 。 デフォルト値: False) | 類似度の計算には偏差があります。 strictパラメーターをTrueに設定すると、システムはstrictモードでベクトルの類似性を比較します。 しかし、このモードでの類似度計算には時間がかかる。 | |
ライフサイクルの設定 (Set lifecycle) | int (オプション) 。 デフォルト値: 7) | 出力テーブルのライフサイクル (日数) 。 | |
チューニング | batch_size | int (オプション) 。 デフォルト値: 1024) | バッチあたりのサンプル数。 メモリリソースが限られている場合は、パラメーターを小さな値に設定します。 |
worker_count (計算コア) | int (オプション) 。 デフォルト値: 1) | モデルのトレーニングに使用されるワーカーの数。 入力テーブルのサイズが大きい場合や、モデルを効率的にトレーニングするのに十分なワーカーが1つない場合は、このパラメーターを大きな値に設定します。 | |
worker_memory (コアあたりのメモリ) | int (オプション) 。 デフォルト値: 20000) | 各ワーカーに割り当てられたメモリの量。 単位: メガバイト。 デフォルト: 20000 MB。 |
サンプルコマンド
pai -name hitrate_gl_ext
-Ditem_emb_table='item_emb_table'
-Duser_emb_table='user_emb_table'
-Dtrue_seq_table='true_seq_table'
-Dhitrate_details='hitrate_details'
-Dtotal_hitrate='total_hitrate'
-Drecall_type='u2i'
-Dk=5
-Demb_dim=10
-Dmetric=1
-Dstrict=False
-Dbatch_size=1024
-Dworker_count=1
-Dworker_memory=20000
-Dlifecycle=7;
上記の例は、u2iリコールのヒット率の計算方法を示しています。 内積はベクトルの類似性 (距離) を測定するために使用され、strictモードは無効にされ、計算はバッチで実行されます。 1つのワーカーを使用して、各バッチのtrue_seq_tableテーブルの1,024項目を処理します。 ワーカーには20 GBのメモリが割り当てられ、hitrate_detailsおよびtotal_hitrate出力テーブルのライフサイクルは7日です。