ReAgent Serving Platform (RASP) 实战教程:构建电商推荐系统
概述
ReAgent Serving Platform (RASP) 是ReAgent项目中的一个强大组件,它提供了一套完整的评分和排序功能,以及系统化的数据收集和模型部署方法。本教程将通过构建一个模拟电商推荐系统的完整流程,帮助开发者理解如何在实际业务场景中使用RASP进行大规模决策推理。
RASP核心概念
RASP的核心工作流程可以概括为:
- 输入一组潜在动作(如商品推荐)
- 通过决策计划(Decision Plan)进行评分和排序
- 输出一个有序的评分列表
决策计划定义了如何对动作进行评分和排序的逻辑。在本教程中,我们将创建多种不同的决策计划,并通过模拟用户流量来观察效果。
环境准备
在开始本教程前,请确保已完成ReAgent的安装。安装过程包括设置Python环境、安装必要的依赖库等步骤。
案例场景:Pig-E-Barbeque电商推荐
我们以一家名为Pig-E-Barbeque的猪肉电商为例,该商店销售两种产品:
- 肋排(Ribs)
- 培根(Bacon)
我们的优化目标是最大化点击率。初始阶段,我们对访客一无所知,但知道培根通常更受欢迎,因此我们给培根初始评分1.1,肋排1.0。
基础决策计划
我们首先使用SoftmaxRanker作为排名函数,其核心是softmax函数:
import numpy as np
def softmax(x):
e_x = np.exp(x - np.max(x))
return e_x / e_x.sum()
print(softmax([1.1, 1.0])) # 输出: [0.52497919 0.47502081]
对应的决策计划生成器如下:
def softmaxranker_decision_plan():
op = SoftmaxRanker(temperature=1.0, values={"Bacon": 1.1, "Ribs": 1.0})
return DecisionPlanBuilder().set_root(op).build()
这种方案下,培根有约52%的展示机会,肋排约48%,这解决了冷启动问题(即探索-利用困境)。
用户模拟器
由于这不是真实的电商平台,我们需要一个用户模拟器,其规则如下:
- 访客点击培根推荐的概率为50%
- 10%的访客是肋排爱好者,其余是普通访客
- 肋排爱好者点击肋排推荐的概率为90%
- 普通访客点击肋排推荐的概率为10%
运行基准测试
启动RASP服务器后,运行模拟器进行1000次调用:
python customer_simulator.py heuristic.json
结果示例:
- 平均奖励(点击率):0.363
- 动作分布:{'Ribs': 471, 'Bacon': 529}
这与我们的softmax计算预期一致。从详细日志可以看到:
- 肋排被点击88次,未被点击390次
- 培根被点击266次,未被点击253次
进阶方案:多臂选择算法
我们可以使用UCB1多臂选择算法来改进推荐效果。UCB1会自动学习调整展示策略,其决策计划生成器如下:
def ucb_decision_plan():
op = UCB(method="UCB1", batch_size=16)
return DecisionPlanBuilder().set_root(op).build()
运行结果:
- 第一次运行平均奖励:0.447
- 动作分布:{'Ribs': 184, 'Bacon': 816}
- 第二次运行平均奖励提升至0.497
- 动作分布进一步偏向培根:{'Bacon': 926, 'Ribs': 74}
UCB1算法成功学习到培根的整体表现更好,因此增加了其展示频率。
上下文感知推荐
当我们的数据科学家发现可以识别肋排爱好者后,我们可以引入上下文特征(1表示肋排爱好者,0表示普通访客),使用上下文选择模型。
训练流程:
- 收集足够的历史数据(约10000个样本)
- 转换日志格式为模型输入格式
- 构建时间线数据
- 训练上下文选择模型
训练完成后,我们可以将模型与SoftmaxRanker结合使用:
{
"operators": [
{
"name": "ActionValueScoringOp",
"op_name": "ActionValueScoring",
"input_dep_map": {
"model_id": "model_id",
"snapshot_id": "snapshot_id"
}
},
{
"name": "SoftmaxRankerOp",
"op_name": "SoftmaxRanker",
"input_dep_map": {
"temperature": "constant_2",
"values": "ActionValueScoringOp"
}
}
],
"constants": [...],
"num_actions_to_choose": 1,
"reward_function": "reward",
"reward_aggregator": "sum"
}
运行结果:
- 平均奖励提升至0.52
- 动作分布:{'Bacon': 883, 'Ribs': 117}
这超过了单纯推荐培根的50%点击率,说明模型成功识别并针对肋排爱好者进行了优化。理论最佳分数为0.54((0.90.5 + 0.10.9)),我们的结果已接近这一上限。
总结
本教程展示了如何使用ReAgent Serving Platform从基础推荐系统逐步升级到智能上下文感知推荐系统的完整流程。关键点包括:
- 初始阶段使用SoftmaxRanker解决冷启动问题
- 使用多臂选择算法自动优化展示策略
- 引入上下文特征后使用上下文选择模型实现个性化推荐
虽然本教程聚焦于即时决策场景,但ReAgent同样支持考虑长期价值的强化学习方案,这为更复杂的业务场景提供了可能性。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考