排序配置

排序(Sort) 阶段在精排之后执行,在这里可以进行排序以及打散、窗口规则等逻辑。

排序的配置与召回的配置是类似的。具体的排序配置定义放在 SortConfs 。SortNames 提供分场景(scene) 的配置,每个 scene 对应一组排序名称。如果场景没有显式的配置,则走 default 场景配置。

{
 "SortConfs": [
    {
      "Name": "MixSort",
      "SortType": "MultiRecallMixSort",
      "RemainItem": false,
      "MixSortRules": [
        {
          "MixStrategy": "random_position",
          "NumberRate": 0.1,
          "RecallNames": [
            "OTSGlobalHot"
          ]
        }
      ]
    }
  ],
        "SortNames":{
         "default": ["ItemRankScore", "MixSort"]
        }
}

BoostScoreSort

当调用精排模型后,每个 item 会有个模型 score, 有时候根据业务运营需求,需要对 score 进行操作,即提降权操作。引擎服务本身支持自定义 function 来支持提降权操作,具体操作参考提权操作自定义 ,但这里需要自定义开发代码。

为了更方便的设置提降权操作,我们这里也支持通过规则设置来进行提降权操作。规则设置上,分为两部分

  • 设置条件规则,通过 item 某些属性,比如召回id, 类目,画像特征等属性来判断是否符合规则条件

  • 设置提降权表达式,目前只支持对 score 设置表达式,比如 score 1.2, score 0.5 等等

整体配置如下:

{
      "Name": "BoostScoreSort",
      "SortType": "BoostScoreSort",
      "Debug": false,
      "BoostScoreConditions": [
        {
          "Conditions": [
            {
              "Name": "recall_name",
              "Type": "string",
              "Value": "OTSGlobalHot",
              "Operator": "equal"
            }
          ],
          "Expression": "score * 2"
        },
        {
           "Conditions": [
            {
              "Name": "recall_name",
              "Type": "string",
              "Value": "UserTopicRecall",
              "Operator": "equal"
            }
          ],
          "Expression": "score * 1.2"
        }
      ]
    }

  • Name 自定义的 sort 名称

  • SortType 类型, 固定值 BoostScoreSort

  • Debug 测试标记,这里为 true 情况下, 提降权之前的原始 score 会以 org_score 记录到 item 的 properties 中,然后请求中打开 debug 标记,可以看到 item 属性值。这只为了方便调试,线上不应该打开

  • BoostScoreConditions 具体的提降权规则配置, 可以设置成多条规则,每一条规则对于匹配的数据进行相应的提降权操作。具体的每条规则设置如下:

  • Conditions 条件规则, 可以设置多个匹配规则。匹配规则具体设置可以参考状态过滤。 匹配规则和 FilterParams 里的设置是一致的。

  • Name 可以理解成 item 的 properties 的属性名称。recall_name 指的是召回id。 这里的 Name 必须在 item properties 里找到

  • Expression 提降权表达式,目前 score 指的是原始的 item 的score, 目前只支持 score 的引用,不支持其它额外属性的引用。

ItemRankScore

在精排阶段,只是从模型获取得分,并没有对 item 进行实际的排序。 ItemRankScore 可以对 item 进行倒序排序,这个是引擎内置的。 可以直接在 SortNames 中使用。

DiversityRuleSort

在推荐结果进行输出时,我们除了考虑要抓住用户的兴趣点,还要考虑推荐条目多样性的需求,即不同品类,不同属性的物品可以混合输出。

这里我们配置的规则参考如下:

image.png

具体配置详情:

    {
      "Name": "DiversityRuleSort",
      "SortType": "DiversityRuleSort",
      "DiversitySize": 100,
      "ExcludeRecalls": [
        "ColdStartVideoVectorRecall",
        "LinUcbRecall_default2"
      ],
      "DiversityRules": [
        {
          "Dimensions": [
            "primaryId"
          ],
          "IntervalSize": 1,
          "WindowSize": 10,
          "FrequencySize": 3
        }
      ]
    }

  • Name 自定义的 sort 名称

  • SortType 类型, 固定值 DiversityRuleSort

  • DiversitySize 多样性窗口大小,可以默认不指定。当不指定的时候,默认值为当前请求的 Size 大小。举个例子,比如在精排有500个条目,DiversitySize 会控制多少个条目需要多样性排序,很多情况下,不需要对 500 个都进行多样性排序。

  • ExcludeRecalls 需要排除多样性排序的召回 id 列表。 在有冷启动召回的情况,这些条目的维度信息可能确实,可以不进行多样性控制。

  • DiversityRules 多样性规则列表,可以设置多个规则,Item 条目都满足的情况下,才会加入多样性列表。当也有时候会出现,遍历了所有的条目后,都无法符合规则的话,会把当前最前面的条目加入到列表中,保证 item 是有序的。

  • 上面说明中有两个打散策略,IntervalSize 控制最小间隔, 此值也可以不设置,说明不需要控制间隔

  • WindowSize 和 FrequencySize 控制窗口规则, 如果不需要控制窗口规则,这两个值可以不设置

MultiRecallMixSort

一般情况下,我们会有很多路召回,为了运营需求或者根据召回的类型,需要混合输出。比如

  • 对冷启动召回有曝光数量的要求

  • 多某一路召回有位置的要求

也可能包括多个混排规则。整体配置如下:

{
"SortConfs": [
    {
      "Name": "MixSort",
      "SortType": "MultiRecallMixSort",
      "RemainItem": false,
      "MixSortRules": [
        {
          "MixStrategy": "random_position",
          "NumberRate": 0.1,
          "RecallNames": [
            "OTSGlobalHot"
          ]
        },
          {
          "MixStrategy": "fix_position",
          "Positions": [1,3,5],
          "RecallNames": [
            "RecallName1"
          ]
        }
      ]
    }
  ]
}

  • Name 自定义的 sort 名称

  • SortType 类型, 固定值 MultiRecallMixSort

  • RemainItem 是否保留所有的item , 比如有 500 个 item 需要处理,但我们一次请求假设有 30 个, 当为 false 情况下, item 数量只会保留混排的结果, 当为 true 情况下, 剩余的 item 也保留下来,不过在 30 item 结果的后面。 这样后续还可以再对接 sort 进行进一步控制处理

  • MixSortRules 里面包含混排的规则列表

  • MixStrategy 混排策略,目前只有两个, random_position 标识位置随机, fix_position 标识固定位置, fix_position 的情况下,需要指定 Positions。 Positions 的位置从 1 开始, 在上面的例子中, RecallName1 的召回 item 在位置 1, 3, 5 上进行输出。

  • NumberRate 空值输出的数量, random_position 下设置。 有效值为 0 ~ 1, 具体数量通过请求的Size * NumberRate 算出。 这里也可以使用绝对值,使用 Number 代替 NumberRate

  • RecallNames 召回的名称,可以设置多个,设置多个的情况下,共享配置,但是具体哪个召回,不固定,顺序由进入到此 Sort 的位置决定

阿里云首页 智能推荐 AIRec 相关技术圈