From 7d501da2924aa3010ea82243bc01251caa1e2c2b Mon Sep 17 00:00:00 2001 From: seiriosPlus Date: Fri, 4 Sep 2020 00:51:57 +0800 Subject: [PATCH] add online learning --- doc/online_learning.md | 18 +- models/demo/online_learning/README.md | 261 ++++++++++++++++++ models/demo/online_learning/__init__.py | 13 + models/demo/online_learning/backend.yaml | 63 +++++ models/demo/online_learning/config.yaml | 88 ++++++ models/demo/online_learning/data/download.sh | 13 + .../online_learning/data/get_slot_data.py | 71 +++++ models/demo/online_learning/data/run.sh | 25 ++ .../data/sample_data/train/sample_train.txt | 80 ++++++ models/demo/online_learning/model.py | 101 +++++++ .../online_learning/online_learning_runner.py | 131 +++++++++ 11 files changed, 863 insertions(+), 1 deletion(-) create mode 100644 models/demo/online_learning/README.md create mode 100755 models/demo/online_learning/__init__.py create mode 100644 models/demo/online_learning/backend.yaml create mode 100755 models/demo/online_learning/config.yaml create mode 100644 models/demo/online_learning/data/download.sh create mode 100755 models/demo/online_learning/data/get_slot_data.py create mode 100644 models/demo/online_learning/data/run.sh create mode 100644 models/demo/online_learning/data/sample_data/train/sample_train.txt create mode 100755 models/demo/online_learning/model.py create mode 100644 models/demo/online_learning/online_learning_runner.py diff --git a/doc/online_learning.md b/doc/online_learning.md index 16fad1b2..83bab4bd 100644 --- a/doc/online_learning.md +++ b/doc/online_learning.md @@ -1,6 +1,22 @@ -# PaddleRec 启动训练 +# PaddleRec 流式训练(OnlineLearning)任务启动及配置流程 +## 流式训练简介 +流式训练是按照一定顺序进行数据的接收和处理,每接收一个数据,模型会对它进行预测并对当前模型进行更新,然后处理下一个数据。 像信息流、小视频、电商等场景,每天都会新增大量的数据, 让每天(每一刻)新增的数据基于上一天(上一刻)的模型进行新的预测和模型更新。 + +在大规模流式训练场景下, 需要使用的深度学习框架有对应的能力支持, 即: +* 支持大规模分布式训练的能力, 数据量巨大, 需要有良好的分布式训练及扩展能力,才能满足训练的时效要求 +* 支持超大规模的Embedding, 能够支持十亿甚至千亿级别的Embedding, 拥有合理的参数输出的能力,能够快速输出模型参数并和线上其他系统进行对接 +* Embedding的特征ID需要支持HASH映射,不要求ID的编码,能够自动增长及控制特征的准入(原先不存在的特征可以以适当的条件创建), 能够定期淘汰(能够以一定的策略进行过期的特征的清理) 并拥有准入及淘汰策略 +* 最后就是要基于框架开发一套完备的流式训练的 trainer.py, 能够拥有完善的流式训练流程 + +## 使用PaddleRec内置的 online learning 进行模型的训练 +目前,PaddleRec基于飞桨分布式训练框架的能力,实现了这套流式训练的流程。 供大家参考和使用。我们在`models/online_learning`目录下提供了一个ctr-dnn的online_training的版本,供大家更好的理解和参考。 + +**注意** +1. 使用online learning 需要安装目前Paddle最新的开发者版本, 你可以从 https://www.paddlepaddle.org.cn/documentation/docs/zh/install/Tables.html#whl-dev 此处获得它,需要先卸载当前已经安装的飞桨版本,根据自己的Python环境下载相应的安装包。 +2. 使用流式训练及大规模稀疏的能力,需要对模型做一些微调, 因此需要你修改部分代码。 +3. 当前只有参数服务器的分布式训练是支持带大规模稀疏的流式训练的,因此运行时,请直接选择参数服务器本地训练或集群训练方法。 ## 启动方法 diff --git a/models/demo/online_learning/README.md b/models/demo/online_learning/README.md new file mode 100644 index 00000000..9656adc6 --- /dev/null +++ b/models/demo/online_learning/README.md @@ -0,0 +1,261 @@ +# 基于DNN模型的点击率预估模型 + +## 介绍 +`CTR(Click Through Rate)`,即点击率,是“推荐系统/计算广告”等领域的重要指标,对其进行预估是商品推送/广告投放等决策的基础。简单来说,CTR预估对每次广告的点击情况做出预测,预测用户是点击还是不点击。CTR预估模型综合考虑各种因素、特征,在大量历史数据上训练,最终对商业决策提供帮助。本模型实现了下述论文中提出的DNN模型: + +```text +@inproceedings{guo2017deepfm, + title={DeepFM: A Factorization-Machine based Neural Network for CTR Prediction}, + author={Huifeng Guo, Ruiming Tang, Yunming Ye, Zhenguo Li and Xiuqiang He}, + booktitle={the Twenty-Sixth International Joint Conference on Artificial Intelligence (IJCAI)}, + pages={1725--1731}, + year={2017} +} +``` + +# +## 数据准备 +### 数据来源 +训练及测试数据集选用[Display Advertising Challenge](https://www.kaggle.com/c/criteo-display-ad-challenge/)所用的Criteo数据集。该数据集包括两部分:训练集和测试集。训练集包含一段时间内Criteo的部分流量,测试集则对应训练数据后一天的广告点击流量。 +每一行数据格式如下所示: +```bash +