ベクターベース再現率評価コンポーネントは、高次元埋め込み空間におけるヒット率を計算することで、ベクター検索システムの精度を測定します。レコメンデーションシステムや情報検索パイプラインにおける u2i (ユーザー対アイテム) および i2i (アイテム対アイテム) の再現を評価するために使用します。
仕組み
このコンポーネントは、2 種類の再現タイプをサポートしています。
u2i: ユーザーベクターを使用して、特定のユーザーに最も類似する上位 K 個のアイテムを再現します。
i2i: アイテムベクターを使用して、特定のアイテムに最も類似する上位 K 個のアイテムを再現します。
ヒット率は次のように計算されます。再現をトリガーする関連アイテムのセット M (u2i の場合はユーザーベクター、i2i の場合はアイテムベクター) が与えられた場合、コンポーネントは上位 K 個の類似アイテムを取得し、そのうち M に含まれるアイテムの数 N をカウントします。ヒット率は |N| / |M| となります。
このコンポーネントは、不良ケース分析をサポートするために、M に含まれないアイテムとその距離値も出力します。
このコンポーネントは、スタンドアロンモードまたは分散モードで実行されます。
すべてのワーカーは、ユーザーまたはアイテムの埋め込みテーブルをロードし、k-最近傍探索 (KNN) に必要なインデックスを構築します。
ワーカーは、真のシーケンステーブルをバッチで検索し、上位 K 個の最近傍を返します。
コンポーネントは、真のシーケンステーブル内のシーケンス値を上位 K 個の結果と比較することで、ヒット率を計算します。
結果は集計され、MaxCompute テーブルに書き込まれます。
再現精度を評価する場合、埋め込みテーブルと真のシーケンステーブルは異なる時点のデータである必要があります。埋め込みデータは時刻 T で、真のシーケンスデータは時刻 T+1 で収集してください。両方のテーブルが同じ時点のデータを使用している場合、ヒット率は真の値よりも人為的に水増しされます。
入力
アイテム埋め込みテーブル
GraphSAGE などのトレーニングアルゴリズムによって通常生成されるアイテムベクターを保存します。
| 列 | タイプ | 例 |
|---|---|---|
| item id | bigint | 23456677 |
| アイテム埋め込み | string | 0.1,0.2,0.3,... |
ユーザー埋め込みテーブル
GraphSAGE などのトレーニングアルゴリズムによって通常生成されるユーザーベクターを保存します。u2i の再現にのみ必要です。
| 列 | タイプ | 例 |
|---|---|---|
| user id | bigint | 12345 |
| user embeddings | string | 0.1,0.2,0.3,... |
真のシーケンステーブル
各トリガーを関連アイテムのセットにマッピングするグラウンドトゥルーステーブルです。u2i の再現の場合、トリガー ID 列はユーザー ID 列にマッピングされます。i2i の再現の場合、アイテム ID 列にマッピングされます。
| 列 | タイプ | 例 |
|---|---|---|
| trigger id | bigint | 12345 |
| item ids | string | 23456677,2233445,6837292,... |
出力
total_hitrate テーブル
すべてのトリガーにわたる全体的なヒット率が含まれます。
| 列 | タイプ | 例 |
|---|---|---|
| hitrate | double | 0.4 |
hitrate_details テーブル
真のシーケンステーブルの行数と一致する、トリガーごとの行が含まれます。
| 列 | タイプ | 説明 |
|---|---|---|
| id | bigint | u2i の再現の場合: user_id。i2i の再現の場合: item_id。 |
| topk_ids | string | 上位 K 個の再現されたアイテムの ID (カンマ区切り)。 |
| topk_dists | string | topk_ids 内の各アイテムに対応する距離値。 |
| hitrate | double | このトリガーのヒット率。 |
| bad_ids | string | 関連セット M に含まれない再現されたアイテム。 |
| bad_dists | string | bad_ids 内の各アイテムに対応する距離値。 |
コンポーネントパラメーター
| グループ | パラメーター | タイプ | 説明 |
|---|---|---|---|
| 入力 | item_emb_table | string | アイテム埋め込みテーブル。 |
| 入力 | true_seq_table | string | グラウンドトゥルーステーブル。u2i の再現の場合: ユーザーとユーザー関連アイテム。i2i の再現の場合: アイテムとアイテム関連アイテム。 |
| 入力 | user_emb_table | string (オプション) | ユーザー埋め込みテーブル。u2i の再現にのみ必要です。 |
| 出力 | total_hitrate | string | 合計ヒット率値の出力テーブル。 |
| 出力 | hitrate_details | string | トリガーごとのヒット率詳細の出力テーブル。 |
| パラメーター | recall_type | string | 再現タイプ: u2i または i2i。 |
| パラメーター | emb_dim | int | 埋め込みテーブルの埋め込みディメンション。 |
| パラメーター | k | int | 再現するアイテムの数 (上位 K)。 |
| パラメーター | metric | int (オプション、デフォルト: 1) | 類似度メトリック。0 は L2 距離を使用し、最短距離の上位 K 個のアイテムを返します。1 は内積を使用し、最大内積値の上位 K 個のアイテムを返します。 |
| パラメーター | strict | bool (オプション、デフォルト: False) | True の場合、近似なしで類似度を計算します。これにより、ヒット率計算におけるわずかな偏差は解消されますが、計算時間が大幅に増加します。 |
| パラメーター | lifecycle | int (オプション、デフォルト: 7) | 出力テーブルの保持期間 (日数)。 |
| チューニング | batch_size | int (オプション、デフォルト: 1024) | バッチごとに処理されるサンプル数。ワーカーがメモリ不足になった場合は、この値を減らしてください。 |
| チューニング | worker_count | int (オプション、デフォルト: 1) | ワーカー数。大規模な入力テーブルの場合、または単一のワーカーでは十分な速度が得られない場合は、この値を増やしてください。 |
| チューニング | worker_memory | int (オプション、デフォルト: 20000) | 各ワーカーに割り当てられるメモリ (MB)。 |
コマンド例
次のコマンドは、u2i の再現ヒット率を評価します。類似度メトリックとして内積が使用され、strict モードは無効になっており、評価はバッチで実行されます。1 つのワーカーがバッチごとに 1,024 個のアイテムを 20,000 MB のメモリで処理します。出力テーブルは 7 日間保持されます。
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;