使用RUCAIBox/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:考虑排名位置的折扣累积增益
进阶建议
- 尝试不同的序列推荐模型,如SASRec、BERT4Rec等
- 调整序列最大长度,观察对模型效果的影响
- 实验不同的嵌入维度和GRU层数
- 使用更大的数据集测试模型性能
- 尝试不同的评估策略,如留一法评估
通过RUCAIBox/RecBole框架,你可以轻松实现序列推荐任务,并快速验证不同模型和参数配置的效果。
GLM-5智谱 AI 正式发布 GLM-5,旨在应对复杂系统工程和长时域智能体任务。Jinja00
GLM-5-w4a8GLM-5-w4a8基于混合专家架构,专为复杂系统工程与长周期智能体任务设计。支持单/多节点部署,适配Atlas 800T A3,采用w4a8量化技术,结合vLLM推理优化,高效平衡性能与精度,助力智能应用开发Jinja00
请把这个活动推给顶尖程序员😎本次活动专为懂行的顶尖程序员量身打造,聚焦AtomGit首发开源模型的实际应用与深度测评,拒绝大众化浅层体验,邀请具备扎实技术功底、开源经验或模型测评能力的顶尖开发者,深度参与模型体验、性能测评,通过发布技术帖子、提交测评报告、上传实践项目成果等形式,挖掘模型核心价值,共建AtomGit开源模型生态,彰显顶尖程序员的技术洞察力与实践能力。00
Kimi-K2.5Kimi K2.5 是一款开源的原生多模态智能体模型,它在 Kimi-K2-Base 的基础上,通过对约 15 万亿混合视觉和文本 tokens 进行持续预训练构建而成。该模型将视觉与语言理解、高级智能体能力、即时模式与思考模式,以及对话式与智能体范式无缝融合。Python00
MiniMax-M2.5MiniMax-M2.5开源模型,经数十万复杂环境强化训练,在代码生成、工具调用、办公自动化等经济价值任务中表现卓越。SWE-Bench Verified得分80.2%,Multi-SWE-Bench达51.3%,BrowseComp获76.3%。推理速度比M2.1快37%,与Claude Opus 4.6相当,每小时仅需0.3-1美元,成本仅为同类模型1/10-1/20,为智能应用开发提供高效经济选择。【此简介由AI生成】Python00
Qwen3.5Qwen3.5 昇腾 vLLM 部署教程。Qwen3.5 是 Qwen 系列最新的旗舰多模态模型,采用 MoE(混合专家)架构,在保持强大模型能力的同时显著降低了推理成本。00- RRing-2.5-1TRing-2.5-1T:全球首个基于混合线性注意力架构的开源万亿参数思考模型。Python00