Skip to content

Commit 64fc8ed

Browse files
authored
Merge pull request #712 from wangzhen38/bug_test_fix
fix bert4rec and ensfm doc
2 parents 1f1d93e + 138a755 commit 64fc8ed

File tree

6 files changed

+112
-111
lines changed

6 files changed

+112
-111
lines changed

models/multitask/dselect_k/config.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
# limitations under the License.
1414

1515
runner:
16-
train_data_dir: "data/sample_data"
16+
train_data_dir: "data/sample_data.pickle"
1717
train_reader_path: "multiMNIST_reader" # importlib format
1818
use_gpu: False
1919
use_auc: True
@@ -22,7 +22,7 @@ runner:
2222
print_interval: 2
2323
#model_init_path: "output_model/0" # init model
2424
model_save_path: "output_model_dselect_k"
25-
test_data_dir: "data/sample_data"
25+
test_data_dir: "data/sample_data.pickle"
2626
infer_batch_size: 8
2727
infer_reader_path: "multiMNIST_reader" # importlib format
2828
infer_load_path: "output_model_dselect_k"

models/multitask/dselect_k/config_bigdata.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ runner:
2323
#model_init_path: "output_model/0" # init model
2424
model_save_path: "output_model_dselect_k_all"
2525
test_data_dir: "../../../datasets/Multi_MNIST_DselectK/test"
26-
infer_batch_size: 20000
26+
infer_batch_size: 256
2727
infer_reader_path: "multiMNIST_reader" # importlib format
2828
infer_load_path: "output_model_dselect_k_all"
2929
infer_start_epoch: 0

models/multitask/dselect_k/readme.md

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,8 +68,7 @@
6868

6969
上图是其中一张图片,与经典数据集 MNIST 不同,该图片上包含两位数字,左上和右下,对应两个多分类任务。数据集划分为训练集、验证集、测试集,数量分别为 100000、20000、20000。
7070

71-
在 PaperswithCode 网站上检索到 【NeurlPS 2019】[Pareto Multi-Task Learning](https://arxiv.org/pdf/1912.12854v1.pdf) 公布了该数据集,
72-
下载链接: https://drive.google.com/drive/folders/1VnmCmBAVh8f_BKJg1KYx-E137gBLXbGG。
71+
在 PaperswithCode 网站上检索到 【NeurlPS 2019】[Pareto Multi-Task Learning](https://arxiv.org/pdf/1912.12854v1.pdf) 公布了该数据集。
7372

7473

7574
## 运行环境

models/rank/bert4rec/config.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,11 @@ runner:
2323
epochs: 1
2424
print_interval: 1
2525

26-
model_save_path: "output_model_bert4rec_demo"
26+
model_save_path: "output_model_bert4rec"
2727
test_data_dir: "data/test/"
2828
infer_reader_path: "data_reader" # importlib format
2929
infer_batch_size: 1
30-
infer_load_path: "output_model_bert4rec_demo"
30+
infer_load_path: "output_model_bert4rec"
3131
infer_start_epoch: 0
3232
infer_end_epoch: 1
3333

models/rank/bert4rec/readme.md

Lines changed: 101 additions & 98 deletions
Original file line numberDiff line numberDiff line change
@@ -1,98 +1,101 @@
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

models/recall/ensfm/readme.md

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
├── test.csv #训练数据样例
1010
├── config.yaml # sample数据配置
1111
├── config_bigdata.yaml # 全量数据数据配置
12-
├── download.sh # 下载全量数据
1312
├── dygraph_model.py # 构建动态图
1413
├── infer.py # 预测脚本
1514
├── movielens_reader.py #数据读取程序
@@ -46,7 +45,7 @@ python 2.7/3.5/3.6/3.7
4645
os : windows/linux/macos
4746

4847
## 快速开始
49-
本文提供了样例数据可以供您快速体验,在任意目录下均可执行。在ncf模型目录的快速执行命令如下
48+
本文提供了样例数据可以供您快速体验,在任意目录下均可执行。在ensfm模型目录的快速执行命令如下
5049
```bash
5150
# 进入模型目录
5251
# cd models/recall/ensfm # 在任意目录均可运行
@@ -67,18 +66,18 @@ python -u infer.py -m config.yaml
6766
| :------| :------ |:------ | :------ | :------| :------ |
6867
| ENSFM | 0.058 | 0.1 | 512 | 500 | 约2分钟 |
6968

70-
1. 确认您当前所在目录为PaddleRec/models/recall/ensfm
71-
2. 进入paddlerec/datasets/ml-1m_ensfm
69+
1. 确认您当前所在目录为`PaddleRec/models/recall/ensfm`
70+
2. 进入`Paddlerec/datasets/ml-1m_ensfm`
7271
3. 执行该脚本,会从国内源的服务器上下载我们预处理完成的movielens全量数据集,并解压到指定文件夹。
7372

7473
``` bash
75-
cd ../../../datasets/movielens_pinterest_NCF
74+
cd ../../../datasets/ml-1m_ensfm
7675
sh run.sh
7776
```
7877

7978
```bash
8079
cd - # 切回模型目录
81-
# 动态图训练并得到指标(这里需要使用bash启动脚本)
80+
# 动态图训练并得到指标
8281
python -u ../../../tools/trainer.py -m config_bigdata.yaml
8382
python -u infer.py -m config_bigdata.yaml
8483
```

0 commit comments

Comments
 (0)