特征的配置对应配置总览中的 FeatureConfs,FeatureConfs 是一个 Map[string]object 结构,其中 key 为场景名,可以根据不同场景配置不同的特征
特征加载
在精排之前,需要从特征存储源里获取到 user 或者 item 的特征数据。
在某些情况下,获取到的特征数据还需要进一步做处理,比如根据已有的特征生成新的特征,根据现有特征进行组合等,都是支持的
特征的加载支持多个数据源 hologres、redis、ots(tablestore)、PAI-FeatureStore 。
Hologres
配置示例
"FeatureConfs" :{
"scene_name" :{
"AsynLoadFeature" : true,
"FeatureLoadConfs": [
{
"FeatureDaoConf": {
"AdapterType": "hologres",
"HologresName": "holo-pai",
"FeatureKey": "user:uid",
"UserFeatureKeyName" :"uid",
"HologresTableName": "recom_user_features_processed_holo_online",
"UserSelectFields":"rids_count,sex,alladdfriendnum,allpayrosenum",
"FeatureStore":"user"
},
"Features" :[]
},
{
"FeatureDaoConf": {
"AdapterType": "hologres",
"HologresName": "holo-pai",
"ItemFeatureKeyName" :"uid",
"FeatureKey": "item:pair_id",
"HologresTableName": "recom_user_features_processed_holo_online",
"ItemSelectFields":"uid, rids_count as rids2_count,sex as guestsex,alladdfriendnum as alladdfriendnum2",
"FeatureStore":"item"
},
"Features" :[]
}
]
}
}
AsynLoadFeature: 是否异步的加载特征,当有多个 FeatureLoadConfs 时,可以异步并发的进行加载
FeatureLoadConfs/FeatureDaoConf
字段名 | 类型 | 是否必填 | 描述 |
AdapterType | string | 是 | 数据源的类型,取值为 hologres |
HologresName | string | 是 | 在数据源配置(HologresConfs)中配置好的 holo 的自定义名称,如数据源配置中的 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 | 是 | holo 中特征表的表名 |
UserSelectFields | string | 否 | 需要获取的 user 特征,支持"*",表明获取所有,也可以 "feature1,feature2" |
ItemSelectFields | string | 否 | 需要获取的 item 特征,支持"*",表明获取所有,也可以 "feature1,feature2" |
FeatureStore | string | 是 | 枚举值:user/item。表示特征获取到之后,存储到哪里 |
Redis
配置示例
"FeatureConfs" :{
"scene_name" :{
"AsynLoadFeature" : true,
"FeatureLoadConfs": [{
"FeatureDaoConf": {
"AdapterType": "redis",
"RedisName": "user_redis",
"RedisPrefix": "UF_V2_",
"FeatureKey": "user:uid",
"FeatureStore":"user"
},
"Features" :[]
},
{
"FeatureDaoConf": {
"AdapterType": "redis",
"RedisName": "item_redis",
"RedisPrefix": "IF_V2_FM_",
"FeatureKey": "item:id",
"FeatureStore":"item"
},
"Features" :[
{
"FeatureType": "raw_feature",
"FeatureName" : "article_id",
"FeatureSource" : "item:id",
"FeatureStore":"item"
},
{
"FeatureType": "raw_feature",
"FeatureName" : "item_elapse_time",
"FeatureSource" : "item:item_ctime",
"Normalizer": "time_ln",
"RemoveFeatureSource" : true,
"FeatureStore":"item"
}
]
}]
}
}
FeatureLoadConfs/FeatureDaoConf
字段名 | 类型 | 是否必填 | 描述 |
AdapterType | string | 是 | 数据源的类型,取值为 redis |
RedisName | string | 是 | 在数据源配置(RedisConfs)中配置好的 redis 的自定义名称,如数据源配置中的 redis_info |
RedisPrefix | string | 是 | key 前缀 |
FeatureKey | string | 是 | 根据引擎中哪个特征,去特征表里进行查询。 FeatureKey 标明查找的值来自于 user 或者 item 的哪个字段。比如,user:uid 获取 user 的 uid 属性值,item:pair_id 获取 item 的 pair_id 的属性值。 |
FeatureStore | string | 是 | 枚举值:user/item。表示特征获取到之后,存储到哪里 |
OTS(tablestore)
配置示例
"FeatureConfs" :{
"scene_name" :{
"AsynLoadFeature" : true,
"FeatureLoadConfs": [{
"FeatureDaoConf": {
"AdapterType": "tablestore",
"TableStoreName": "",
"FeatureKey": "user:uid",
"UserFeatureKeyName" :"uid",
"TableStoreTableName" : "",
"UserSelectFields":"",
"FeatureStore":"user"
},
"Features" :[]
},
{
"FeatureDaoConf": {
"AdapterType": "tablestore",
"TableStoreName": "",
"FeatureKey": "item:id",
"ItemFeatureKeyName" :"item_id",
"TableStoreTableName" : "",
"ItemSelectFields":"",
"FeatureStore":"item"
},
"Features" :[]
}]
}
}
FeatureLoadConfs/FeatureDaoConf
字段名 | 类型 | 是否必填 | 描述 |
AdapterType | string | 是 | 数据源的类型,取值为 tablestore |
TableStoreName | string | 是 | 在数据源配置(TableStoreConfs)中配置好的 tablestore 的自定义名称,如数据源配置中的 tablestore_info |
FeatureKey | string | 是 | 根据引擎中哪个特征,去特征表里进行查询。 FeatureKey 标明查找的值来自于 user 或者 item 的哪个字段。比如,user:uid 获取 user 的 uid 属性值,item:pair_id 获取 item 的 pair_id 的属性值。 |
UserFeatureKeyName | string | 否 | user 特征表的主键字段 |
ItemFeatureKeyName | string | 否 | item 特征表的主键字段 |
TableStoreTableName | string | 是 | tablestore 中特征表的表名 |
UserSelectFields | string | 否 | 需要获取的 user 特征,支持"*",表明获取所有,也可以 "feature1,feature2" |
ItemSelectFields | string | 否 | 需要获取的 item 特征,支持"*",表明获取所有,也可以 "feature1,feature2" |
FeatureStore | string | 是 | 枚举值:user/item。表示特征获取到之后,存储到哪里 |
PAI-FeatureStore(特征平台)
PAI-FeatureStore 平台的使用配置参考FeatureStore概述。
配置示例
{
"FeatureConfs" :{
"scene_name": {
"AsynLoadFeature": true,
"FeatureLoadConfs": [{
"FeatureDaoConf": {
"AdapterType": "featurestore",
"FeatureStoreName": "pairec-fs",
"FeatureKey": "user:uid",
"FeatureStoreModelName": "rank_v1",
"FeatureStoreEntityName": "user",
"FeatureStore": "user"
}
}]
}
}
}
FeatureLoadConfs/FeatureDaoConf
字段名 | 类型 | 是否必填 | 描述 |
AdapterType | string | 是 | 数据源的类型,取值为 featurestore |
FeatureStoreName | string | 是 | 在数据源配置(FeatureStoreConfs)中配置好的 holo 的自定义名称,如数据源配置中的 fs_info |
FeatureKey | string | 是 | 根据引擎中哪个特征,去特征表里进行查询。 FeatureKey 标明查找的值来自于 user 或者 item 的哪个字段。比如,user:uid 获取 user 的 uid 属性值,item:pair_id 获取 item 的 pair_id 的属性值。 |
FeatureStoreModelName | string | 是 | 特征平台(feature store)中的 modelfeature name |
FeatureStoreEntityName | string | 是 | 特征平台(feature store)中的 entity name |
FeatureStore | string | 是 | 枚举值:user/item。表示特征获取到之后,存储到哪里 |
特征转化
上面提到 , Features 可以做些特征转化的工作。 来看下常用到的具体几个例子
经常会用到 day_h, week_day 两个特征, 这两个特征是实时生成的。
{
"FeatureType": "new_feature",
"FeatureName": "day_h",
"Normalizer": "hour_in_day",
"FeatureStore": "user"
}
{
"FeatureType": "new_feature",
"FeatureName": "week_day",
"Normalizer": "weekday",
"FeatureStore": "user"
}
FeatureType = new_feature 新生成特征
FeatureName 特征名称
生成随机数, 有些时候会用到随机数进行概率判断。 下面会生成 rand_int_v 特征,区间在 [0 - 100)
{
"FeatureType": "new_feature",
"FeatureName": "rand_int_v",
"Normalizer": "random",
"FeatureStore": "user"
}
生成固定值, 生成 alg 特征名称,值为 ALRC
{
"FeatureType": "new_feature",
"FeatureStore": "user",
"Normalizer": "const_value",
"FeatureValue": "ALRC",
"FeatureName": "alg"
}
根据表达式生成特征, 下面生成了 bool 的特征, is_retarget, 通过判断 recall_name 是否在数组中。 bool 的特征的值,实际用 1 or 0 表示。
{
"FeatureType": "new_feature",
"FeatureStore": "item",
"FeatureSource": "item:recall_name",
"Normalizer": "expression",
"Expression": "recall_name in ('retarget_u2i','realtime_retarget_click')",
"FeatureName": "is_retarget"
}
Expression 表达式, 表达式规则,可以参考 https://github.com/Knetic/govaluate
FeatureSource 表示特征值来源于哪里, item:recall_name, 说明来源于 item 的 recall_name 特征。如果 Expression 中有多个 item 的属性值,FeatureSource 可以不设置,会把 item 的所有属性值传入到 Expression 进行计算。