在某些场景中,系统在接收到推荐请求后,会预先获取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名称。 |