Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
BaiXuePrincess
PaddleRec
提交
d50c3834
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看板
提交
d50c3834
编写于
9月 24, 2020
作者:
Y
yinhaofeng
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
readme.md
上级
d0a9258e
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
14 addition
and
8 deletion
+14
-8
models/rank/deepfm/config.yaml
models/rank/deepfm/config.yaml
+1
-1
models/rank/deepfm/readme.md
models/rank/deepfm/readme.md
+13
-7
未找到文件。
models/rank/deepfm/config.yaml
浏览文件 @
d50c3834
...
@@ -43,7 +43,7 @@ hyper_parameters:
...
@@ -43,7 +43,7 @@ hyper_parameters:
act
:
"
relu"
act
:
"
relu"
mode
:
train_runner
mode
:
[
train_runner
,
infer_runner
]
# if infer, change mode to "infer_runner" and change phase to "infer_phase"
# if infer, change mode to "infer_runner" and change phase to "infer_phase"
runner
:
runner
:
...
...
models/rank/deepfm/readme.md
浏览文件 @
d50c3834
...
@@ -43,10 +43,7 @@
...
@@ -43,10 +43,7 @@
year={2017}
year={2017}
}
}
```
```
在全量数据下模型的指标如下:
| 模型 | auc | batch_size | thread_num| epoch_num| Time of each epoch |
| :------| :------ | :------| :------ | :------| :------ | :------ |
| deepFM | 0.8044 | 1024 | 10 | 2 | 约3.5小时 |
## 数据准备
## 数据准备
### 数据来源
### 数据来源
训练及测试数据集选用
[
Display Advertising Challenge
](
https://www.kaggle.com/c/criteo-display-ad-challenge/
)
所用的Criteo数据集。该数据集包括两部分:训练集和测试集。训练集包含一段时间内Criteo的部分流量,测试集则对应训练数据后一天的广告点击流量。
训练及测试数据集选用
[
Display Advertising Challenge
](
https://www.kaggle.com/c/criteo-display-ad-challenge/
)
所用的Criteo数据集。该数据集包括两部分:训练集和测试集。训练集包含一段时间内Criteo的部分流量,测试集则对应训练数据后一天的广告点击流量。
...
@@ -104,6 +101,7 @@ PaddleRec Finish
...
@@ -104,6 +101,7 @@ PaddleRec Finish
## 模型组网
## 模型组网
deepFM模型的组网本质是一个二分类任务,代码参考
`model.py`
。模型主要组成是一阶项部分,二阶项部分,dnn部分以及相应的分类任务的loss计算和auc计算。模型的组网可以看做FM部分和dnn部分的结合,其中FM部分主要的工作是通过特征间交叉得到低阶特征,以二阶特征为主。FM的表达式如下,可观察到,只是在线性表达式后面加入了新的交叉项特征及对应的权值。
deepFM模型的组网本质是一个二分类任务,代码参考
`model.py`
。模型主要组成是一阶项部分,二阶项部分,dnn部分以及相应的分类任务的loss计算和auc计算。模型的组网可以看做FM部分和dnn部分的结合,其中FM部分主要的工作是通过特征间交叉得到低阶特征,以二阶特征为主。FM的表达式如下,可观察到,只是在线性表达式后面加入了新的交叉项特征及对应的权值。
$$Out=sigmoid(b +
\s
um^{N}_{i=1}W_iX_i +
\s
um^{N-1}_{i=1}
\s
um^{N}_{j=i+1}W_{ij}X_iX_j)$$
$$Out=sigmoid(b +
\s
um^{N}_{i=1}W_iX_i +
\s
um^{N-1}_{i=1}
\s
um^{N}_{j=i+1}W_{ij}X_iX_j)$$
### 一阶项部分
### 一阶项部分
...
@@ -112,10 +110,12 @@ $$Out=sigmoid(b + \sum^{N}_{i=1}W_iX_i + \sum^{N-1}_{i=1}\sum^{N}_{j=i+1}W_{ij}X
...
@@ -112,10 +110,12 @@ $$Out=sigmoid(b + \sum^{N}_{i=1}W_iX_i + \sum^{N-1}_{i=1}\sum^{N}_{j=i+1}W_{ij}X
各个稀疏的输入通过Embedding层后,进行reshape操作,方便和连续值进行结合。
各个稀疏的输入通过Embedding层后,进行reshape操作,方便和连续值进行结合。
将离散数据通过embedding查表得到的值,与连续数据的输入进行相乘再累加的操作,合为一个一阶项的整体。
将离散数据通过embedding查表得到的值,与连续数据的输入进行相乘再累加的操作,合为一个一阶项的整体。
用公式表示如下:
用公式表示如下:
$$
\s
um^{N}_{i=1}W_iX_i$$
$$
\s
um^{N}_{i=1}W_iX_i$$
### 二阶项部分
### 二阶项部分
二阶项部分主要实现了公式中的交叉项部分,也就是特征的组合部分。Wij求解的思路是通过矩阵分解的方法。所有的二次项参数Wij可以组成一个对称阵W,那么这个矩阵就可以分解为 $W=V^TV$,V 的第 i 列便是第 i 维特征的隐向量。交叉项的展开式如下:
二阶项部分主要实现了公式中的交叉项部分,也就是特征的组合部分。Wij求解的思路是通过矩阵分解的方法。所有的二次项参数Wij可以组成一个对称阵W,那么这个矩阵就可以分解为 $W=V^TV$,V 的第 i 列便是第 i 维特征的隐向量。交叉项的展开式如下:
$$
\s
um^{N-1}_{i=1}
\s
um^{N}_{j=i+1}W_{ij}X_iX_j =1/2
\s
um^{k}_{j=1}((
\s
um^{N}_{i=1}W_iX_i)^2-
\s
um^{N}_{i=1}W_i^2X_i^2)$$
$$
\s
um^{N-1}_{i=1}
\s
um^{N}_{j=i+1}W_{ij}X_iX_j =1/2
\s
um^{k}_{j=1}((
\s
um^{N}_{i=1}W_iX_i)^2-
\s
um^{N}_{i=1}W_i^2X_i^2)$$
### Loss及Auc计算
### Loss及Auc计算
...
@@ -126,7 +126,13 @@ $$\sum^{N-1}_{i=1}\sum^{N}_{j=i+1}W_{ij}X_iX_j =1/2\sum^{k}_{j=1}((\sum^{N}_{i=1
...
@@ -126,7 +126,13 @@ $$\sum^{N-1}_{i=1}\sum^{N}_{j=i+1}W_{ij}X_iX_j =1/2\sum^{k}_{j=1}((\sum^{N}_{i=1
完成上述组网后,我们最终可以通过训练拿到
`auc`
指标。
完成上述组网后,我们最终可以通过训练拿到
`auc`
指标。
## 效果复现
## 效果复现
为了方便使用者能够快速的跑通每一个模型,我们在每个模型下都提供了样例数据。如果需要复现readme中的效果,请按如下步骤依次操作即可。
为了方便使用者能够快速的跑通每一个模型,我们在每个模型下都提供了样例数据。如果需要复现readme中的效果,请按如下步骤依次操作即可。
在全量数据下模型的指标如下:
| 模型 | auc | batch_size | thread_num| epoch_num| Time of each epoch |
| :------| :------ | :------| :------ | :------| :------ | :------
| deepFM | 0.8044 | 1024 | 10 | 2 | 约3.5小时 |
1.
确认您当前所在目录为PaddleRec/models/rank/deepfm
1.
确认您当前所在目录为PaddleRec/models/rank/deepfm
2.
在data目录下运行数据一键处理脚本,命令如下:
2.
在data目录下运行数据一键处理脚本,命令如下:
```
```
...
@@ -140,11 +146,11 @@ cd ..
...
@@ -140,11 +146,11 @@ cd ..
将train_sample中的data_path改为{workspace}/data/slot_train_data
将train_sample中的data_path改为{workspace}/data/slot_train_data
将infer_sample中的batch_size从5改为1024
将infer_sample中的batch_size从5改为1024
将infer_sample中的data_path改为{workspace}/data/slot_test_data
将infer_sample中的data_path改为{workspace}/data/slot_test_data
4.
开始训练。运行命令启动训练即可得到
相应auc指标
4.
运行命令,模型会进行两个epoch的训练,然后进行一个epoch的预测,并获得
相应auc指标
```
```
python -m paddlerec.run -m ./config.yaml
python -m paddlerec.run -m ./config.yaml
```
```
5.
全量数据的训练
结果示例如下:
5.
经过全量数据训练后,执行预测的
结果示例如下:
```
```
PaddleRec: Runner infer_runner Begin
PaddleRec: Runner infer_runner Begin
Executor Mode: infer
Executor Mode: infer
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录