tech share
  • tech-share
  • Engineering
    • 登录鉴权
    • SSR 页面路由
    • npm 版本号
    • 缓存
    • 数据库容灾
    • 动态效果导出 gif
    • Chrome-devtools
    • C 端 H5 性能优化
    • Docker
    • Monorepo 最佳实践
    • 技术架构演化
    • 项目规范最佳实践
    • snowpack
    • 静态资源重试
    • 前端页面渲染分析
    • Git
    • 前端重构
    • 微前端
    • 项目依赖分析
    • 前端监控原理
    • webpack
    • BS 架构与 CS 架构
    • HTTPS
    • package-lock.json 生成逻辑
    • SVN(Subversion)
    • 数据库分类
    • gulp
    • 前端架构
    • Bundle & Bundless
    • 控制反转 IoC
  • JavaScript
    • Javascript 性能
    • JavaScript 原型(2) - 原型与原型链
    • JavaScript 原型(1) - 构造函数
    • JavaScript - Promise
    • ES6 解构赋值
    • 前端离线化
    • Proxy
    • Object.defineProperty()简介
    • TypeScript
  • MachineLearning
    • GAN生成对抗网络
    • 虚拟对抗训练
    • 深度度量学习
    • 原型网络
    • PyTorch优化器
    • 隐马尔可夫模型2
    • Shapley Value 算法
    • Embarassingly Autoencoder算法
    • AutoRec算法及其后续发展
    • 深度学习常用激活函数
    • 序列预测ConvTran算法
    • 联邦学习
    • 深度学习推荐系统算法整理
    • 隐马尔可夫模型
    • 黎曼优化方法
    • FM算法
    • 机器学习常见评价指标
    • VAE算法
    • Adam优化器详解
    • Transformer算法
    • Self-attention 推荐算法
    • CNN 卷积神经网络
    • 图嵌入
    • 集成学习算法
    • RecBole开源框架
    • NCE-PLRec
    • 深度学习初始化方法
    • RNN循环神经网络
    • PyTorch数据处理
    • PyTorch安装和基本操作
    • XGBoost算法
    • NCF算法与简单MF的对比
    • 计算最佳传输
  • CSS
    • 什么是BFC
    • 纯CSS实现可拖动布局
    • 滚动穿透解决方案
  • React
    • React 生命周期
    • React Ref
    • React Hooks
    • SWR
    • React 数据流
    • React 函数式组件和类组件的区别
  • 可视化
    • OffscreenCanvas
    • Echarts 平滑曲线端点为什么不平滑
    • 颜色空间
    • 词云布局解析
    • 3D 数学基础
    • Canvas 图片处理
    • GLGL ES
    • WebGL 中绘制直线
    • Graphics API
    • 现代计算机图形学基础
    • Canvas 灰度
  • Vue
    • Vue2.x全局挂载整理
    • Vue2.6.x源码阅读
      • Vue2.6.x源码阅读 - 2.目录结构分析
      • Vue2.6.x源码阅读 - 4.源码阅读-platform
      • Vue2.6.x源码阅读 - 1.准备工作
      • Vue2.6.x源码阅读 - 5.源码阅读-core-Vue构造函数
      • Vue2.6.x源码阅读 - 7.源码阅读-core-响应式原理
      • Vue2.6.x源码阅读 - 3.源码阅读-shared
      • Vue2.6.x源码阅读 - 6.源码阅读-core-组件挂载
    • Vue + TypeScript Web应用实践
    • Vue2.x指令
    • nextTick()的使用
    • vue-cli2.x 的使用与项目结构分析
    • Vue响应式原理及总结
    • VueX的使用
    • Electron-Vue + Python 桌面应用实践
    • Vite
    • Vue组件通信整理
    • 记录一个问题的探索过程
  • Linux
    • memcg
  • GameDev
    • 游戏中的几种投影视图
    • 从零开始写软渲染器06
    • 从零开始写软渲染器05
    • 从零开始写软渲染器04
    • 从零开始写软渲染器03
    • 从零开始写软渲染器02
    • 从零开始写软渲染器01
    • 从零开始写软渲染器00
    • 现代游戏常用的几种寻路方案(一)
  • Node
    • NPM Dependency
    • Node 优势
    • Node Stream
    • Node 模块系统
  • HTML
    • html5语义与结构元素
  • 跨端
    • Flutter 介绍
  • Golang
    • Golang 基础
  • AR
    • SceneKit
由 GitBook 提供支持
在本页
  • 简介
  • 基本构成
  • 配置设定
  • 数据处理
  • 模型与评价
  • 执行训练
  • 运行
  • 订制扩展

这有帮助吗?

  1. MachineLearning

RecBole开源框架

上一页集成学习算法下一页NCE-PLRec

最后更新于4年前

这有帮助吗?

很多时候推荐系统论文的复现和验证都是一个难题,因为常常涉及不同的数据集来源、数据集划分和训练模式。最近在研究推荐系统问题时,发现一个比较优秀的开源代码库RecBole,对于绝大多数数据集、模型都有着比较完整的实现,同时框架的可扩展性也比较良好。

