算法配置
EAS 模型支持
在 Rank 阶段,一般会调用 EAS 上的算法模型服务来获取得分。EAS 支持多种类型模型的部署,pairec 也支持不同模型的调用。包括 pmml, ps,alink, tensorflow, easyrec 等。具体的配置在 AlgoConfs 里。
{
"AlgoConfs": [
{
"Name": "ps_smart",
"Type": "EAS",
"EasConf": {
"Processor": "PMML",
"ResponseFuncName": "pssmartResponseFunc",
"Url": "http://1857***.vpc.cn-hangzhou.pai-eas.aliyuncs.com/api/predict/xxx",
"Auth": "xxx"
}
},
{
"Name": "fm",
"Type": "EAS",
"EasConf": {
"Processor": "ALINK_FM",
"ResponseFuncName": "alinkFMResponseFunc",
"Url": "http://1857***.vpc.cn-hangzhou.pai-eas.aliyuncs.com/api/predict/xxx",
"Auth": "xxx"
}
},
{
"Name": "room3_mt_v2",
"Type": "EAS",
"EasConf": {
"Processor": "TensorFlow",
"ResponseFuncName": "tfMutValResponseFunc",
"Url": "http://1857***.vpc.cn-hangzhou.pai-eas.aliyuncs.com/api/predict/xxx",
"Auth": "xxx"
}
},
{
"Name": "sv_dbmtl",
"Type": "EAS",
"EasConf": {
"Processor": "EasyRec",
"Timeout": 300,
"ResponseFuncName": "easyrecMutValResponseFunc",
"Url": "http://xxx.vpc.cn-beijing.pai-eas.aliyuncs.com/api/predict/xxx",
"Auth": "xxx"
}
}
]
}
ResponseFuncName 指定了需要哪个 function 解析返回的数据,这里与 Processor 类型相匹配。
当 Processor 类型为 TensorFlow 时,请求数据由于模型不同需要做不同的实现。这里需要自定义实现并注册到 pairec 里。
algorithm.RegistRequestDataFunc(algo_name, RequestDataFunc)
// 第一个参数是 algo name
// 第二个参数是特征列表, []map[string]interface{}, 特征列表由 map 表示,这里包含多组特征
type RequestDataFunc func(string, interface{}) interface{}
如果想手动的访问算法模型,只需要构造出相应的 request,根据 algo 名称访问即可。
request := tf.PredictRequest{}
// 初始化 request ...
ret, err := algorithm.Run("room3_mt_v2", &request)
场景下的算法配置
RankConf 里可以配置场景下需要调用哪些算法模型,这里可以并发调用多个 rank 模型。RankAlgoList 的模型名称,必须能在 AlgoConfs 里找到。RankScore 表示多个模型的最终的得分是怎样的。在下面的例子中,单一模型也能可能返回多值,RankScore 会把多值变成一个最终得分。
{
"RankConf": {
"live_feed": {
"RankAlgoList": [
"fm"
],
"RankScore": "${fm}"
},
"live_feed_mutval": {
"RankAlgoList": [
"room3_mt_v2"
],
"RankScore": "${room3_mt_v2_probs_ctr} * (${room3_mt_v2_probs_view} + ${room3_mt_v2_y_view_time} + 0.5 * ${room3_mt_v2_probs_on_wheat} + 0.5 * ${room3_mt_v2_y_on_wheat_time} + 0.25 * ${room3_mt_v2_y_gift} + 0.25 * ${room3_mt_v2_probs_add_friend} + 0.1)"
}
}
}
EasyRec 的算法配置通常如下:
{
"RankConf": {
"video_feed": {
"RankAlgoList": [
"sv_dbmtl_v10"
],
"RankScore": "${sv_dbmtl_v10_probs_is_valid_play} + ${sv_dbmtl_v10_y_play_time} + ${sv_dbmtl_v10_y_play_comlete_rate} + 0.5 * ${sv_dbmtl_v10_probs_is_like} + 0.25 * ${sv_dbmtl_v10_probs_is_comment}",
"BatchCount": 100,
"Processor": "EasyRec"
}
}