粗排配置

当我们完成召回,过滤(曝光、状态)等, 为了性能考虑,需要对 item 数量进行裁剪才能进入排序阶段。有时候可以通过简单的数量调整可以进行数量裁剪,比如使用 数量调整过滤(AdjustCountFilter)优先级数量调整过滤(PriorityAdjustCountFilter) 来手动调整数量。

目前 PAI-REC 也支持通过调用模型来得到粗排得分,通过得分来进行数量裁剪。粗排使用模型可以得到更个性化、更精细的召回。

粗排大致分为三个阶段,每个阶段都不是必须,看实际场景设置。

  • 特征加载, 这里和排序之前的特征加载配置是一样的。参考特征配置

  • 模型调用, 配置与精排里的排序配置也保持一致。 参考算法配置

  • 一系列 Action 操作, 这里可以多种操作,比如调用粗排模型之后,需要先排序, 然后再获取得分高的部分item。Action 操作包含 sort , filter 等多种操作,这里配置好后,按照配置顺序执行。

在粗排的配置中,需要考虑冷启动召回的item , 如果用统一的粗排模型, 冷启动的item由于缺少特征可能会被打低分,需要对冷启动召回的item进行单独的粗排配置。 目前粗排分两种, 主链路配置和冷启动召回的配置,当然,如果没有冷启动的召回,只配置主链路的配置也是可以的。如果有冷启动的链路,推荐使用 Pipeline 来设置冷启动的链路。参考自定义Pipeline流程

GeneralRankConfs

主链路上的粗排配置对应配置总览中的 GeneralRankConfs,GeneralRankConfs 是一个 Map[string]object 结构,其中 key 为场景,可以分场景使用不同粗排策略。

配置示例:

{
"GeneralRankConfs":{
    "scene_name":{
        "FeatureLoadConfs":[
            {
                "FeatureDaoConf":{
                    "AdapterType":"hologres",
                    "HologresName":"",
                    "FeatureKey":"user:uid",
                    "UserFeatureKeyName":"userid",
                    "HologresTableName":"",
                    "UserSelectFields":"*",
                    "FeatureStore":"user"
                },
                "Features":[

                ]
            }
        ],
        "RankConf":{
            "RankAlgoList":[
                "sv_rocket_launching"
            ],
            "RankScore":"${sv_rocket_launching}",
            "ContextFeatures":["none"],
            "BatchCount":100,
            "Processor":"EasyRec"
        },
        "ActionConfs":[
            {
                "ActionType":"sort",
                "ActionName":"ItemRankScore"
            },
            {
                "ActionType":"filter",
                "ActionName":"GeneralCountFilter"
            }
        ]
    }
},
"FilterConfs" :[
{
      "Name": "GeneralCountFilter",
      "FilterType": "AdjustCountFilter",
      "ShuffleItem": false,
      "RetainNum": 500
}
]
}

配置中的 FeatureLoadConfs 和 RankConf 和精排中的特征加载,算法配置是一样的,当然这两个也不是必须的。

ActionConfs 是一组操作的结合, ActionType 标识操作类型,目前支持 sort 和 filter。 ActionName 标识操作的名称,名称必须在各自的类型配置中找到。 比如, ItemRankScore 会根据 score 进行排序, 这个是引擎里预定义的。 而 GeneralCountFilter 必须在 FilterConfs 里配置才行。

上面 ActionConfs 总的含义是首先执行 ItemRankScore 排序,得分高的item 排在前面,然后进行数量调整,ShuffleItem 为false 不需要进行位置调整,只保留item 数量为 500。

ColdStartGeneralRankConfs

冷启动的粗排配置单独列出,实际上比 GeneralRankConfs 多了 RecallNames 字段,表示需要对哪些召回进行冷启动的粗排设置。

配置示例:

"ColdStartGeneralRankConfs": {
    "scene_name": {
      "RecallNames": [
        "ColdStartRecall",
        "ColdStartVideoVectorRecall",
        "VideoColdStartRecall1",
        "VideoColdStartRecall2",
        "VideoColdStartRecall3",
        "VideoColdStartRecall4",
        "LinUcbRecall",
        "LinUcbRecall_default",
        "LinUcbRecall_highQuality",
        "LinUcbRecall_default2"
      ],
      "ActionConfs": [
        {
          "ActionType": "filter",
          "ActionName": "PriorityAdjustCountFilterV4"
        }
      ]
    }
  }