整合 A/B 實驗功能

-
上圖中的Client指的是客戶側服務。客戶可以通過PAI-Rec控制台進行實驗配置。
-
當客戶整合PAI-Rec引擎服務後,引擎服務啟動後,會自動拉取實驗配置,當推薦請求到來時,SDK會進行實驗匹配,並能關聯到具體實驗的實驗參數。通過不同的實驗參數,引擎會體現不同的行為,走不同的召迴路徑,或者調用不同的Rank模型。
-
PAI-Rec 本身已經預定了一些實驗參數,可以直接在實驗配置中使用。設定實驗參數,需要完全按照參數名稱的規則來,否則匹配了實驗,也找不到對應的參數。
|
參數名稱 |
參數類型 |
參數說明 |
範例 |
|
default.RecallNames |
json array |
召回的列表,需要包含所有的召回 |
"default.RecallNames":[ "HomepageEtrecRecall", "HomepageDssmRecall"] |
|
"recall." + 具體的recall name |
json object |
根據 recall config , 建立新的 recall |
{"recall.MyRecall":{"version":"v2"}} |
|
filterNames |
json array |
過濾列表,包含所有的過濾流程 |
{"filterNames":["UniqueFilter", "UserExposureFilter"]} |
|
default.SortNames |
json array |
重排列表,包含所有的重排流程 |
{"default.SortNames":["ItemRankScore"]} |
|
rankconf |
recconf.RankConfig |
排序演算法的配置 |
"rankconf":{"RankAlgoList":["pai_homepage_fm"],"RankScore":"${pai_homepage_fm}"} |
|
features.scene.name |
string |
Features load 對應的情境名稱 |
"homepagetf" |
|
generalRankConf |
recconf.GeneralRankConfig |
粗排的配置, 包括 user feature 的擷取,演算法配置 RankConf, 詳細配置參考粗排配置 |
{"generalRankConf":{"FeatureLoadConfs":[{"FeatureDaoConf":{}}],"RankConf":{},"ActionConfs":[]}} |
|
coldStartGeneralRankConf |
recconf.ColdStartGeneralRankConfig |
冷啟動粗排配置, 詳細配置參考粗排配置 |
{"coldStartGeneralRankConf":{"FeatureLoadConfs":[{"FeatureDaoConf":{}}],"RankConf":{},"ActionConfs":[]}} |
|
coldStartRankConf |
recconf.ColdStartRankConfig |
冷啟動召回,rank 階段配置,指定 rank 演算法 |
{"coldStartRankConf":{"RecallName":"ColdStartRecall", "AlgoName":"linucb"}} |
func (c *HomeFeedController) makeRecommendContext() {
c.context = context.NewRecommendContext()
c.context.Size = c.param.Limit
c.context.Param = &c.param
c.context.RecommendId = c.RequestId
c.context.Config = recconf.Config
c.context.Debug = c.param.Debug
abcontext := model.ExperimentContext{
Uid: c.param.DistinctId,
RequestId: c.RequestId,
FilterParams: map[string]interface{}{},
}
if abtest.GetExperimentClient() != nil {
c.context.ExperimentResult = abtest.GetExperimentClient().MatchExperiment(c.param.SceneId, &abcontext)
log.Info(c.context.ExperimentResult.Info())
}
}
-
使用者代碼調整實驗參數,只要有 RecommendContext 對象,都能通過 context.ExperimentResult 擷取到。
count := r.recallCount
if context.ExperimentResult != nil {
count = context.ExperimentResult.GetLayerParams("").GetInt("recall.base.count", count)
}
fmt.Println("test count", count)
GetLayerParams 擷取某一層上的實驗參數,可以通過Get、GetInt、GetFloat、GetInt64擷取參數,第一個參數是參數名稱,第二個參數是預設值,如果沒有找到的情況下,返回預設值。
整合 A/B 參數功能
類似上文的實驗參數路徑,PAI-Rec引擎服務運行時,可以通過自訂的參數配置來改變引擎行為。這樣無需重啟服務就可以動態改變服務狀態。
在左側導覽列中單擊系統配置 > 參數管理,選擇當前開發環境(如日常)和推薦情境(如HomePage),然後單擊建立參數按鈕添加自訂參數。例如,建立參數名稱為 custom_param、參數值為 custom 的參數。
// 擷取到具體的情境名稱
scene := context.GetParameter("scene").(string)
// 根據情境擷取參數列表,然後用具體的 Get* function 擷取具體的參數值
count := abtest.GetParams(scene).GetInt("count", 100)
fmt.Println("recall count:", count)