全部產品
Search
文件中心

Platform For AI:向量召回評估

更新時間:Jul 13, 2024

向量召回評估組件計算召回的hitrate結果。hitrate作為結果好壞的評價,hitrate越高表示訓練產出的向量去召迴向量的結果越準確。本文為您介紹向量召回評估組件的原理和配置指導。

原理

向量召回評估組件同時支援u2i召回和i2i召回的計算。u2i召回時,拿user(使用者)的向量去召回top k個items(物品),i2i召回時拿item的向量去召回top k個items。 hitrate的具體計算方法為,假設真實trigger(u2i召回時為user,i2i召回時為item)的關聯item集合為M,而實際召回了top k個和trigger相似的items,若其中落在了M裡的集合為N,則top k hitrate為|N| / |M|。為了進行bad case study,組件同時會輸出在top k裡面但是不在M裡面的items以及對應的距離。組件同時支援單機和分布式運行。 具體實現流程為:

  1. 每個worker分區載入user、item的embedding表,構建KNN需要的索引。

  2. 每個worker分區按批次讀真實序列表,尋找embedding搜尋KNN,得到top k的items。

  3. 根據真實的items序列和top k的items計算hitrate。

  4. 匯總結果並輸出到ODPS表。

組件輸入

item embedding表

item的embedding表,一般為GraphSAGE等訓練演算法的輸出,表示例如下。

item id (bigint)

item embeddings (string)

23456677

0.1,0.2,0.3....

user embedding表

user的embedding表,一般為GraphSAGE等訓練演算法的輸出,表示例如下。

user id (bigint)

user embeddings (string)

12345

0.1,0.2,0.3....

真實序列表

trigger和關聯item的真實表,做為ground truth。u2i召回時trigger id為user id, i2i召回時為item id。item ids為真實的和trigger id相關的item列表,表示例如下。

trigger id (bigint)

item ids (string)

12345

23456677,2233445,6837292,...

組件輸出

total_hitrate表

總的hitrate,表示例如下。

hitrate(double)

0.4

hitrate_details表

hitrate詳情表,行數和真實序列表一致,表示例如下

id (bigint)

topk_ids (string)

topk_dists (string)

hitrate (double)

bad_ids (string)

bad_dists (string)

1123

2345,2367,2483,2567

0.8,0.7,0.2,0.1

0.39

2483,2567

0.2,0.1

該表的行數與真實序列表相同

  • id當u2i召回時為user_id, i2i召回時為item_id。

  • topk_ids是與trigger最相關的前k個item的id,以半形逗號(,)分割。

  • topk_dists是與topk_ids對應的距離。

  • hitrate為針對該trigger召回item的命中率。

  • bad_ids為召回但是未命中的item id。

  • bad_dists為與bad_cases對應的距離。

組件參數配置

向量召回評估組件支援介面化配置和命令方式配置,配置參數一致,參數配置指導如下。

參數

類型

參數說明

輸入配置

item_emb_table

(item向量表)

string

item embedding表。

true_seq_table

(真實序列表)

string

真實序列表。u2i召回時為user和user關聯的items;i2i召回時為item和item關聯的items。

重要

測試召回效果時,訓練embedding用T時間資料時,真實序列使用T+1時間的,否則出現穿越,hitrate偏高。

user_emb_table

(user向量表)

string (可選)

user embedding表,只在u2i召回時需要提供。

輸出配置

total_hitrate

(向量召回評估值)

string

輸出表,總的hitrate。

hitrate_details

(向量召回評估詳情)

string

輸出表,hitrate詳情。

參數設定

recall_type

(召回類型)

string

召回類型,'u2i'或者'i2i'。

emb_dim

(向量表特徵維度)

int

embedding表的embedding維度。

k(召回數目)

int

召回的數目。

metric

(召回相似性度量方式)

int

(可選,預設1)

召回相似性度量方式。0為L2距離,1為內積。 L2時返回距離最小的k個,內積時返回內積最大的k個。

strict(是否容錯)

bool

(可選,預設False)

相似性計算有一定誤差,如果需要嚴格結果,strict設為True,但是strict=True時,速度會比較慢。

lifecycle

int (可選,預設7)

輸出表的lifecycle,單位為天。

執行調優

batch_size

int

(可選,預設1024)

一次計算的樣本數量,記憶體不夠時可以設小。

worker_count

(計算核心數)

int (可選,預設1)

啟動並執行機器數,當輸入表比較大或者單個worker運行比較慢時可以設大次數目。

worker_memory

(每個核心記憶體)

int

(可選,預設20000)

每個機器的記憶體大小,單位為M位元組,預設20000 MB。

PAI命令示列

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召回計算hitrate的例子,該命令指定按照內積方式計算向量相似性(距離),不要求距離計算的嚴格性,按批次計算,每次計算1024個true_seq_table裡的內容,指定了1個worker,記憶體是20 GB,輸出表hitrate_details和total_hitrate的生命週期是7天。