在某些情境中,系統在接收到推薦請求後,會預先擷取User特徵,再進入推薦流程中。本文為您介紹如何進行User特徵預取。
情境介紹
擷取User特徵的方式有以下兩種:
阻塞擷取User特徵:因為User特徵會在召回或過濾階段用到, 必須先擷取User特徵,才能進行推薦流程。
非阻塞擷取User特徵:為了提高效能,需要非同步擷取User特徵, 之後才能在粗排或精排階段使用。
同時, User特徵的預取也需要AB實驗參數的支援。User特徵的擷取,在配置上是與特徵擷取相同的。
阻塞擷取User特徵
您可以利用UserFeatureConfs進行配置,UserFeatureConfs支援多情境配置,home_feed是配置的情境名稱,樣本內容如下。從下述樣本中可以看出當前配置和FeatureConfs配置是完全類似的。 UserFeatureConfs會在整個推薦流程之前執行,並且是阻塞式的,載入完User特徵之後才進行推薦流程。
{
"UserFeatureConfs": {
"home_feed": {
"AsynLoadFeature": true,
"FeatureLoadConfs": [
{
"FeatureDaoConf": {
"AdapterType": "hologres",
"HologresName": "pairec-holo",
"FeatureKey": "user:uid",
"UserFeatureKeyName": "client_str",
"HologresTableName": "dwd_ali_user_all_feature_v2_holo",
"UserSelectFields": "*",
"FeatureStore": "user"
},
"Features": [
{
"FeatureType": "new_feature",
"FeatureName": "day_h",
"Normalizer": "hour_in_day",
"FeatureStore": "user"
},
{
"FeatureType": "new_feature",
"FeatureName": "week_day",
"Normalizer": "weekday",
"FeatureStore": "user"
}
]
}
]
}
}
}其中AsynLoadFeature表示是否非同步載入User特徵。當有多個FeatureLoadConfs時,可以使用非同步並發方式進行載入。其他參數配置說明,請參見配置欄位說明。
非阻塞擷取User特徵
如果您想擷取User特徵而不阻塞推薦流程,可以添加FeatureAsyncLoad並將其配置為true,樣本內容如下:
{
"UserFeatureConfs": {
"home_feed": {
"AsynLoadFeature": true,
"FeatureLoadConfs": [
{
"FeatureDaoConf": {
"AdapterType": "hologres",
"HologresName": "pairec-holo",
"FeatureKey": "user:uid",
"UserFeatureKeyName": "client_str",
"HologresTableName": "dwd_ali_user_all_feature_v2_holo",
"UserSelectFields": "*",
"FeatureStore": "user"
},
"Features": [
{
"FeatureType": "new_feature",
"FeatureName": "day_h",
"Normalizer": "hour_in_day",
"FeatureStore": "user"
},
{
"FeatureType": "new_feature",
"FeatureName": "week_day",
"Normalizer": "weekday",
"FeatureStore": "user"
}
]
},
{
"FeatureDaoConf": {
"AdapterType": "hologres",
"FeatureAsyncLoad": true,
"HologresName": "pairec-holo",
"FeatureKey": "user:uid",
"UserFeatureKeyName": "client_str",
"HologresTableName": "dwd_ali_user_all_feature_v3_holo",
"UserSelectFields": "*",
"FeatureStore": "user"
},
"Features": []
}
]
}
}
}上述檔案配置擷取兩類特徵:
從dwd_ali_user_all_feature_v2_holo中擷取所有特徵,該內容未配置FeatureAsyncLoad,表示這些特徵是阻塞式擷取的。
從dwd_ali_user_all_feature_v3_holo擷取所有特徵。該內容配置了FeatureAsyncLoad=true,則表示這些特徵使用非同步方式擷取。
其他參數配置說明,請參見配置欄位說明。
預取User特徵並放入Cache
為提高系統效能,建議您在執行推薦流程之前,採用非同步方式擷取User特徵,並將這些特徵暫時儲存。待實際需求時,再將緩衝的特徵放到使用者特徵集中,確保高效利用。樣本內容如下:
{
"UserFeatureConfs": {
"home_feed": {
"AsynLoadFeature": true,
"FeatureLoadConfs": [
{
"FeatureDaoConf": {
"AdapterType": "hologres",
"HologresName": "pairec-holo",
"FeatureKey": "user:uid",
"UserFeatureKeyName": "client_str",
"FeatureAsyncLoad": true,
"HologresTableName": "dwd_ali_user_all_feature_v2_holo",
"UserSelectFields": "*",
"CacheFeaturesName" :"test",//cache map
"FeatureStore": "user"
},
"Features": [
{
"FeatureType": "new_feature",
"FeatureName": "day_h",
"Normalizer": "hour_in_day",
"FeatureStore": "user"
},
{
"FeatureType": "new_feature",
"FeatureName": "week_day",
"Normalizer": "weekday",
"FeatureStore": "user"
}
]
}
]
}
}
}其中關鍵配置說明如下,其他參數配置說明,請參見配置欄位說明。
"FeatureAsyncLoad" = true:表示使用非同步方式擷取User特徵。
"CacheFeaturesName": "test":表示擷取到的特徵會緩衝到名稱為test的Cache Map中,而不是真正放入到User特徵中。後面用到特徵時,才需要引用。每組特徵都可以使用不同的CacheFeaturesName名稱。
引用User的Cache特徵
在粗排或者精排階段引用預先載入的User特徵時,引用的特徵需要在FeatureConfs裡配置。樣本內容如下:
{
"FeatureConfs":{
"home_feed_rebuild_v22":{
"AsynLoadFeature":false,
"FeatureLoadConfs":[
{
"FeatureDaoConf":{
"LoadFromCacheFeaturesName":"test",
"FeatureStore":"user"
}
},
{
"FeatureDaoConf":{
"LoadFromCacheFeaturesName":"test1",
"FeatureStore":"user"
}
}
]
}
}
}其中關鍵配置說明如下,其他參數配置說明,請參見配置欄位說明。
引用特徵不需要並發的擷取,設定"AsynLoadFeature"= false即可。
LoadFromCacheFeaturesName:表示從哪個Cache Map中擷取User特徵。名稱與CacheFeaturesName保持一致。
配置欄位說明
FeatureLoadConfs/FeatureDaoConf中的配置欄位說明如下:
欄位名 | 類型 | 是否必填 | 描述 |
AdapterType | string | 是 | 資料來源的類型,取值為hologres。 |
HologresName | string | 是 | 在資料來源配置(HologresConfs)中配置好的Hologres的自訂名稱,例如資料來源配置中的 holo_info。 |
FeatureKey | string | 是 | 根據引擎中哪個特徵,去特徵表裡進行查詢。 FeatureKey表明尋找的值來自於User或item的哪個欄位。比如, |
UserFeatureKeyName | string | 否 | User特徵表的主鍵欄位。 |
ItemFeatureKeyName | string | 否 | Item特徵表的主鍵欄位。 |
HologresTableName | string | 是 | Hologres中特徵表的表名。 |
UserSelectFields | string | 否 | 需要擷取的User特徵,支援"*",表明擷取所有特徵,也可以配置為 |
CacheFeaturesName | string | 是 | 緩衝預取出的User特徵的Cache Map名稱。 |
FeatureStore | string | 是 | 枚舉值:user/item。表示擷取特徵之後,將其儲存到哪裡。 |
FeatureAsyncLoad | boolean | 否· | 設定 |
FeatureType | string | 是 | 表示特徵的類型。 |
LoadFromCacheFeaturesName | string | 是 | 需要引用的已經預取到的User特徵的Cache Map名稱。 |