推荐系统开源工具RecBole学习

news2024/12/25 8:58:09

文章全文首发:码农的科研笔记(公众号)


RecBole是由AI Box团队开发的基于Pytorch的推荐系统算法库。该框架从数据处理、模型开发和算法训练都有涉及,能方便进行算法构建和实验对比。

RecBole架构

数据组织形式

RecBole约定了一个统一、易用的数据文件格式,并已支持 28 个 benchmark dataset。同时可以选择使用数据集预处理脚本,或直接下载已被处理好的数据集文件。recbole有一个默认的数据集 ml-100k 存在目录 ./RecBole/dataset/ml-100k中,官方doc给出的所有例子都是直接加载的这个数据集。

ml-100k.item:item_id:token	movie_title:token_seq	release_year:token	class:token_seq
例如: 1	Toy Story	1995	Animation Children's Comedy
ml-100k.user: user_id:token	age:token	gender:token	occupation:token	zip_code:token
例如: 1	24	M	technician	85711
ml-100k.inter: user_id:token	item_id:token	rating:float	timestamp:float
例如: 196	242	3	881250949

RecBole典型数据文件如下,其中针对不同类型推荐算法所需数据文件会有所不同。

后缀含义例子
.inter用户-商品交互特征user_id, item_id, rating, timestamp, review
.user用户特征user_id, age, gender
.item商品特征item_id, category
.kg知识图谱三元组head_entity, tail_entity, relation
.link知识图谱与推荐系统链接关系entity, item_id
.net社交网络图source, target

