RecBole-CDR 是一个基于 RecBole 的代码库,其针对跨领域推荐算法。目前支持的跨域推荐模型包括CMF、DTCDR、CoNet等(具体见后文“RecBole-CDR支持的模型”)。由于该项目相比RecBole有一些额外的设置,在学习过程中通过查看源代码获取具体的信息,特在此记录以备后续查看。
Recbole-CDR项目的GitHub地址:RUCAIBox/RecBole-CDR
Recbole-CDR项目主要参数,可以参考Recbole项目提供的原始API文档。
1. Recbole API文档✨ (提供了详细的参数设置,使用方法等)
2. Recbole中文主页地址
一、整体数据流
下图为Data Flow,展示了从原始数据文件到输入算法进行计算的整体流程,其中针对跨领域推荐,DataLoader有不同的4种模式(后文会具体讲解)
二、 一些重要参数设置
针对跨领域推荐,由于数据集、模型架构、评估场景等的不同,参数有额外设置。将一些重要的参数记录如下,用于备忘:
-
train_epochs
:设置跨领域训练模式,包含:SOURCE, TARGET, BOTH, OVERLAP。主要是dataloader.py和trainer.py中根据对应的模式对训练、验证和测试数据进行划分。BOTH
: Return both data in source domain and target domain. 同时训练两个领域SOURCE
: Only return the data in source domain. 只训练单个领域TARGET
: Only return the data in target domain. 只训练单个领域OVERLAP
: Return the overlapped users or items 仅训练领域重叠部分(users or items)- 项目中提供的model,其训练模式一般为固定的,如双目标跨域推荐通常为BOTH模式,而EMCDR需要分别在源领域和目标域训练后再联合训练Overlap部分:
train_epochs: ["SOURCE:100","TARGET:100","OVERLAP:100"]
。 - 通常可以直接参考文件properties/model/modelName.yaml对应的设置;如果未设置,则为overall.yaml中的默认训练模式:
train_epochs: ["BOTH:300"]
-
source_split/source_split_flag
:当train_epochs中不包含SOURCE模式则为False,不切分数据集进行训练? -
neg_sampling
:负采样策略,自动从未被观察到的相互作用中,为每个正样本均匀地选择一个负样本 -
benchmark_filename (list)
:加载已经预先拆分好的user-item交互的文件后缀列表。[part1, part2, part3]三者分别作为train, valid和test数据。Recbole将只进行normalize、remap id的操作,而不对数据做filter或其他处理。- 单个文件内,以"feat_name:feat_type"格式列名设置,表示特征名称和数据格式。示例:[user_id:token, item_id:token, label:float]
- 一定要设置数据类型“feat_type”!主要包含4种类型,解释如下:
-
eval_step
:该参数设置训练多少个epoch后,对valid数据集进行评估。如果小于1,则不会在valid数据集上计算模型。(不包含valid数据集,则设置为0)
三、利用Yaml文件 设置参数
推荐采用yaml文件设置参数,将不同类型的参数设置于对应的文件中,更有区分性:
- Data settings:properties/dataset/datasetName.yaml
- Model settings:properties/model/modelName.yaml
- General / training / evaluation settings:properties/overall.yaml + properties/model/modelName.yaml
其中,datasetName、modelName分别为数据集名称和模型名称,需要对应修改
四、RecBole-CDR支持的模型
- CMF from Singh et al.: Relational Learning via Collective Matrix Factorization (SIGKDD 2008).
- DTCDR from Zhu et al.: DTCDR: A Framework for Dual-Target Cross-Domain Recommendation (CIKM 2019).
- CoNet from Hu et al.: CoNet: Collaborative Cross Networks for Cross-Domain Recommendation (CIKM 2018).
- BiTGCF from Liu et al.: Cross Domain Recommendation via Bi-directional Transfer Graph Collaborative Filtering Networks (CIKM 2020).
- CLFM from Gao et al.: Cross-Domain Recommendation via Cluster-Level Latent Factor Model (PKDD 2013).
- DeepAPF from Yan et al.: DeepAPF: Deep Attentive Probabilistic Factorization for Multi-site Video Recommendation (IJCAI 2019).
- NATR from Gao et al.: Cross-domain Recommendation Without Sharing User-relevant Data (WWW 2019).
- EMCDR from Man et al.: Cross-Domain Recommendation: An Embedding and Mapping Approach (IJCAI 2017).
- SSCDR from Kang et al.: Semi-Supervised Learning for Cross-Domain Recommendation to Cold-Start Users (CIKM 2019).
- DCDCSR from Zhu et al.: A Deep Framework for Cross-Domain and Cross-System Recommendations (IJCAI 2018).
五、RecBole-CDR提供的跨领域数据集
RecBole-CDR提供了常用的三对源域-目标域数据集,并对实现的模型在这些数据集上进行了仔细的调参(可查看项目中的results/datasetName.md文件,datasetName为数据集名称)
- Amazon 数据集;
- Book-Crossing 数据集;
- Douban 数据集;