RecBole小白入门系列博客(四)——Sequential类模型运行流程

注意:本系列基于RecBole v.0.2.0 版本!
传送门
RecBole小白入门系列博客(一)——快速安装和简单上手
RecBole小白入门系列博客(二)——General类模型运行流程
RecBole小白入门系列博客(三)——Context类模型运行流程

写在前面

  1. 这次的内容和General类和Context模型运行流程差不多,我会特别提一下Sequential类模型不一样和需要注意的地方。
  2. 由于模型的完整运行流程会牵扯到很多部分,从数据到参数,所以这里将简略的举出例子,让大家可以大致独立完成模型的运行。关于一些更加具体和细微的部分,我将在后面单独写博客为大家介绍。

选定模型

RecBole中共有17个Sequential类模型可供使用,模型列表如下:

关于模型的具体信息可以查看上面的链接,大家选用需要的模型即可。我们以模型GRU4Rec为例。

设置模型超参数

每个模型的超参数都不一致,大家可以从上面的链接中查看自己所需模型的超参数有哪些。在RecBole中每个模型都有默认的参数,因此如果是想简单跑一跑就暂时不动。
模型默认参数在源码目录RecBole/recbole/properties/model 中,各位感兴趣在小伙伴可以在里面查看默认参数值。
那么想调参的同学怎么办呢?读过RecBole小白入门系列博客(一)——快速安装和简单上手的朋友可能知道,在RecBole中调整参数有好几种方法,这里我推荐使用自定义配置文件
RecBole的配置文件格式均使用.yaml文件,十分简洁明了,大致的形式如下:

accum: "stack"
gcn_output_dim: 500
embedding_size: 64
dropout_prob: 0.3
sparse_feature: True
class_num: 2
num_basis_functions: 2

参数名称: 参数值这样的样式
参数值可以是字典嵌套,也可以是列表等,就像这样

load_col:
  inter: [user_id, business_id, stars]
  item: [business_id, address, categories]
  user: [user_id, fans, compliment_hot, compliment_cool, complitment_cute, compliment_plain]

大家暂时不用管参数的含义等,后面会注意讲到。大致了解配置文件的格式之后,我再说下推荐的修改模型参数的方法:

  • 在目录 RecBole/ 下新建配置文件 test.yaml
  • test.yaml 中写入想要修改的参数
  • 保存

例如,我想修改模型GRU4Rec的参数,就去查看路径RecBole/recbole/properties/model/GRU4Rec.yaml,参数如下:

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

那如果我想把embedding_size改成32的话,就在test.yaml中写入

# model config
embedding_size: 32

别的模型参数同理

选定数据集

数据集基本格式

选定模型之后就是要选定要用的数据集了。RecBole框架使用的数据集要求处理成对应的原子文件才可以正常使用,目前支持6种原子文件,Context模型顾名思义会用到各种上下文,因此会用到的文件可能有多个 .inter.item和**.user**

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

每个原子文件可以被看作 mn 列的表格(不计表头),代表该文件存储了 n 种不同的特征,共 m 条记录。 文件第一行为表头,表头中每一列的形式为 feat_name:feat_type,标示了该列特征的名字及类型。 约定特征为四种类型之一。

feat_type含义例子
token单个离散特征user_id, age
token_seq离散特征序列review
float单个连续特征rating, timestamp
float_seq连续特征序列vector

关于数据集原子文件的处理和格式等,我接下来会专门用一篇博客来讲,这里给出一个简明的例子即可,想马上了解的同学可以看他们的网站https://recbole.io/cn/atomic_files.html
以及RecBole提供的已经按格式处理好的数据集
https://github.com/RUCAIBox/RecDatasets
ml-1m 为例 :
处理过后可以得到 ml-1m.inter 文件,模式如下:
在这里插入图片描述

设置数据集参数

针对特定数据集,需要设置相应的参数,才可以让模型正常运行。这里仍然以 ml-1m 数据集为例,给出相应的配置文件。在上文 test.yaml 继续写入数据集参数,我会在下面注释中给出各个参数的含义。不同于General类模型和Context类模型,Sequential类模型需要考虑时间,因此在数据集参数中也会有相应体现。

# dataset config
field_separator: "\t" #指定数据集field的分隔符
seq_separator: " " #指定数据集中token_seq或者float_seq域里的分隔符
USER_ID_FIELD: user_id #指定用户id域
ITEM_ID_FIELD: item_id #指定物品id域
RATING_FIELD: rating #指定打分rating域
TIME_FIELD: timestamp #指定时间域
NEG_PREFIX: neg_ #指定负采样前缀
LABEL_FIELD: label #指定标签域
ITEM_LIST_LENGTH_FIELD: item_length #指定序列长度域
LIST_SUFFIX: _list #指定序列前缀
MAX_ITEM_LIST_LENGTH: 50 #指定最大序列长度
POSITION_FIELD: position_id #指定生成的序列位置id
#指定从什么文件里读什么列,这里就是从ml-1m.inter里面读取user_id, item_id, rating, timestamp这四列,剩下的以此类推
load_col:
    inter: [user_id, item_id, rating, timestamp]

