以下是本例的简要目录结构及说明:
├── data # 文档
├── train #训练数据
├── small_train.txt
├── test #测试数据
├── small_test.txt
├── README.md #文档
├── config.yaml # sample数据配置
├── config_bigdata.yaml # 全量数据配置
├── dygraph_model.py # 构建动态图
├── deeprec_reader.py # 数据读取程序
├── infer.py # 预测入口
├── net.py # 模型核心组网
├── netflix_reader.py # 数据读取程序
├── trainer.py # 训练入口
注:在阅读该示例前,建议您先了解以下内容:
DeepRec使用基于自编码器的协同过滤,加入了一些tricks,达到了比以往的协同过滤方法更好的效果。tricks包括:1. 加大Dropout的比例(0.8); 2. 使用带负值的激活函数selu; 3. 提出Dense re-feeding, 把预测结果重新放回自编码器中作为新的样本再次预测, 以达到数据增强帮助防止模型过拟合
我们在作者处理过的开源数据集Netflix上验证模型效果,在模型目录的data目录下为您准备了快速运行的示例数据,若需要使用全量数据可以参考下方效果复现部分。 数据的格式如下: 生成的格式以\t为分割点
u_id i_id rating
116 341 3.7
PaddlePaddle>=2.0
python 3.5/3.6/3.7/3.8
os : windows/linux/macos
本文提供了样例数据可以供您快速体验,在任意目录下均可执行。在deeprec模型目录的快速执行命令如下:
# 进入模型目录
# cd models/rank/deeprec # 在任意目录均可运行
# 动态图训练
python -u trainer.py -m config.yaml # 全量数据运行config_bigdata.yaml
# 动态图预测
python -u infer.py -m config.yaml
DeepRec是一个自编码器, 由encoder和decoder组成, 在encoder和decoder之间加入了一个drop概率很大的dropout层, 使用selu作为激活函数。模型的主要组网结构如下:
为了方便使用者能够快速的跑通每一个模型,我们在每个模型下都提供了样例数据。如果需要复现readme中的效果,请按如下步骤依次操作即可。 在全量数据下模型的指标如下:
模型 | rmse | layer_sizes | batch_size | epoch_num | Time of each epoch |
---|---|---|---|---|---|
DeepRec | 0.9172 | [n(17768), 512, 512, 1024] | 128 | 45 | 约55秒 |
- 确认您当前所在目录为PaddleRec/models/rank/deeprec
- 进入Paddlerec/datasets/Netflix_deeprec目录下,执行该脚本
cd ../../../datasets/Netflix_deeprec
sh run.sh
- 切回模型目录,执行命令运行全量数据
cd - # 切回模型目录
# 动态图训练
python -u trainer.py -m config_bigdata.yaml # 全量数据运行config_bigdata.yaml
python -u infer.py -m config_bigdata.yaml # 全量数据运行config_bigdata.yaml