ReAgent Serving Platform (RASP) 实战教程:构建电商推荐系统

ReAgent Serving Platform (RASP) 实战教程:构建电商推荐系统

ReAgent A platform for Reasoning systems (Reinforcement Learning, Contextual Bandits, etc.) ReAgent 项目地址: https://gitcode.com/gh_mirrors/rea/ReAgent

概述

ReAgent Serving Platform (RASP) 是ReAgent项目中的一个强大组件,它提供了一套完整的评分和排序功能,以及系统化的数据收集和模型部署方法。本教程将通过构建一个模拟电商推荐系统的完整流程,帮助开发者理解如何在实际业务场景中使用RASP进行大规模决策推理。

RASP核心概念

RASP的核心工作流程可以概括为:

  1. 输入一组潜在动作(如商品推荐)
  2. 通过决策计划(Decision Plan)进行评分和排序
  3. 输出一个有序的评分列表

决策计划定义了如何对动作进行评分和排序的逻辑。在本教程中,我们将创建多种不同的决策计划,并通过模拟用户流量来观察效果。

环境准备

在开始本教程前,请确保已完成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%,这解决了冷启动问题(即探索-利用困境)。

用户模拟器

由于这不是真实的电商平台,我们需要一个用户模拟器,其规则如下:

  1. 访客点击培根推荐的概率为50%
  2. 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表示普通访客),使用上下文选择模型。

训练流程:

  1. 收集足够的历史数据(约10000个样本)
  2. 转换日志格式为模型输入格式
  3. 构建时间线数据
  4. 训练上下文选择模型

训练完成后,我们可以将模型与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从基础推荐系统逐步升级到智能上下文感知推荐系统的完整流程。关键点包括:

  1. 初始阶段使用SoftmaxRanker解决冷启动问题
  2. 使用多臂选择算法自动优化展示策略
  3. 引入上下文特征后使用上下文选择模型实现个性化推荐

虽然本教程聚焦于即时决策场景,但ReAgent同样支持考虑长期价值的强化学习方案,这为更复杂的业务场景提供了可能性。

ReAgent A platform for Reasoning systems (Reinforcement Learning, Contextual Bandits, etc.) ReAgent 项目地址: https://gitcode.com/gh_mirrors/rea/ReAgent

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

贺俭艾Kenyon

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值