简介

RecBole是主要由国内几所高校(中国人民大学、华东师范大学、北京邮电大学等),共同开发和整理的开源推荐系统代码库。该代码库是基于PyTorch实现的,因此比较符合笔者的使用习惯,同时代码库的各项文档和论文都非常清晰齐全,如下所示:

  • 论文地址:

  • 项目主页地址:

  • 项目Github地址:

  • 项目交流邮件组:recbole@outlook.com

在最初的发布版本中,RecBole支持65个通用的推荐系统模型,28个常用于benchmark的数据集。支持的模型涵盖四种常见的推荐系统场景:

  • 通用推荐。输入评分矩阵,给出测试集评分。

  • 序列推荐。输入包含时间信息的顺序点击数据。

  • 上下文推荐。除了评分矩阵外还输入用户或物品的上下文特征信息

  • 基于知识的推荐。基于一些额外知识进行推荐

为了解决推荐系统领域的训练和评估问题,RecBole设计了通用的数据结构,设置了标准且得到广泛认同的评价指标。对于28个数据集RecBole都给出了已经转换为特定格式的数据文件,可以直接下载或者自行依照文档进行转化。

RecBole可以通过conda和pip工具按照一般的python代码库安装方式进行安装。

conda install -c aibox recbole

pip install recbole

或者通过下载开源代码进行手动安装:

git clone https://github.com/RUCAIBox/RecBole.git && cd RecBole

基本构成

RecBole主要包含配置设定、数据处理、模型、评价四个部分。

配置设定

配置设定是对RecBole的运行环境和运行方式进行一定的设定

基础的参数包括对环境的设置,例如gpu_id、use_gpu(是否使用GPU)、seed(随机种子)等。熟悉论文代码复现和实验的人应该对这些参数十分熟悉。

此外还有对训练和测试中的一些常见的无论任何深度学习模型都需要的参数,比如学习率、训练轮数、batch_size以及评价指标和模式的选择等等。

数据处理

数据处理方式基本上参考了PyTorch中已有的Dataset和Dataloader的构成形式。独特之处在于RecBole为了满足推荐系统的特殊形式,采用了一种原子文件(Atomic File)来表示数据流中的基本外部文件

这些文件基本就代表了推荐系统中能够涉及的各类信息。例如一般推荐系统就只涉及.inter,而基于上下文的推荐系统就需要.user和.item。更复杂的涉及知识图谱等结构的推荐系统就需要其他原子文件。

在代码中,则使用interaction类作为基本数据结构。

模型与评价

如上文所说,RecBole实现了65种模型,使用者可以简单地调用这些类建立对象来使用这些模型。

而在评价方面,指标包括Recall, Precision, Hit, NDCG, MAP 和MRR等。对应不同的场景,可以采取不同的测试方式。如下所示:

执行训练

运行

运行有两种方式。

一种是作为学习者,仅仅是快速地验证模型在数据集上的效果。代码非常简单。以BPR算法在ml-100k上的实验为例

from recbole.quick_start import run_recbole

run_recbole(dataset='BPR', model='dataset', config_file_list=config_file_list, config_dict=config_dict)

另一种则是构造Trainer对象。通过面向对象的方式进行训练。

from logging import getLogger
from recbole.config import Config
from recbole.data import create_dataset, data_preparation
from recbole.model.general_recommender import BPR
from recbole.trainer import Trainer
from recbole.utils import init_seed, init_logger

if __name__ == '__main__':

    # configurations initialization
    config = Config(model='BPR', dataset='ml-100k')

    # init random seed
    init_seed(config['seed'], config['reproducibility'])

    # logger initialization
    init_logger(config)
    logger = getLogger()

    # write config info into log
    logger.info(config)

    # dataset creating and filtering
    dataset = create_dataset(config)
    logger.info(dataset)

    # dataset splitting
    train_data, valid_data, test_data = data_preparation(config, dataset)

    # model loading and initialization
    model = BPR(config, train_data).to(config['device'])
    logger.info(model)

    # trainer loading and initialization
    trainer = Trainer(config, model)

    # model training
    best_valid_score, best_valid_result = trainer.fit(train_data, valid_data)

    # model evaluation
    test_result = trainer.evaluate(test_data)
    print(test_result)

订制扩展

RecBole为高级的使用者或者研究人员留出了个性化扩展的接口。这使得RecBole不仅仅是用于进行基线实验,而是可以用于开发新的算法。

主要包括:

订制模型。继承recbole.model.abstract_recommender.GeneralRecom类

订制训练器。继承from recbole.trainer.Trainer。主要是为了设置一些训练的小技巧。例如在某个epoch之后增加损失函数权重等。

订制数据加载器和采样器。主要用于在数据载入前执行一些负采样等操作。

https://arxiv.org/abs/2011.01731
https://recbole.io
https://github.com/RUCAIBox/RecBole
atomic file
RecBole_evaluation