diff --git a/models/rank/fibinet/README.md b/models/rank/fibinet/README.md index ea8c58d5b2eb6ef1208cf136d6ae516add42524f..4d015f6054900015a76e1537de76af9c49f8d3c2 100644 --- a/models/rank/fibinet/README.md +++ b/models/rank/fibinet/README.md @@ -16,13 +16,35 @@ ├── config.yaml #配置文件 ``` -## 简介 +注:在阅读该示例前,建议您先了解以下内容: + +[paddlerec入门教程](https://github.com/PaddlePaddle/PaddleRec/blob/master/README.md) + + +--- +## 内容 + +- [模型简介](#模型简介) +- [数据准备](#数据准备) +- [运行环境](#运行环境) +- [快速开始](#快速开始) +- [论文复现](#论文复现) +- [进阶使用](#进阶使用) +- [FAQ](#FAQ) + +## 模型简介 [《FiBiNET: Combining Feature Importance and Bilinear feature Interaction for Click-Through Rate Prediction》]( https://arxiv.org/pdf/1905.09433.pdf)是新浪微博机器学习团队发表在RecSys19上的一篇论文,文章指出当前的许多通过特征组合进行CTR预估的工作主要使用特征向量的内积或哈达玛积来计算交叉特征,这种方法忽略了特征本身的重要程度。提出通过使用Squeeze-Excitation network (SENET) 结构动态学习特征的重要性以及使用一个双线性函数来更好的建模交叉特征。 -本项目在paddlepaddle上实现FibiNET的网络结构,并在开源数据集Criteo上验证模型效果。 +本项目在paddlepaddle上实现FibiNET的网络结构,并在开源数据集Criteo上验证模型效果, 本模型配置默认使用demo数据集,若进行精度验证,请参考[论文复现](#论文复现)部分。 + +本项目支持功能 + +训练:单机CPU、单机单卡GPU、单机多卡GPU、本地模拟参数服务器训练、增量训练,配置请参考 [启动训练](https://github.com/PaddlePaddle/PaddleRec/blob/master/doc/train.md) + +预测:单机CPU、单机单卡GPU ;配置请参考[PaddleRec 离线预测](https://github.com/PaddlePaddle/PaddleRec/blob/master/doc/predict.md) -## 数据下载及预处理 +## 数据准备 数据地址:[Criteo]( https://fleet.bj.bcebos.com/ctr_data.tar.gz) @@ -36,15 +58,33 @@ sh run.sh ``` -## 环境 +原始的数据格式为13个dense部分特征+离散化特征,用'\t'切分, 对应的数据是data/train_data_full data/test_data_full +``` +0 1 1 5 0 1382 4 15 2 181 1 2 2 68fd1e64 80e26c9b fb936136 7b4723c4 25c83c98 7e0ccccf de7995b8 1f89b562 a73ee510 a8cd5504 b2cb9c98 37c9c164 2824a5f6 1adce6ef 8ba8b39a 891b62e7 e5ba7672 f54016b9 21ddcdc9 b1252a9d 07b5194c 3a171ecb c5c50484 e8b83407 9727dd16 +``` + +经过get_slot_data.py处理后,得到如下数据, dense_feature中的值会merge在一起,对应net.py中的self._dense_data_var, '1:715353'表示net.py中的self._sparse_data_var[1] = 715353, 对应的数据是data/slot_train_data_full, data/slot_test_data_full +``` +click:0 dense_feature:0.05 dense_feature:0.00663349917081 dense_feature:0.05 dense_feature:0.0 dense_feature:0.02159375 dense_feature:0.008 dense_feature:0.15 dense_feature:0.04 dense_feature:0.362 dense_feature:0.1 dense_feature:0.2 dense_feature:0.0 dense_feature:0.04 1:715353 2:817085 3:851010 4:833725 5:286835 6:948614 7:881652 8:507110 9:27346 10:646986 11:643076 12:200960 13:18464 14:202774 15:532679 16:729573 17:342789 18:562805 19:880474 20:984402 21:666449 22:26235 23:700326 24:452909 25:884722 26:787527 +``` + + -PaddlePaddle 1.7.2 +## 运行环境 -python3.7 +PaddlePaddle>=1.7.2 -PaddleRec +python 2.7/3.5/3.6/3.7 -## 单机训练 +PaddleRec >=0.1 + +os : windows/linux/macos + + + +## 快速开始 + +### 单机训练 CPU环境 @@ -73,7 +113,7 @@ runner: phases: [phase1] ``` -## 单机预测 +### 单机预测 CPU环境 @@ -90,17 +130,15 @@ CPU环境 phases: [phase2] ``` -## 运行 - +### 运行 ``` python -m paddlerec.run -m paddlerec.models.rank.fibinet ``` -## 模型效果 -在样例数据上测试模型 +### 结果展示 -训练: +样例数据训练结果展示: ``` Running SingleStartup. @@ -122,7 +160,7 @@ batch: 1800, AUC: [0.85260467], BATCH_AUC: [0.92847032] epoch 3 done, use time: 1618.1106688976288 ``` -预测 +样例数据预测结果展示 ``` load persistables from increment_model/3 @@ -136,3 +174,18 @@ batch: 1800, AUC: [0.86633785], BATCH_AUC: [0.96900967] batch: 1820, AUC: [0.86662365], BATCH_AUC: [0.96759972] ``` +## 论文复现 + +用原论文的完整数据复现论文效果需要在config.yaml中修改batch_size=1000, thread_num=8, epoch_num=4 + +使用gpu p100 单卡训练 60h 测试auc:0.79 + + +修改后运行方案:修改config.yaml中的'workspace'为config.yaml的目录位置,执行 +``` +python -m paddlerec.run -m /home/your/dir/config.yaml #调试模式 直接指定本地config的绝对路径 +``` + +## 进阶使用 + +## FAQ diff --git a/models/rerank/listwise/config.yaml b/models/rerank/listwise/config.yaml index 6d06ab09a58e44976af5219fd34dd9fd41525eff..82432e1c9dbc0ff3381ee9826eafb396fd1bef24 100644 --- a/models/rerank/listwise/config.yaml +++ b/models/rerank/listwise/config.yaml @@ -17,29 +17,30 @@ workspace: "paddlerec.models.rerank.listwise" dataset: - name: dataset_train + batch_size: 5 type: DataLoader data_path: "{workspace}/data/train" data_converter: "{workspace}/random_reader.py" - name: dataset_infer + batch_size: 5 type: DataLoader data_path: "{workspace}/data/test" data_converter: "{workspace}/random_reader.py" hyper_parameters: + optimizer: + class: sgd + learning_rate: 0.01 + strategy: async hidden_size: 128 user_vocab: 200 item_vocab: 1000 item_len: 5 embed_size: 16 batch_size: 1 - optimizer: - class: sgd - learning_rate: 0.01 - strategy: async #use infer_runner mode and modify 'phase' below if infer -mode: train_runner -#mode: infer_runner +mode: [train_runner, infer_runner] runner: - name: train_runner @@ -48,19 +49,22 @@ runner: epochs: 3 save_checkpoint_interval: 2 save_inference_interval: 4 - save_checkpoint_path: "increment" + save_checkpoint_path: "increment_listwise" save_inference_path: "inference" + print_interval: 1 + phases: [train] - name: infer_runner class: infer - init_model_path: "increment/0" + init_model_path: "increment_listwise/2" device: cpu + phases: [infer] phase: - name: train model: "{workspace}/model.py" dataset_name: dataset_train thread_num: 1 - #- name: infer - # model: "{workspace}/model.py" - # dataset_name: dataset_infer - # thread_num: 1 +- name: infer + model: "{workspace}/model.py" + dataset_name: dataset_infer + thread_num: 1