Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
PaddlePaddle
PaddleRec
提交
d50c3834
P
PaddleRec
项目概览
PaddlePaddle
/
PaddleRec
通知
68
Star
12
Fork
5
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
27
列表
看板
标记
里程碑
合并请求
10
Wiki
1
Wiki
分析
仓库
DevOps
项目成员
Pages
P
PaddleRec
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
27
Issue
27
列表
看板
标记
里程碑
合并请求
10
合并请求
10
Pages
分析
分析
仓库分析
DevOps
Wiki
1
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:
act
:
"
relu"
mode
:
train_runner
mode
:
[
train_runner
,
infer_runner
]
# if infer, change mode to "infer_runner" and change phase to "infer_phase"
runner
:
...
...
models/rank/deepfm/readme.md
浏览文件 @
d50c3834
...
...
@@ -43,10 +43,7 @@
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的部分流量,测试集则对应训练数据后一天的广告点击流量。
...
...
@@ -104,6 +101,7 @@ PaddleRec Finish
## 模型组网
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)$$
### 一阶项部分
...
...
@@ -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查表得到的值,与连续数据的输入进行相乘再累加的操作,合为一个一阶项的整体。
用公式表示如下:
$$
\s
um^{N}_{i=1}W_iX_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)$$
### 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
完成上述组网后,我们最终可以通过训练拿到
`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
2.
在data目录下运行数据一键处理脚本,命令如下:
```
...
...
@@ -140,11 +146,11 @@ cd ..
将train_sample中的data_path改为{workspace}/data/slot_train_data
将infer_sample中的batch_size从5改为1024
将infer_sample中的data_path改为{workspace}/data/slot_test_data
4.
开始训练。运行命令启动训练即可得到
相应auc指标
4.
运行命令,模型会进行两个epoch的训练,然后进行一个epoch的预测,并获得
相应auc指标
```
python -m paddlerec.run -m ./config.yaml
```
5.
全量数据的训练
结果示例如下:
5.
经过全量数据训练后,执行预测的
结果示例如下:
```
PaddleRec: Runner infer_runner Begin
Executor Mode: infer
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录