背景
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":[]} |