BE引擎召回配置
阿里云召回引擎BE,是阿里巴巴集团推荐行业自研的召回引擎,提供全面召回的能力,具有高稳定、高性能的索引和查询机制、低运维成本、通过灵活过滤和配置策略加速迭代效率,支持秒级在线实时数据更新等特性。详细的介绍参考产品简介。
PAI-Rec 引擎内建支持对于 BE 引擎的访问,本文介绍如何通过配置就可以从 BE 召回数据。
数据源
首先要配置下数据源,这样通过数据源就可以访问到BE 引擎。
{
"BEConfs": {
"be-test": {
"Username": "",
"Password": "",
"Endpoint": "http://xxx.aime.aliyuncs.com"
}
}
}
上面的配置可以从 BE 实例控制台获取到

召回
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 标明曝光表里的字段名称。 这里配置的是源表字段名称