背景
PAI-Rec 引擎本身就是一个 pipeline 处理流程, 把召回、过滤、粗排、特性加载、精排等各个阶段串联起来。但有时候,只有一条 pipeline 的处理流程是不够的。比如冷启动流程,它需要一条单独的 pipeline 来处理,因为冷启动的粗排、精排等流程与主链路是不同的。另一种情形是,在首页推荐流中,会有图文、视频等多种数据,图文,视频的处理链路是不同的,需要走不同的 pipeline , 最终把数据混排在一起。
目前通过 PAI-Rec 可以自定义 pipeline 流程,来处理单独的链路而区别于主链路流程。 可以通过配置文件来描述 pipeline , 并且可以结合 AB 服务,在实验中动态调整 pipeline 流程。
整体架构
当前主链路的流程如下:
当前在同一个场景中,可以配置多条 pipeline 流程,最终与主链路的数据 merge 到一起。
自定义 Pipeline 配置
配置如下:
{
"PipelineConfs": {
"video_feed": [ // 场景名称,场景,可以配置多个 pipeline
{
"Name": "coldstart", // 自定义 pipeline 名称,全局唯一,不同场景也要唯一
"RecallNames": [], // 召回列表, RecallConfs 里定义
"FilterNames": [], // 过滤列表, FilterConfs 里定义
"GeneralRankConf": { // 粗排定义, 可以参考粗排的配置
"FeatureLoadConfs":[],
"RankConf":{},
"ActionConfs": [
{
"ActionType": "filter",
"ActionName": ""
}
]
},
"FeatureLoadConfs":[],
"RankConf":{
"RankAlgoList":[],
"RankScore":"",
"Processor":"",
"BatchCount": 100
},
"ColdStartRankConf": {
"AlgoName":"",
"OnlyEmbeddingFeature": true
},
"SortNames":[] // 排序处理,SortConfs 里定义
}
]
}
}
上述的配置基本上与主链路的配置是一致的,上面是完整的配置,并不是所有的字段都是必须的。解释说明如下:
PipelineConfs 所有的 pipeline 的定义都放在这里, 支持多场景配置
Name 自定义pipeline 名称,在配置里全局唯一
RecallNames 召回列表,名称可以在 RecallConfs 里定义,也可以是自定义的召回
FilterNames 过滤列表, 名称可以在 FilterConfs 里定义,也可以是自定义的过滤
GeneralRankConf 粗排配置。 这个不是必须的。 具体的定义可以参考粗排配置
FeatureLoadConfs 特征加载,具体可以参考特征配置
RankConf/ColdStartRankConf 这两个是互斥的配置,如果是想用冷启动算法, 配置 ColdStartRankConf 就可以了。 如果是模型的精排,可以配置 RankConf
SortNames 自定义排序,这个也不是必须的。是否对pipeline 的数据做进一步处理,可以在这里做。 名称可以在 SortConfs 里找到,或者自定义的排序
实验参数支持
在很多情况下,需要对 pipeline 的流程做实验对比,pipeline 中的各个子阶段都支持实验参数,模式为 "pipelines." + {pipeline 名称} + ".{子阶段名称}"。具体详情如下
参数名称 | 参数类型 | 参数说明 | 样例 |
"pipelines." + {pipeline 名称} + ".RecallNames" | json array | 召回的列表,需要包含所有的召回 | {"pipelines.coldstart.RecallNames":[ "ColdStartRecall"]} |
"pipelines." + {pipeline 名称} + ".FilterNames" | json array | 过滤列表,包含所有的过滤流程 | {"pipelines.coldstart.FilterNames":["UniqueFilter", "UserExposureFilter"]} |
"pipelines." + {pipeline 名称} + ".GeneralRankConf" | recconf.GeneralRankConfig | 粗排配置 | {"pipelines.coldstart.GeneralRankConf":{"Actions":[]}} |
"pipelines." + {pipeline 名称} + ".FeatureLoadConfs" | []recconf.FeatureLoadConfig | 特征加载配置 | {"pipelines.coldstart.FeatureLoadConfs":[{"FeatureDaoConf":{}}]} |
"pipelines." + {pipeline 名称} + ".RankConf" | recconf.RankConfig | 排序算法的配置 | { "pipelines.coldstart.RankConf" :{ "RankAlgoList" :[ "pai_homepage_fm" ], "RankScore":"${pai_homepage_fm}" } } |
"pipelines." + {pipeline 名称} + ".ColdStartRankConf" | recconf.ColdStartRankConfig | 冷启动算法配置 | { "pipelines.coldstart.ColdStartRankConf" :{ "AlgoName":"" , "OnlyEmbeddingFeature":true } } |
"pipelines." + {pipeline 名称} + ".SortNames" | json array | 排序列表 | { "pipelines.coldstart.SortNames":[]} |