|
1 | | -# BERT4Rec模型 |
2 | | - |
3 | | -以下是本例的简要目录结构及说明: |
4 | | - |
5 | | -``` |
6 | | -├── data #示例数据 |
7 | | - ├── train #训练数据 |
8 | | - ├── test #测试数据 |
9 | | -├── readme.md #文档 |
10 | | -├── config_bigdata.yaml # 全量数据配置 |
11 | | -├── config.yaml # demo数据配置 |
12 | | -├── net.py # 模型核心组网 |
13 | | -├── data_reader.py #数据读取程序 |
14 | | -├── dygraph_model.py # 构建动态图 |
15 | | -``` |
16 | | - |
17 | | -注:在阅读该示例前,建议您先了解以下内容: |
18 | | - |
19 | | -[paddlerec入门教程](https://github.com/PaddlePaddle/PaddleRec/blob/master/README.md) |
20 | | - |
21 | | -## 内容 |
22 | | - |
23 | | -- [模型简介](#模型简介) |
24 | | -- [数据准备](#数据准备) |
25 | | -- [运行环境](#运行环境) |
26 | | -- [快速开始](#快速开始) |
27 | | -- [模型组网](#模型组网) |
28 | | -- [效果复现](#效果复现) |
29 | | -- [进阶使用](#进阶使用) |
30 | | -- [FAQ](#FAQ) |
31 | | - |
32 | | - |
33 | | -## 模型简介 |
34 | | -BERT4Rec将NLP中的mask language任务迁移到序列推荐问题来,**给予了序列推荐一种不同于item2item,left2right的训练范式**。 |
35 | | -具体来说,对于一条物品序列,**以一定的概率p随机mask掉序列中的物品**,**使用transformer的encoder结构**对mask item进行预测。 |
36 | | -通过数据增强,完形填空任务的方式使得训练更加充分。 |
37 | | - |
38 | | -[BERT4Rec: Sequential Recommendation with Bidirectional Encoder Representations from Transformer](https://dl.acm.org/doi/abs/10.1145/3357384.3357895) |
39 | | -本模型来自飞桨论文复现挑战赛(第四期)的[BERT4Rec的第一名方案](https://aistudio.baidu.com/aistudio/projectdetail/2558070)达到了原作者github[BERT4Rec](https://github.com/FeiSun/BERT4Rec)的精度。 |
40 | | - |
41 | | -## 数据准备 |
42 | | -本模型使用论文中的数据集Beauty Dataset,在模型目录的data目录下。 |
43 | | - |
44 | | -## 运行环境 |
45 | | -PaddlePaddle>=2.0 |
46 | | - |
47 | | -python 3.7 |
48 | | - |
49 | | -## 快速开始 |
50 | | -本文提供了样例数据可以供您快速体验,在任意目录下均可执行。在BERT4Rec模型目录的快速执行命令如下: |
51 | | -```bash |
52 | | -# 进入模型目录 |
53 | | -# cd models/rank/bert4rec # 在任意目录均可运行 |
54 | | -# 动态图训练 |
55 | | -python -u ../../../tools/trainer.py -m config.yaml # 全量数据运行config_bigdata.yaml |
56 | | -# 动态图预测 |
57 | | -python -u ../../../tools/infer.py -m config.yaml |
58 | | -``` |
59 | | - |
60 | | -## 模型组网 |
61 | | -在BERT4Rec之前,SASRec已经将self-attention应用在了序列推荐任务中。 |
62 | | - |
63 | | -而与之对应的,BERT4Rec的作者认为像SASRec那种left-to-right的建模方式限制了模型的表达能力。 虽然用户的行为序列长期来看存在顺序的依赖关系,但在短期的一段时间内,用户的行为顺序不应该是严格顺序依赖的。 |
64 | | - |
65 | | -为了解决上述问题,BERT4Rec将NLP中的Mask Language任务迁移到序列推荐问题来,给予了序列推荐一种不同于item2item,left2right的训练范式。 |
66 | | -具体来说,对于一条物品序列,以一定的概率p随机mask掉序列中的物品(体现在data_augment_candi_gen.py),使用Transformer的Encoder结构对masked item进行预测(net.py)。 |
67 | | -训练的过程中,则是取出Encoder对应mask位置的representation来预测mask的label物品。即完形填空。 |
68 | | - |
69 | | -可以注意到,通过随机mask,我们可以成倍的生成新样本。(BERT4Rec训练样本是原有的十一倍(10:随机mask 1:原本样本)) 因此BERT4Rec效果的提升,也从数据增强的角度来解释。即通过数据增强,和完形填空式的前置任务的方式使得模型训练得更加充分。 |
70 | | - |
71 | | -在模型上面,BERT4Rec正如其名,就是跟BERT一样,使用Transformer的Encoder部分来做序列特征提取。 |
72 | | - |
73 | | -在测试的时候,我们只需要mask掉序列最后的物品,并取出模型最后一步的representation出来,那么就将训练好的模型成功应用在Next-item Prediction任务上。 |
74 | | - |
75 | | -## 效果复现 |
76 | | - |
77 | | -| 模型 | HR@10 | NDCG@10 | MRR | epoch_num| Time of each epoch | |
78 | | -| :------| :------ |:------ | :------ | :------| :------ | |
79 | | -| BERT4Rec | 0.305 | 0.184 | 0.166 | 50 | 约2小时 | |
80 | | - |
81 | | -本文提供了beauty数据集可以供您快速体验及其复现。在BERT4Rec模型目录的快速执行命令如下: |
82 | | - |
83 | | -```bash |
84 | | -# 进入模型目录 |
85 | | -# cd models/rank/bert4rec # 在任意目录均可运行 |
86 | | -# 数据增强与候选集生成 |
87 | | -python -u data_augment_candi_gen.py |
88 | | -# 动态图训练 |
89 | | -python -u ../../../tools/trainer.py -m config_bigdata.yaml |
90 | | -# 动态图预测 |
91 | | -python -u ../../../tools/infer.py -m config_bigdata.yaml |
92 | | - |
93 | | -``` |
94 | | - |
95 | | -## 进阶使用 |
96 | | - |
97 | | -## FAQ |
98 | | - |
| 1 | +# BERT4Rec模型 |
| 2 | + |
| 3 | +以下是本例的简要目录结构及说明: |
| 4 | + |
| 5 | +``` |
| 6 | +├── data #示例数据 |
| 7 | + ├── train #训练数据 |
| 8 | + ├── test #测试数据 |
| 9 | +├── readme.md #文档 |
| 10 | +├── config_bigdata.yaml # 全量数据配置 |
| 11 | +├── config.yaml # demo数据配置 |
| 12 | +├── net.py # 模型核心组网 |
| 13 | +├── data_reader.py #数据读取程序 |
| 14 | +├── dygraph_model.py # 构建动态图 |
| 15 | +``` |
| 16 | + |
| 17 | +注:在阅读该示例前,建议您先了解以下内容: |
| 18 | + |
| 19 | +[paddlerec入门教程](https://github.com/PaddlePaddle/PaddleRec/blob/master/README.md) |
| 20 | + |
| 21 | +## 内容 |
| 22 | + |
| 23 | +- [模型简介](#模型简介) |
| 24 | +- [数据准备](#数据准备) |
| 25 | +- [运行环境](#运行环境) |
| 26 | +- [快速开始](#快速开始) |
| 27 | +- [模型组网](#模型组网) |
| 28 | +- [效果复现](#效果复现) |
| 29 | +- [进阶使用](#进阶使用) |
| 30 | +- [FAQ](#FAQ) |
| 31 | + |
| 32 | + |
| 33 | +## 模型简介 |
| 34 | +BERT4Rec将NLP中的mask language任务迁移到序列推荐问题来,**给予了序列推荐一种不同于item2item,left2right的训练范式**。 |
| 35 | +具体来说,对于一条物品序列,**以一定的概率p随机mask掉序列中的物品**,**使用transformer的encoder结构**对mask item进行预测。 |
| 36 | +通过数据增强,完形填空任务的方式使得训练更加充分。 |
| 37 | + |
| 38 | +[BERT4Rec: Sequential Recommendation with Bidirectional Encoder Representations from Transformer](https://dl.acm.org/doi/abs/10.1145/3357384.3357895) |
| 39 | +本模型来自飞桨论文复现挑战赛(第四期)的[BERT4Rec的第一名方案](https://aistudio.baidu.com/aistudio/projectdetail/2558070)达到了原作者github[BERT4Rec](https://github.com/FeiSun/BERT4Rec)的精度。 |
| 40 | + |
| 41 | +## 数据准备 |
| 42 | +本模型使用论文中的数据集Beauty Dataset,在模型目录的data目录下。 |
| 43 | + |
| 44 | +## 运行环境 |
| 45 | +PaddlePaddle>=2.0 |
| 46 | + |
| 47 | +python 3.7 |
| 48 | + |
| 49 | +## 快速开始 |
| 50 | +本文提供了样例数据可以供您快速体验,在任意目录下均可执行。在BERT4Rec模型目录的快速执行命令如下: |
| 51 | +```bash |
| 52 | +# 进入模型目录 |
| 53 | +# cd models/rank/bert4rec # 在任意目录均可运行 |
| 54 | +# 动态图训练 |
| 55 | +python -u ../../../tools/trainer.py -m config.yaml # 全量数据运行config_bigdata.yaml |
| 56 | +# 动态图预测 |
| 57 | +python -u ../../../tools/infer.py -m config.yaml |
| 58 | +``` |
| 59 | + |
| 60 | + |
| 61 | +## 模型组网 |
| 62 | +在BERT4Rec之前,SASRec已经将self-attention应用在了序列推荐任务中。 |
| 63 | + |
| 64 | +而与之对应的,BERT4Rec的作者认为像SASRec那种left-to-right的建模方式限制了模型的表达能力。 虽然用户的行为序列长期来看存在顺序的依赖关系,但在短期的一段时间内,用户的行为顺序不应该是严格顺序依赖的。 |
| 65 | + |
| 66 | +为了解决上述问题,BERT4Rec将NLP中的Mask Language任务迁移到序列推荐问题来,给予了序列推荐一种不同于item2item,left2right的训练范式。 |
| 67 | +具体来说,对于一条物品序列,以一定的概率p随机mask掉序列中的物品(体现在data_augment_candi_gen.py),使用Transformer的Encoder结构对masked item进行预测(net.py)。 |
| 68 | +训练的过程中,则是取出Encoder对应mask位置的representation来预测mask的label物品。即完形填空。 |
| 69 | + |
| 70 | +可以注意到,通过随机mask,我们可以成倍的生成新样本。(BERT4Rec训练样本是原有的十一倍(10:随机mask 1:原本样本)) 因此BERT4Rec效果的提升,也从数据增强的角度来解释。即通过数据增强,和完形填空式的前置任务的方式使得模型训练得更加充分。 |
| 71 | + |
| 72 | +在模型上面,BERT4Rec正如其名,就是跟BERT一样,使用Transformer的Encoder部分来做序列特征提取。 |
| 73 | + |
| 74 | +在测试的时候,我们只需要mask掉序列最后的物品,并取出模型最后一步的representation出来,那么就将训练好的模型成功应用在Next-item Prediction任务上。 |
| 75 | + |
| 76 | +## 效果复现 |
| 77 | + |
| 78 | +| 模型 | HR@10 | NDCG@10 | MRR | epoch_num| Time of each epoch | |
| 79 | +| :------| :------ |:------ | :------ | :------| :------ | |
| 80 | +| BERT4Rec | 0.305 | 0.184 | 0.166 | 50 | 约2小时 | |
| 81 | + |
| 82 | +1. 确认您当前所在目录为 `PaddleRec/models/rank/bert4rec` |
| 83 | +2. 进入 `PaddleRec/datasets/Beauty` 目录下,执行该脚本,会从国内源的服务器上下载我们预处理完成的 Beauty 全量数据集,并解压到指定文件夹。 |
| 84 | +``` bash |
| 85 | +cd ../../../datasets/Beauty |
| 86 | +sh run.sh |
| 87 | +``` |
| 88 | +3. 切回模型目录,执行命令运行全量数据 |
| 89 | + |
| 90 | +```bash |
| 91 | +# 进入模型目录 |
| 92 | +# 动态图训练 |
| 93 | +python -u ../../../tools/trainer.py -m config_bigdata.yaml |
| 94 | +# 动态图预测 |
| 95 | +python -u ../../../tools/infer.py -m config_bigdata.yaml |
| 96 | + |
| 97 | +``` |
| 98 | + |
| 99 | +## 进阶使用 |
| 100 | + |
| 101 | +## FAQ |
0 commit comments