针对使用其它数据场景,如何得到RecBole所需数据格式:

  • 一种是下载数据源文件,并利用官方开源的脚本(https://github.com/RUCAIBox/RecSysDatasets)进行处理。

  • 一种是直接下载官方处理好的原子文件的脚本,有两种方法,百度网盘 或者 google drive 。将已经下载好的原子文件保存在 ./RecBole/dataset 目录下。之后需要修改config。

    from recbole.config import Config
    parameter_dict = {
        'data_path': "./RecBole/dataset",#下载数据集的位置,这里只需要到dataset这一级就可以
        'load_col': {'inter': ['user_id', 'product_id']}, #模型要加载的数据列,因为数据集中可能存在很多列,我们只选有需要的。
        'USER_ID_FIELD': 'user_id', #写入user和item的id对应在数据集中的header
        'ITEM_ID_FIELD': 'product_id'
    }
    config = Config(model="LightGCN", dataset='steam',config_dict=parameter_dict)
    # 初始化config,系统会调用default的config,并且利用自己定义的config_dict对default中相应的参数进行修改
    

Recbole—加载新的数据集Recbole—加载新的数据集

原子文件是 RecBole 约定的一类通用的数据格式,支持灵活的数据输入。

认识RecBole

【模型】

RecBole 包含百余种经典推荐模型,同时包括八个基准工具包: 通用推荐、 序列推荐、 基于内容的推荐、 基于知识的推荐、 元学习、 数据增强、 去偏、 公平性、 跨域推荐、 基于Transformer的模型、 基于图神经网络的模型 和人岗匹配模型。

RecBole模型

【Evaluation Settings】

一般包括评价指标包括: metrics: ["Recall", "MRR","NDCG","Hit","Precision"]

【调参】

打开RecBole/hyper.test 然后设置一系列你想要调整的超参数进行自动搜索。下面有两种方式来进行超参搜索:

  • loguniform:参数会遵循均匀分布随机选取。
  • choice: 参数会从所设置的列表中选择每个离散值进行搜索。

下面是一个hyper.test的例子

learning_rate loguniform -8, 0
embedding_size choice [64, 96 , 128]
train_batch_size choice [512, 1024, 2048]
mlp_hidden_size choice ['[64, 64, 64]','[128, 128]']

然后在命令行中运行:

python run_hyper.py --model=[model_name] --dataset=[data_name] --config_files=xxxx.yaml --params_file=hyper.test
e.g.
python run_hyper.py --model=BPR --dataset=ml-100k --config_files=test.yaml --params_file=hyper.test

同时官方给出了模型相应在数据上的最优超参数:https://recbole.io/hyperparameters/index.html

安装和使用demo

安装:可以使用pip安装 pip install recbole ,也可以下载源文件安装依赖包并进行运行,记住针对其它模型(例如基于RecBole的图网络推荐系统)则需要先安装recbole库进行支持。

使用demo:直接运行**run_recbole.py这个文件,默认使用的模型是BPR**,默认使用的数据集是ml-100k

模型运行流程

RecBole小白入门系列博客总览(保持更新)RecBole小白入门系列博客总览(保持更新)

主要包括四类模型的运行流程——General, Context, Sequential 和Knowledge。例如General模型中 Pop 和 ItemKNN 等。模型默认参数在源码目录RecBole/recbole/properties/model

【可能需要设定的文件】

  • 模型默认参数:RecBole/recbole/properties/model

  • 数据集默认参数:RecBole/recbole/properties/dataset

【Knowledge类模型运行流程】

  • 例如选定Knowledge类的模型;

  • 选定数据集:Context模型顾名思义会用到各种上下文,因此会用到的文件可能有多个 .inter.item和**.user** 。

后缀含义例子
.inter用户-商品交互特征user_id, item_id, rating, timestamp, review
.user用户特征user_id, age, gender
.item商品特征item_id, category

Knowledge类模型会用到.kg.link文件,这些需要根据.inter文件生成,生成方式请参照RecBole数据集生成工具

基于GCN的推荐实例

关键词搜索:GCN、Hyper、graph

图相关模型

【LightGCN】

LightGCN RecBole教程

Model Hyper-Parameters:

  • embedding_size (int) : The embedding size of users and items. Defaults to 64.
  • n_layers (int) : The number of layers in LightGCN. Defaults to 2.
  • reg_weight (float) : The L2 regularization weight. Defaults to 1e-05.

A Running Example:

Write the following code to a python file, such as run.py

from recbole.quick_start import run_recbole
run_recbole(model='LightGCN', dataset='ml-100k')

And then:

python run.py

【GNN类】

需要使用RecBole-GNN这个新的工具包,但是得提前安装 recbole 包,简单使用工具包即运行 python run_recbole.py,同时 RecBole对应数据集参考 Social-Datasets。库包括涵盖三个主要类别的算法: 带有用户-项目交互图的一般推荐; 使用会话/序列图的顺序推荐; 社交网络的社交推荐。

RecBole-GNN相关模型

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/340424.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

发生异常: AttributeError ‘xxx’ object has no attribute ‘ooo’

python 发生异常: AttributeError ‘xxx’ object has no attribute ‘ooo’ 原因: 函数调用发生在变量定义之前 示例分析: 在apple.py文件中代码如下: class Apple():def __init__(self):self.eat()self.pricedef eat(self):print("吃…

Spring Security in Action 第十八章 手把手OAuth2应用

本专栏将从基础开始,循序渐进,以实战为线索,逐步深入SpringSecurity相关知识相关知识,打造完整的SpringSecurity学习步骤,提升工程化编码能力和思维能力,写出高质量代码。希望大家都能够从中有所收获&#…

Java:SpringMVC的使用(2)

目录第十二章 REST风格CRUD练习12.1 搭建环境12.2 实现功能思路第十三章 SpringMVC消息转换器13.1 消息转换器概述13.2 使用消息转换器处理请求报文(1) 使用RequestBody获取请求体(2) 使用HttpEntity\<T>获取请求体及请求头13.3 使用消息转换器处理响应报文(1) 使用Respo…

llvm 创建外部调用函数方法

llvm 创建外部调用函数方法 2023-02-12 15:26:19 sizaif 文章目录llvm 创建外部调用函数方法法一:声名参数类型及函数类型在llvm IR中处理并调用函数:外部函数&#xff1a;法二声明函数在llvm IR中处理并函数调用外部函数法一: 声名参数类型及函数类型 // Fun Ty static Fun…

【CS224W】(task3)NetworkX工具包实践

note 节点可以为任意可哈希的对象&#xff0c;比如字符串、图像、XML对象&#xff0c;甚至另一个Graph、自定义的节点对象。通过这种方式可以自由灵活地构建&#xff1a;图为节点、文件为节点、函数为节点&#xff0c;等灵活的图形式。暂时省略&#xff1a;【B5】计算机网络图…

vue3学习资料整理

一、一个后端程序员为什么要学习前端&#xff1f; 1.网上找到的学习理由 《Java后端的我也要学Node.js 了》 https://blog.csdn.net/yusimiao/article/details/104689007 《nodejs后端开发的优缺点&#xff08;nodejs的概念与特征详解&#xff09;》 https://www.1pindao.co…

2023级浙江大学MEM提面最新经验分享

一、个人背景背景&#xff1a;本人毕业于某211大学工程管理相关专业&#xff0c;目前定居在杭州&#xff0c;在某汽车制造公司工作&#xff0c;负责研发无人驾驶项目。我申请的是浙大MEM提前批面试&#xff0c;因为通过提面优秀资格顺利上岸录取&#xff0c;之前感到对自己有帮…

Java、JSP动漫网站的设计与实现

技术&#xff1a;Java、JSP等摘要&#xff1a;随着科技的迅速发展&#xff0c;计算机技术已应用到社会的各个领域。随着计算机技术和通信技术的迅速发展&#xff0c;网络的规模也逐渐增大&#xff0c;网络的元素也随之不断增加&#xff0c;有的利用其通信&#xff0c;有的利用其…

【软件测试开发】Junit5单元测试框架

目录1. 注解Test 注解BeforeEach BeforeAllAfterEach AfterAll2. 断言 assertassertequalsassertTrue assertFalseassertNull assertNotNull3. 用例执行顺序方法排序&#xff0c;通过 Order 注解来排序4. 测试套件 Suite5. 参数化单参数stringsints6. 参数化多参数CsvSourceCsv…

File类

&#x1f3e1;个人主页 &#xff1a; 守夜人st &#x1f680;系列专栏&#xff1a;Java …持续更新中敬请关注… &#x1f649;博主简介&#xff1a;软件工程专业&#xff0c;在校学生&#xff0c;写博客是为了总结回顾一些所学知识点 ✈️推荐一款模拟面试&#xff0c;刷题神器…

2. SpringMVC 请求与响应

文章目录1. 请求映射路径2. 请求参数2.1 get 请求发送普通参数2.2 post 请求发送普通参数2.3 五种类型的参数传递2.4.1 普通参数2.4.2 POJO 数据类型2.4.3 嵌套 POJO 类型参数2.4.4 数组类型参数2.4.5 集合类型参数3. json 数据传输参数&#xff08;重点&#xff09;3.1 传输 j…

C语言(C预编译指令)

目录 1.undef 2.条件编译#ifdef,#else和#endif 3.#ifndef 4.#if和#elif 5.预定义宏 6.#line和#error 7.#pragma 1.undef #undef指令用于取消已定义的#define指令 #define LIMIT 400 #undef LIMIT 如果想使用一个名称但又不确定之前是否已经用过&#xff0c;为了安全起…

Python中的进程线程

文章目录前言多进程与多线程基本概念多进程multiprocessing 类对象进程池subprocess模块进程间通信多线程threading实现线程操作线程共享所有变量线程锁参考资料前言 又花了点时间学习了一下Python中的多线程与多进程的知识点&#xff0c;梳理一下供复习参考 多进程与多线程 …

JUC并发编程与源码分析

一、本课程前置知识及要求说明 二、线程基础知识复习 三、CompletableFuture 四、说说Java"锁"事 8锁案例原理解释: 五、LockSupport与线程中断 六、 Java内存模型之JMM 七、volatile与JMM 八、CAS 九、原子操作类之18罗汉增强 十、聊聊ThreadLocal 十一、Java对…

离线数据仓库

1 数据仓库建模 1.1 建模工具 PowerDesigner/SQLYog/EZDML… 1.2 ODS层 &#xff08;1&#xff09;保持数据原貌不做任何修改&#xff0c;起到备份数据的作用。 &#xff08;2&#xff09;数据采用压缩&#xff0c;减少磁盘存储空间&#xff08;例如&#xff1a;压缩采用LZO&…

seata源码-全局事务回滚服务端源码

这篇博客来记录在发起全局事务回滚时&#xff0c;服务端接收到netty请求是如何处理的 1. 发起全局事务回滚请求 在前面的博客中&#xff0c;有说到过&#xff0c;事务发起者在发现分支事务执行异常之后&#xff0c;会提交全局事务回滚的请求到netty服务端&#xff0c;这里是发…

Python 解决dilb和face_recognition第三方包安装失败

目录 dilb和face_recognition第三方包安装失败 亲测有效的解决方法&#xff1a;whl安装方式 dilb和face_recognition第三方包安装失败 场景复现&#xff1a;因为需要用到dlibface_recognition&#xff0c;基于OpenCV做一些人脸识别的项目&#xff0c;在Pycharm中进行pip清华…

图解LeetCode——剑指 Offer 24. 反转链表

一、题目 定义一个函数&#xff0c;输入一个链表的头节点&#xff0c;反转该链表并输出反转后链表的头节点。 二、示例 示例: 【输入】 1->2->3->4->5->NULL 【输出】 5->4->3->2->1->NULL 限制&#xff1a; 0 < 节点个数 < 5000 三、…

Linux | Linux卸载和安装MySQL(Ubuntu版)

最近又来到了Linux学习了&#xff0c;原因是要接触云服务器相关知识&#xff0c; 所以博主整理了一些关于Linux的知识&#xff0c; 欢迎各位朋友点赞收藏&#xff0c;天天开心丫&#xff0c;快乐写代码&#xff01; Linux系列文章请戳 Linux教程专栏 目录 一、卸载MySQL 1…

Angular4 中 ckeditor5 插件的使用

Angular4 中 ckeditor5 插件的使用 0 环境、新建项目 环境&#xff1a; Windows10Angular/cli1.4.10&#xff08;安装 Angular 的过程略过&#xff0c;Angular4 版本比较古老&#xff0c;这也导致项目安装插件及其他操作比较麻烦&#xff09; 1. ckeditor5 官方用法 基础用…