“cb7afb8588b56f918b66676f19dbbef9bcba6358”上不存在“ppstructure/predict_system.py”
README.md 4.6 KB
Newer Older
O
overlordmax 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136
# ESMM

以下是本例的简要目录结构及说明: 

```
├── README.md			 # 文档
├── net.py				 # ESMM网络结构
├── train.py			 # ESMM模型训练脚本
├── infer.py			 # ESMM模型预测脚本
├── reader.py			 # 数据预处理文件
├── utils.py			 # 通用函数
├── args.py				 # 参数脚本
├── get_data.sh			 # 生成训练数据脚本
├── dataset_generator.py # dataset生成脚本
├── gpu_train.sh		 # gpu训练shell脚本
├── cpu_train.sh		 # cpu训练shell脚本
├── gpu_infer.sh		 # gpu预测shell脚本
├── cpu_infer.sh		 # cpu预测shell脚本
```

## 简介

不同于CTR预估问题,CVR预估面临两个关键问题:

1. **Sample Selection Bias (SSB)** 转化是在点击之后才“有可能”发生的动作,传统CVR模型通常以点击数据为训练集,其中点击未转化为负例,点击并转化为正例。但是训练好的模型实际使用时,则是对整个空间的样本进行预估,而非只对点击样本进行预估。即是说,训练数据与实际要预测的数据来自不同分布,这个偏差对模型的泛化能力构成了很大挑战。
2. **Data Sparsity (DS)** 作为CVR训练数据的点击样本远小于CTR预估训练使用的曝光样本。

ESMM是发表在 SIGIR’2018 的论文[《Entire Space Multi-Task Model: An Effective Approach for Estimating Post-Click Conversion Rate》](  https://arxiv.org/abs/1804.07931  )文章基于 Multi-Task Learning 的思路,提出一种新的CVR预估模型——ESMM,有效解决了真实场景中CVR预估面临的数据稀疏以及样本选择偏差这两个关键问题

本项目再Paddlepaddle定义ESMM的网络结构,并在论文的公开数据集[Ali-CCP:Alibaba Click and Conversion Prediction](  https://tianchi.aliyun.com/datalab/dataSet.html?dataId=408  )验证模型的效果(目前只抽取部分数据验证模型的正确性)。

## 环境

 PaddlePaddle 1.7.0 

 python3.7 

## 数据下载及预处理

执行get_data.sh即可获得处理后的数据

```shell
./get_data.sh
```

## 单机训练

GPU环境

在gpu_train.sh脚本文件中设置好数据路径、参数。

```shell
CUDA_VISIBLE_DEVICES=0 python train.py	--use_gpu True\  #是否使用gpu
                                        --epochs 100\  #训练轮次
                                        --batch_size 64\  #batch_size大小
                                        --embed_size 12\  #每个featsigns的embedding维度
                                        --cpu_num 2\  #cpu数量
                                        --model_dir ./model_dir \  #模型保存路径
                                        --train_data_path ./train_data \  #训练数据路径
                                        --vocab_path ./vocab/vocab_size.txt #embedding词汇表大小路径
```

修改脚本的可执行权限并运行

```shell
./gpu_train.sh
```

CPU环境

在cpu_train.sh脚本文件中设置好数据路径、参数。

```shell
python train.py --use_gpu False\  #是否使用gpu
                --epochs 100\  #训练轮次
                --batch_size 64\  #batch_size大小
                --embed_size 12\  #每个featsigns的embedding维度
                --cpu_num 2\  #cpu数量
                --model_dir ./model_dir \  #模型保存路径
                --train_data_path ./train_data \  #训练数据路径
                --vocab_path ./vocab/vocab_size.txt #embedding词汇表大小路径
```

修改脚本的可执行权限并运行

```
./cpu_train.sh
```

## 预测

GPU环境

在gpu_infer.sh脚本文件中设置好数据路径、参数。

```sh
python infer.py --use_gpu True\  #是否使用gpu
                --batch_size 64\  #batch_size大小
                --test_data_path ./test_data \  #训练数据路径
                --vocab_path ./vocab/vocab_size.txt #embedding词汇表大小路径
```

修改脚本的可执行权限并运行

```shell
./gpu_infer.sh
```

CPU环境

在cpu_train.sh脚本文件中设置好数据路径、参数。

```shell
python infer.py --use_gpu False\  #是否使用gpu
                --batch_size 64\  #batch_size大小
                --cpu_num 2\  #cpu数量
                --test_data_path ./test_data \  #训练数据路径
                --vocab_path ./vocab/vocab_size.txt #embedding词汇表大小路径
```

## 模型效果

目前只抽取部分数据验证模型正确性。模型预测结果实例如下:

> auc_ctr	auc_0.tmp_0		lod: {}
> 	dim: 1
> 	layout: NCHW
> 	dtype: double
> 	data: [0.971812]
> 	
> auc_ctcvr	auc_1.tmp_0		lod: {}
> 	dim: 1
> 	layout: NCHW
> 	dtype: double
> 	data: [0.499668]