使用RUCAIBox/RecBole实现序列推荐快速入门

使用RUCAIBox/RecBole实现序列推荐快速入门

RecBole RecBole - 这是一个关于推荐系统的开源项目,包含了一些关于推荐算法、协同过滤、Java 语言的示例和教程。适用于推荐系统、协同过滤、Java 语言编程等场景。 RecBole 项目地址: https://gitcode.com/gh_mirrors/re/RecBole

序列推荐是推荐系统领域的重要研究方向,它通过分析用户的历史交互序列来预测用户可能感兴趣的下一个物品。本文将详细介绍如何使用RUCAIBox/RecBole框架快速实现序列推荐任务,以GRU4Rec模型在ml-100k数据集上的应用为例。

序列推荐基础概念

序列推荐与传统推荐系统的核心区别在于它考虑了用户交互的时间顺序。传统推荐系统如BPR主要关注用户-物品的整体交互矩阵,而序列推荐模型则会利用用户历史交互的时间序列信息来预测下一个可能交互的物品。

准备工作

1. 数据准备

RUCAIBox/RecBole内置了ml-100k数据集,可以直接使用。如果需要使用自定义数据集,需要按照特定格式准备数据。

对于序列推荐任务,我们需要在配置文件中指定以下关键字段:

USER_ID_FIELD: user_id
ITEM_ID_FIELD: item_id
TIME_FIELD: timestamp
load_col:
    inter: [user_id, item_id,timestamp]
ITEM_LIST_LENGTH_FIELD: item_length
LIST_SUFFIX: _list
MAX_ITEM_LIST_LENGTH: 50

这些配置指定了用户ID字段、物品ID字段、时间戳字段,以及序列的最大长度限制。

2. 数据增强处理

序列推荐模型需要对原始数据进行增强处理,生成训练样本。例如,用户u1的交互序列为i1→i2→i3→i4→i5,当MAX_ITEM_LIST_LENGTH=3时,系统会生成以下训练样本:

  • 输入序列:[i1, 填充, 填充],目标物品:i2
  • 输入序列:[i1, i2, 填充],目标物品:i3
  • 输入序列:[i1, i2, i3],目标物品:i4
  • 输入序列:[i2, i3, i4],目标物品:i5

这种处理方式确保了模型能够学习到不同长度的序列模式。

模型选择与配置

我们选择GRU4Rec作为示例模型,这是一种基于门控循环单元(GRU)的序列推荐模型。在配置文件中需要设置以下模型参数:

embedding_size: 64
hidden_size: 128
num_layers: 1
dropout_prob: 0.3
loss_type: 'CE'

这些参数分别控制:

  • embedding_size:物品嵌入向量的维度
  • hidden_size:GRU隐藏层的维度
  • num_layers:GRU的层数
  • dropout_prob:Dropout概率,用于防止过拟合
  • loss_type:损失函数类型,这里使用交叉熵损失

训练与评估配置

序列推荐任务的训练和评估需要特殊配置:

epochs: 500
train_batch_size: 4096
eval_batch_size: 4096
train_neg_sample_args: ~
eval_args:
    group_by: user
    order: TO
    split: {'LS': 'valid_and_test'}
    mode: full
metrics: ['Recall', 'MRR', 'NDCG', 'Hit', 'Precision']
topk: 10
valid_metric: MRR@10

关键配置说明:

  • eval_args.mode: full表示使用全量评估,即考虑所有物品作为候选
  • metrics: 定义了评估指标,包括Recall、MRR等
  • topk: 计算top-10推荐结果
  • valid_metric: 使用MRR@10作为模型选择的标准

运行模型

通过API运行

创建Python脚本run.py,内容如下:

from recbole.quick_start import run_recbole
run_recbole(model='GRU4Rec', dataset='ml-100k', config_file_list=['test.yaml'])

执行脚本后,你将看到类似如下的输出:

Train    43: 100%|█████████████████████████| 24/24 [00:01<00:00, 17.43it/s, GPU RAM: 1.46 G/31.75 G]
16 Jul 21:13    INFO  epoch 43 training [time: 1.38s, train loss: 134.4222]
Evaluate   : 100%|███████████████████████████| 1/1 [00:00<00:00, 86.71it/s, GPU RAM: 1.46 G/31.75 G]
16 Jul 21:13    INFO  epoch 43 evaluating [time: 0.02s, valid_score: 0.043600]
16 Jul 21:13    INFO  valid result: 
recall@10 : 0.1326    mrr@10 : 0.0436    ndcg@10 : 0.0641    hit@10 : 0.1326    precision@10 : 0.0133

通过源代码运行

也可以直接使用命令行运行:

python run_recbole.py --model=GRU4Rec --dataset=ml-100k --config_files=test.yaml

如果需要调整参数,可以直接在命令行中指定:

python run_recbole.py --model=GRU4Rec --dataset=ml-100k --config_files=test.yaml --embedding_size=100

结果分析

模型训练完成后,你会得到在测试集上的评估结果,包括Recall、MRR、NDCG等多个指标。例如:

test result: OrderedDict([('recall@10', 0.1103), ('mrr@10', 0.0337), ('ndcg@10', 0.0513), ('hit@10', 0.1103), ('precision@10', 0.011)])

这些指标从不同角度评估了模型的推荐效果:

  • Recall@10:在前10个推荐结果中命中真实物品的概率
  • MRR@10:考虑命中物品排名的倒数平均值
  • NDCG@10:考虑排名位置的折扣累积增益

进阶建议

  1. 尝试不同的序列推荐模型,如SASRec、BERT4Rec等
  2. 调整序列最大长度,观察对模型效果的影响
  3. 实验不同的嵌入维度和GRU层数
  4. 使用更大的数据集测试模型性能
  5. 尝试不同的评估策略,如留一法评估

通过RUCAIBox/RecBole框架,你可以轻松实现序列推荐任务,并快速验证不同模型和参数配置的效果。

RecBole RecBole - 这是一个关于推荐系统的开源项目,包含了一些关于推荐算法、协同过滤、Java 语言的示例和教程。适用于推荐系统、协同过滤、Java 语言编程等场景。 RecBole 项目地址: https://gitcode.com/gh_mirrors/re/RecBole

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

胡寒侃Joe

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

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

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

打赏作者

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

抵扣说明:

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

余额充值