Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
BaiXuePrincess
PaddleRec
提交
031c11d0
P
PaddleRec
项目概览
BaiXuePrincess
/
PaddleRec
与 Fork 源项目一致
Fork自
PaddlePaddle / PaddleRec
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
P
PaddleRec
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
未验证
提交
031c11d0
编写于
8月 25, 2020
作者:
W
wuzhihua
提交者:
GitHub
8月 25, 2020
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'master' into multiview-simnet
上级
bed0a70a
c9c2a695
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
112 addition
and
139 deletion
+112
-139
models/multitask/mmoe/README.md
models/multitask/mmoe/README.md
+104
-130
models/multitask/mmoe/config.yaml
models/multitask/mmoe/config.yaml
+8
-9
未找到文件。
models/multitask/mmoe/README.md
浏览文件 @
031c11d0
# MMOE
以下是本例的简要目录结构及说明:
```
├── data # 文档
├── train #训练数据
├── train_data.txt
├── test #测试数据
├── test_data.txt
├── run.sh
├── data_preparation.py
├── __init__.py
├── config.yaml #配置文件
├── census_reader.py #数据读取文件
├── model.py #模型文件
```
注:在阅读该示例前,建议您先了解以下内容:
[
paddlerec入门教程
](
https://github.com/PaddlePaddle/PaddleRec/blob/master/README.md
)
## 内容
-
[
模型简介
](
https://github.com/PaddlePaddle/PaddleRec/tree/master/models/multitask/mmoe#模型简介
)
-
[
数据准备
](
https://github.com/PaddlePaddle/PaddleRec/tree/master/models/multitask/mmoe#数据准备
)
-
[
运行环境
](
https://github.com/PaddlePaddle/PaddleRec/tree/master/models/multitask/mmoe#运行环境
)
-
[
快速开始
](
https://github.com/PaddlePaddle/PaddleRec/tree/master/models/multitask/mmoe#快速开始
)
-
[
论文复现
](
https://github.com/PaddlePaddle/PaddleRec/tree/master/models/multitask/mmoe#论文复现
)
-
[
进阶使用
](
https://github.com/PaddlePaddle/PaddleRec/tree/master/models/multitask/mmoe#进阶使用
)
-
[
FAQ
](
https://github.com/PaddlePaddle/PaddleRec/tree/master/models/multitask/mmoe#FAQ
)
## 模型简介
多任务模型通过学习不同任务的联系和差异,可提高每个任务的学习效率和质量。多任务学习的的框架广泛采用shared-bottom的结构,不同任务间共用底部的隐层。这种结构本质上可以减少过拟合的风险,但是效果上可能受到任务差异和数据分布带来的影响。 论文
[
《Modeling Task Relationships in Multi-task Learning with Multi-gate Mixture-of-Experts》
](
https://www.kdd.org/kdd2018/accepted-papers/view/modeling-task-relationships-in-multi-task-learning-with-multi-gate-mixture-
)
中提出了一个Multi-gate Mixture-of-Experts(MMOE)的多任务学习结构。MMOE模型刻画了任务相关性,基于共享表示来学习特定任务的函数,避免了明显增加参数的缺点。
我们在Paddlepaddle定义MMOE的网络结构,在开源数据集Census-income Data上验证模型效果,两个任务的auc分别为:
1.
income
> max_mmoe_test_auc_income:0.94937
>
> mean_mmoe_test_auc_income:0.94465
2.
marital
> max_mmoe_test_auc_marital:0.99419
>
> mean_mmoe_test_auc_marital:0.99324
若进行精度验证,请参考
[
论文复现
](
https://github.com/PaddlePaddle/PaddleRec/tree/master/models/multitask/mmoe#论文复现
)
部分。
本项目支持功能
# MMOE
以下是本例的简要目录结构及说明:
```
├── data # 文档
├── train #训练数据
├── train_data.txt
├── test #测试数据
├── test_data.txt
├── run.sh
├── data_preparation.py
├── __init__.py
├── config.yaml #配置文件
├── census_reader.py #数据读取文件
├── model.py #模型文件
```
注:在阅读该示例前,建议您先了解以下内容:
[
paddlerec入门教程
](
https://github.com/PaddlePaddle/PaddleRec/blob/master/README.md
)
## 内容
-
[
模型简介
](
https://github.com/PaddlePaddle/PaddleRec/tree/master/models/multitask/mmoe#模型简介
)
-
[
数据准备
](
https://github.com/PaddlePaddle/PaddleRec/tree/master/models/multitask/mmoe#数据准备
)
-
[
运行环境
](
https://github.com/PaddlePaddle/PaddleRec/tree/master/models/multitask/mmoe#运行环境
)
-
[
快速开始
](
https://github.com/PaddlePaddle/PaddleRec/tree/master/models/multitask/mmoe#快速开始
)
-
[
论文复现
](
https://github.com/PaddlePaddle/PaddleRec/tree/master/models/multitask/mmoe#论文复现
)
-
[
进阶使用
](
https://github.com/PaddlePaddle/PaddleRec/tree/master/models/multitask/mmoe#进阶使用
)
-
[
FAQ
](
https://github.com/PaddlePaddle/PaddleRec/tree/master/models/multitask/mmoe#FAQ
)
## 模型简介
多任务模型通过学习不同任务的联系和差异,可提高每个任务的学习效率和质量。多任务学习的的框架广泛采用shared-bottom的结构,不同任务间共用底部的隐层。这种结构本质上可以减少过拟合的风险,但是效果上可能受到任务差异和数据分布带来的影响。 论文
[
《Modeling Task Relationships in Multi-task Learning with Multi-gate Mixture-of-Experts》
](
https://www.kdd.org/kdd2018/accepted-papers/view/modeling-task-relationships-in-multi-task-learning-with-multi-gate-mixture-
)
中提出了一个Multi-gate Mixture-of-Experts(MMOE)的多任务学习结构。MMOE模型刻画了任务相关性,基于共享表示来学习特定任务的函数,避免了明显增加参数的缺点。
我们在Paddlepaddle定义MMOE的网络结构,在开源数据集Census-income Data上验证模型效果。
若进行精度验证,请参考
[
论文复现
](
https://github.com/PaddlePaddle/PaddleRec/tree/master/models/multitask/mmoe#论文复现
)
部分。
本项目支持功能
训练:单机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
)
## 数据准备
数据地址:
[
Census-income Data
](
https://archive.ics.uci.edu/ml/machine-learning-databases/census-income-mld/census.tar.gz
)
数据地址:
[
Census-income Data
](
https://archive.ics.uci.edu/ml/machine-learning-databases/census-income-mld/census.tar.gz
)
生成的格式以逗号为分割点
```
0,0,73,0,0,0,0,1700.09,0,0
```
完整的大数据参考论文复现部分。
数据解压后, 在run.sh脚本文件中添加文件的路径,并运行脚本。
## 运行环境
```
sh
mkdir
train_data
mkdir
test_data
mkdir
data
train_path
=
"data/census-income.data"
test_path
=
"data/census-income.test"
train_data_path
=
"train_data/"
test_data_path
=
"test_data/"
pip
install
-r
requirements.txt
wget
-P
data/ https://archive.ics.uci.edu/ml/machine-learning-databases/census-income-mld/census.tar.gz
tar
-zxvf
data/census.tar.gz
-C
data/
PaddlePaddle>=1.7.2
python data_preparation.py
--train_path
${
train_path
}
\
--test_path
${
test_path
}
\
--train_data_path
${
train_data_path
}
\
--test_data_path
${
test_data_path
}
python 2.7/3.5/3.6/3.7
PaddleRec >=0.1
os : windows/linux/macos
## 快速开始
### 单机训练
CPU环境
在config.yaml文件中设置好设备,epochs等。
```
dataset:
- name: dataset_train
batch_size: 5
type: QueueDataset
data_path: "{workspace}/data/train"
data_converter: "{workspace}/census_reader.py"
- name: dataset_infer
batch_size: 5
type: QueueDataset
data_path: "{workspace}/data/train"
data_converter: "{workspace}/census_reader.py"
```
生成的格式以逗号为分割点
### 单机预测
CPU环境
在config.yaml文件中设置好epochs、device等参数。
```
0,0,73,0,0,0,0,1700.09,0,0
- name: infer_runner
class: infer
init_model_path: "increment/0"
device: cpu
```
## 论文复现
数据下载,我们提供了在百度云上预处理好的数据,可以直接训练
```
wget https://paddlerec.bj.bcebos.com/mmoe/train_data.csv
wget https://paddlerec.bj.bcebos.com/mmoe/test_data.csv
wget https://paddlerec.bj.bcebos.com/mmoe/config_all.yaml
```
用原论文的完整数据复现论文效果需要在config.yaml中修改batch_size=32 gpu配置等,可参考config_all.yaml
## 运行环境
PaddlePaddle>=1.7.2
python 2.7/3.5/3.6/3.7
PaddleRec >=0.1
os : windows/linux/macos
## 快速开始
### 单机训练
CPU环境
在config.yaml文件中设置好设备,epochs等。
```
dataset:
- name: dataset_train
batch_size: 5
type: QueueDataset
data_path: "{workspace}/data/train"
data_converter: "{workspace}/census_reader.py"
- name: dataset_infer
batch_size: 5
type: QueueDataset
data_path: "{workspace}/data/train"
data_converter: "{workspace}/census_reader.py"
```
### 单机预测
CPU环境
在config.yaml文件中设置好epochs、device等参数。
```
- name: infer_runner
class: infer
init_model_path: "increment/0"
device: cpu
```
## 论文复现
用原论文的完整数据复现论文效果需要在config.yaml中修改batch_size=1000, thread_num=8, epoch_num=4
使用gpu p100 单卡训练 6.5h 测试auc: best:0.9940, mean:0.9932
修改后运行方案:修改config.yaml中的'workspace'为config.yaml的目录位置,执行
```
python -m paddlerec.run -m /home/your/dir/config.yaml #调试模式 直接指定本地config的绝对路径
```
## 进阶使用
```
python -m paddlerec.run -m /home/your/dir/config_all.yaml #调试模式 直接指定本地config的绝对路径
```
## 进阶使用
## FAQ
models/multitask/mmoe/config.yaml
浏览文件 @
031c11d0
...
...
@@ -16,12 +16,12 @@ workspace: "models/multitask/mmoe"
dataset
:
-
name
:
dataset_train
batch_size
:
1
batch_size
:
5
type
:
QueueDataset
data_path
:
"
{workspace}/data/train"
data_converter
:
"
{workspace}/census_reader.py"
-
name
:
dataset_infer
batch_size
:
1
batch_size
:
5
type
:
QueueDataset
data_path
:
"
{workspace}/data/train"
data_converter
:
"
{workspace}/census_reader.py"
...
...
@@ -38,15 +38,14 @@ hyper_parameters:
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
class
:
train
device
:
cpu
epochs
:
3
save_checkpoint_interval
:
2
save_checkpoint_interval
:
1
save_inference_interval
:
4
save_checkpoint_path
:
"
increment"
save_inference_path
:
"
inference"
...
...
@@ -61,7 +60,7 @@ phase:
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
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录