这里注释写的比较简略,感兴趣的同学可以参考API文档,后续我也会专门开一篇博客来介绍。

设置训练参数

设置好数据及之后,我们要继续设置训练的参数,在test.yaml中继续写入:

# training settings
epochs: 500 #训练的最大轮数
train_batch_size: 4096 #训练的batch_size
learner: adam #使用的pytorch内置优化器
learning_rate: 0.001 #学习率
training_neg_sample_num: 0 #负采样数目
eval_step: 1 #每次训练后做evalaution的次数
stopping_step: 10 #控制训练收敛的步骤数,在该步骤数内若选取的评测标准没有什么变化,就可以提前停止了

大家一定注意,大部分Sequential类模型不需要负采样而某些需要,因此training_neg_sample_num不一定是0
需要负采样的模型有:FPMC、TransRec,别的都不需要,具体情况请参照模型文档。

设置评测参数

运行前最后一步,需要设置评测参数。在test.yaml中继续写入:

# evalution settings
eval_setting: TO_LS,full #对数据按时间排序,设置留一法划分数据集,并使用全排序
metrics: ["Recall", "MRR","NDCG","Hit","Precision"] #评测标准
valid_metric: MRR@10 #选取哪个评测标准作为作为提前停止训练的标准
eval_batch_size: 4096 #评测的batch_size

总结参数设置

至此我们的参数设置就全都好了,完整的 test.yaml 应该是这个样子的:

# model config
embedding_size: 32
# dataset config
field_separator: "\t" #指定数据集field的分隔符
seq_separator: " " #指定数据集中token_seq或者float_seq域里的分隔符
USER_ID_FIELD: user_id #指定用户id域
ITEM_ID_FIELD: item_id #指定物品id域
RATING_FIELD: rating #指定打分rating域
TIME_FIELD: timestamp #指定时间域
NEG_PREFIX: neg_ #指定负采样前缀
LABEL_FIELD: label #指定标签域
ITEM_LIST_LENGTH_FIELD: item_length #指定序列长度域
LIST_SUFFIX: _list #指定序列前缀
MAX_ITEM_LIST_LENGTH: 50 #指定最大序列长度
POSITION_FIELD: position_id #指定生成的序列位置id
#指定从什么文件里读什么列,这里就是从ml-1m.inter里面读取user_id, item_id, rating, timestamp这四列,剩下的以此类推
load_col:
    inter: [user_id, item_id, rating, timestamp]
# training settings
epochs: 500 #训练的最大轮数
train_batch_size: 4096 #训练的batch_size
learner: adam #使用的pytorch内置优化器
learning_rate: 0.001 #学习率
training_neg_sample_num: 0 #负采样数目
eval_step: 1 #每次训练后做evalaution的次数
stopping_step: 10 #控制训练收敛的步骤数,在该步骤数内若选取的评测标准没有什么变化,就可以提前停止了
# evalution settings
eval_setting: TO_LS,full #对数据按时间排序,设置留一法划分数据集,并使用全排序
metrics: ["Recall", "MRR","NDCG","Hit","Precision"] #评测标准
valid_metric: MRR@10 #选取哪个评测标准作为作为提前停止训练的标准
eval_batch_size: 4096 #评测的batch_size

运行

ml-1m 数据集文件夹放在目录RecBole/dataset 下,至此几个关键文件的层次应该是:

-RecBole
	-dataset
		-ml-1m
			ml-1m.inter
	test.yaml
	run_recbole.py

接下来按照我上期RecBole小白入门系列博客(一)——快速安装和简单上手讲的运行方法运行就好啦!
假设运行GRU4Rec模型(别的模型同理,改一下model就好)

python run_recbole.py --model=GRU4Rec --dataset=ml-1m \
--config_files=test.yaml

然后就有下面这样的信息输出了:
这里是打印出的训练参数信息,可以看到有很多我们没设置的默认信息
在这里插入图片描述

接下来是数据集的参数信息:
在这里插入图片描述

之后给出数据集的基本信息:
在这里插入图片描述

再然后是evaluation的设置:
在这里插入图片描述

下面是模型结构:
在这里插入图片描述

**接下来就开始训练啦,会打印出每一轮的结果: **
在这里插入图片描述

一直到训练结束,会给出最终的测试结果:
在这里插入图片描述

调(lian)参(dan)

参照之前博客里的调参即可
RecBole小白入门系列博客(二) ——General类模型运行流程

结束语

注意并不是所有的Sequential类模型都可以顺利按上述步骤运行,有几个模型设置比较复杂,请大家查看。之后我会单独开一期讲所有特殊模型的设置问题。
Sequential类模型运行流程就写到这里,之后我还会继续更新剩下的模型运行流程,以及之前提到的各种参数设置,数据集处理,数据集配置等。大家还有什么想看的可以留言( ̄▽ ̄)~,有什么问题也欢迎和我讨论!
最后附上官网、API文档和GitHub链接~大家有兴趣可以自行查阅哦!
官网https://recbole.io/cn/index.html
API文档https://recbole.io/docs/
GitHubhttps://github.com/RUCAIBox/RecBole

  • 6
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 14
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值