すべてのプロダクト
Search
ドキュメントセンター

Platform For AI:ベクトルベースのリコール評価

最終更新日:Jul 22, 2024

ベクトルベースのリコール評価コンポーネントは、リコールのヒット率を計算するために使用されます。 ヒット率は、リコールの精度を評価するために使用できます。 値が高いほど、モデルトレーニング中に生成されたベクトルを使用して実行されるリコールの精度が高いことを示します。 このトピックでは、Vectorベースのリコール評価コンポーネントの動作とコンポーネントの設定方法について説明します。

仕組み

Vectorベースのリコール評価コンポーネントは、u2iリコールとi2iリコールをサポートします。 u2iのリコール中、ユーザベクトルは、上位K個のアイテムをリコールするために使用される。 i2iのリコール中に、アイテムベクトルを使用して上位K回リコールします。 ヒット率は、以下の方法を用いて算出される。例えば、リコールの契機となる関連アイテム (u2iリコール用のユーザベクトルとi2iリコール用のアイテムベクトル) の集合はMである。トリガーアイテムと同様の上位Kアイテムがリコールされます。 N個のリコールされたアイテムはMコレクションに分類されます。 このシナリオでは、上位Kヒット率は、| N |/| M | の式に基づいて計算されます。 このコンポーネントは、M個のコレクションに該当しないアイテムと、不良ケーススタディの対応する距離値も出力します。 Vectorベースのリコール評価コンポーネントは、スタンドアロンモードまたは分散モードで実行できます。 手順:

  1. すべてのワーカーがユーザー埋め込みテーブルまたはアイテム埋め込みテーブルをロードして、k-nearest-neighbor (KNN) で必要なインデックスを作成します。

  2. ワーカーは、埋め込みテーブルに基づいて、K個の最近傍の真のシーケンステーブルをバッチで検索し、上位K個のアイテムを返します。

  3. このコンポーネントは、真のシーケンステーブル内のアイテムのシーケンス値を上位K個のアイテムのシーケンス値と比較することによってヒット率を計算します。

  4. コンポーネントは結果を集計し、結果を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日です。