BE引擎召回配置

阿里云召回引擎BE,是阿里巴巴集团推荐行业自研的召回引擎,提供全面召回的能力,具有高稳定、高性能的索引和查询机制、低运维成本、通过灵活过滤和配置策略加速迭代效率,支持秒级在线实时数据更新等特性。详细的介绍参考产品简介

PAI-Rec 引擎内建支持对于 BE 引擎的访问,本文介绍如何通过配置就可以从 BE 召回数据。

数据源

首先要配置下数据源,这样通过数据源就可以访问到BE 引擎。

{
  "BEConfs": {
    "be-test": {
      "Username": "",
      "Password": "",
      "Endpoint": "http://xxx.aime.aliyuncs.com"
    }
  }
}

上面的配置可以从 BE 实例控制台获取到

image-20220311085350245.png

召回

BE 支持 X2I、向量、多路合并的多种类型的召回。这些召回的配置基本类似,下面一一说明。

X2I 召回

{
      "Name": "BeX2IRecall",
      "RecallType": "BeRecall",
      "BeConf": {
        "BeName": "be-test",
        "BizName": "pairec_test1",
        "BeRecallType": "x2i_recall",
        "BeRecallParams": [
          {
            "Count": 200,
            "TriggerType": "user",
            "UserTriggers": [
              {
                "TriggerKey": "uid"
              }
            ],
            "ItemIdName": "item_id"
          }
        ]
      }
}

  • Name 自定义的召回名称

  • RecallType 召回类型,固定值 BeRecall

  • BeConf Be 召回配置

  • BeName 数据源里 BEConfs 自定义的数据源名称

  • BizName 服务名称

  • BeRecallType 召回类型, 固定值 x2i_recall

  • BeRecallParams 召回参数设置

  • Count 召回数量

  • TriggerType 在使用 X2I 召回时,有 trigger_id 的设置, trigger_id 可能来自于固定值,也可能来自于 user 的属性信息,比如 uid 。这里的 trigger_id 设置的是 user 里的 uid 。

  • ItemIdName X2I 里 I 在表的名称。 我们会把这个字段当成 item id

向量召回

{
      "Name": "BeVectorRecall",
      "RecallType": "BeRecall",
      "BeConf": {
        "BeName": "be-test",
        "BizName": "pairec_test1",
        "BeRecallType": "vector_recall",
        "BeRecallParams": [
           {
            "Count": 200,
            "TriggerType": "be",
            "TriggerParam": {
              "BizName": "pairec_user_emb",
              "FieldName": "user_emb"
            },
            "ItemIdName": "item_id"
          }
        ]
      }
}

  • Name 自定义的召回名称

  • RecallType 召回类型,固定值 BeRecall

  • BeConf Be 召回配置

  • BeName 数据源里 BEConfs 自定义的数据源名称

  • BizName 服务名称

  • BeRecallType 召回类型, 固定值 vector_recall

  • BeRecallParams 召回参数设置

  • Count 召回数量

  • TriggerType 向量召回里, trigger_id 是 user 向量。但 user 向量我们会单独存在单独的 X2I 服务里。也就是说,向量召回会分两步,首先从 X2I 获取用户向量。通过 user id 就能获取到用户向量。然后通过向量再去召回。 这里 TriggerType = be 说明从 be 引擎获取 user 向量。 TriggerParam 配置获取 user 向量的 X2I 配置。

  • ItemIdName X2I 里 I 在表的名称。 我们会把这个字段当成 item id

多路合并召回

多数情况下,我们用此路召回。此路召回包含多个子链路召回,每个链路会配置优先级。

{
      "Name": "BeRecall",
      "RecallType": "BeRecall",
      "BeConf": {
        "BeName": "be-test",
        "BizName": "pairec_test1",
        "BeRecallType": "multi_merge_recall",
        "BeRecallParams": [
          {
            "Count": 200,
            "RecallType": "x2i_recall",
            "RecallName": "global_hot",
            "TriggerType": "fixvalue",
            "TriggerValue": "-1",
            "Priority": 5,
            "ItemIdName": "item_id"
          },
          {
            "Count": 200,
            "RecallType": "x2i_recall",
            "RecallName": "etrec",
            "TriggerType": "user",
            "Priority": 2,
            "UserTriggers": [
              {
                "TriggerKey": "uid"
              }
            ],
            "ItemIdName": "item_id"
          },
          {
            "Count": 200,
            "Priority": 1,
            "RecallType": "x2i_recall",
            "RecallName": "swing",
            "TriggerType": "user",
            "UserTriggers": [
              {
                "TriggerKey": "uid"
              }
            ],
            "ItemIdName": "item_id"
          },
          {
            "Count": 200,
            "Priority": 3,
            "RecallType": "vector_recall",
            "RecallName": "dssm",
            "TriggerType": "be",
            "TriggerParam": {
              "BizName": "pairec_user_emb",
              "FieldName": "user_emb"
            },
            "ItemIdName": "item_id"
          },
          {
            "Count": 200,
            "Priority": 4,
            "RecallType": "x2i_recall",
            "RecallName": "group_hot",
            "TriggerType": "user",
            "UserTriggers": [
              {
                "TriggerKey": "gender"
              },
              {
                "TriggerKey": "birthyear",
                "Boundaries": [
                  1970,
                  1975,
                  1980,
                  1985,
                  1990,
                  1995,
                  2000,
                  2005
                ]
              }
            ],
            "ItemIdName": "item_id"
          }
        ]
      }
}

BeRecallParams 包含多个子链路配置。每个子链路需要配置召回类型(RecallType)和召回名称(RecallName)。

  • Priority 标明链路的优先级,与 BE 引擎上配置的一样即可

  • TriggerType 之前已经结果过 user 和 be 的设置。 在子链路 global_hot 上配置的是全局的配置,trigger_id 是固定值。 TriggerType = fixvalue

  • 在 group_hot 分组召回的链路上,可以看到如果配置多个 user 属性的组合

曝光过滤

BE 召回引擎同时支持曝光过滤和状态过滤的配置,那么召回的数据,都会经过这两路过滤。那么配置了曝光过滤的话,引擎实时的结果也需要写入到 BE 引擎中。

BE 的曝光过滤配置如下

{
  "FilterConfs": [
    {
      "Name": "UserExposureFilter",
      "FilterType": "User2ItemExposureFilter",
      "WriteLog": true,
      "DaoConf": {
        "AdapterType": "be",
        "BeName": "be-test",
        "BeExposureUserIdName": "userid",
        "BeExposureItemIdName": "svid",
        "BeTableName": "dwd_sv_exposure_history2"
      }
    }
  ]
}

  • Name 自定义的曝光过滤名称

  • FilterType 过滤类型,固定值 User2ItemExposureFilter

  • WriteLog 标明推荐结果写入到曝光过滤中

  • AdapterType 曝光过滤数据源固定值 be

  • BeName 数据源里 BEConfs 自定义的数据源名称

  • BeTableName 曝光表名称

  • BeExposureUserIdName/BeExposureItemIdName 标明曝光表里的字段名称。 这里配置的是源表字段名称image-20220311093208488.png

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