全部產品
Search
文件中心

Artificial Intelligence Recommendation:User特徵預取

更新時間:Nov 15, 2024

在某些情境中,系統在接收到推薦請求後,會預先擷取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的哪個欄位。比如,user:uid 擷取User的UID屬性值;item:pair_id擷取item的pair_id的屬性值。

UserFeatureKeyName

string

User特徵表的主鍵欄位。

ItemFeatureKeyName

string

Item特徵表的主鍵欄位。

HologresTableName

string

Hologres中特徵表的表名。

UserSelectFields

string

需要擷取的User特徵,支援"*",表明擷取所有特徵,也可以配置為"feature1,feature2",多個特徵之間使用半形逗號(,)分隔。

CacheFeaturesName

string

緩衝預取出的User特徵的Cache Map名稱。

FeatureStore

string

枚舉值:user/item。表示擷取特徵之後,將其儲存到哪裡。

FeatureAsyncLoad

boolean

否·

設定"FeatureAsyncLoad" = true,即可非同步擷取特徵。

FeatureType

string

表示特徵的類型。

LoadFromCacheFeaturesName

string

需要引用的已經預取到的User特徵的Cache Map名稱。