提交 4f705218 编写于 作者: S Superjom

wrap slashed words with ~

上级 07ba10b1
...@@ -2,29 +2,29 @@ ...@@ -2,29 +2,29 @@
<h2>Table of Contents</h2> <h2>Table of Contents</h2>
<div id="text-table-of-contents"> <div id="text-table-of-contents">
<ul> <ul>
<li><a href="#org466cf34">1. 背景介绍</a> <li><a href="#orgc28ecb9">1. 背景介绍</a>
<ul> <ul>
<li><a href="#orgf06d0ce">1.1. LR vs DNN</a></li> <li><a href="#orge91be83">1.1. LR vs DNN</a></li>
</ul> </ul>
</li> </li>
<li><a href="#orgb599ca8">2. 数据和任务抽象</a></li> <li><a href="#orgb9f7917">2. 数据和任务抽象</a></li>
<li><a href="#org9ca5c95">3. Wide &amp; Deep Learning Model</a> <li><a href="#orga236fe5">3. Wide &amp; Deep Learning Model</a>
<ul> <ul>
<li><a href="#org8ce8325">3.1. 模型简介</a></li> <li><a href="#org2b15cec">3.1. 模型简介</a></li>
<li><a href="#org7c4e5de">3.2. 编写模型输入</a></li> <li><a href="#org97ffb58">3.2. 编写模型输入</a></li>
<li><a href="#org18b2115">3.3. 编写 Wide 部分</a></li> <li><a href="#org65eb281">3.3. 编写 Wide 部分</a></li>
<li><a href="#org80d7554">3.4. 编写 Deep 部分</a></li> <li><a href="#org2f04073">3.4. 编写 Deep 部分</a></li>
<li><a href="#orge8947b8">3.5. 两者融合</a></li> <li><a href="#org627bd1a">3.5. 两者融合</a></li>
<li><a href="#orgaf3e9f2">3.6. 训练任务的定义</a></li> <li><a href="#orgbfd11b8">3.6. 训练任务的定义</a></li>
</ul> </ul>
</li> </li>
<li><a href="#orgad3893f">4. 引用</a></li> <li><a href="#org4c7ec78">4. 引用</a></li>
</ul> </ul>
</div> </div>
</div> </div>
<a id="org466cf34"></a> <a id="orgc28ecb9"></a>
# 背景介绍 # 背景介绍
...@@ -51,7 +51,7 @@ CTR(Click-through rate) 是用来表示用户点击一个特定链接的概率 ...@@ -51,7 +51,7 @@ CTR(Click-through rate) 是用来表示用户点击一个特定链接的概率
逐渐地接过 CTR 预估任务的大旗。 逐渐地接过 CTR 预估任务的大旗。
<a id="orgf06d0ce"></a> <a id="orge91be83"></a>
## LR vs DNN ## LR vs DNN
...@@ -73,7 +73,7 @@ LR 对于 NN 模型的优势是对大规模稀疏特征的容纳能力,包括 ...@@ -73,7 +73,7 @@ LR 对于 NN 模型的优势是对大规模稀疏特征的容纳能力,包括
本文后面的章节会演示如何使用 PaddlePaddle 编写一个结合两者优点的模型。 本文后面的章节会演示如何使用 PaddlePaddle 编写一个结合两者优点的模型。
<a id="orgb599ca8"></a> <a id="orgb9f7917"></a>
# 数据和任务抽象 # 数据和任务抽象
...@@ -90,14 +90,14 @@ LR 对于 NN 模型的优势是对大规模稀疏特征的容纳能力,包括 ...@@ -90,14 +90,14 @@ LR 对于 NN 模型的优势是对大规模稀疏特征的容纳能力,包括
具体的特征处理方法参看 [data process](./dataset.md) 具体的特征处理方法参看 [data process](./dataset.md)
<a id="org9ca5c95"></a> <a id="orga236fe5"></a>
# Wide & Deep Learning Model # Wide & Deep Learning Model
谷歌在 16 年提出了 Wide & Deep Learning 的模型框架,用于融合适合学习抽象特征的 DNN 和 适用于大规模稀疏特征的 LR 两种模型的优点。 谷歌在 16 年提出了 Wide & Deep Learning 的模型框架,用于融合适合学习抽象特征的 DNN 和 适用于大规模稀疏特征的 LR 两种模型的优点。
<a id="org8ce8325"></a> <a id="org2b15cec"></a>
## 模型简介 ## 模型简介
...@@ -112,7 +112,7 @@ Wide & Deep Learning Model 可以作为一种相对成熟的模型框架使用 ...@@ -112,7 +112,7 @@ Wide & Deep Learning Model 可以作为一种相对成熟的模型框架使用
而模型右边的 Deep 部分,能够学习特征间的隐含关系,在相同数量的特征下有更好的学习和推导能力。 而模型右边的 Deep 部分,能够学习特征间的隐含关系,在相同数量的特征下有更好的学习和推导能力。
<a id="org7c4e5de"></a> <a id="org97ffb58"></a>
## 编写模型输入 ## 编写模型输入
...@@ -136,7 +136,7 @@ click = paddle.layer.data(name='click', type=dtype.dense_vector(1)) ...@@ -136,7 +136,7 @@ click = paddle.layer.data(name='click', type=dtype.dense_vector(1))
``` ```
<a id="org18b2115"></a> <a id="org65eb281"></a>
## 编写 Wide 部分 ## 编写 Wide 部分
...@@ -151,7 +151,7 @@ def build_lr_submodel(): ...@@ -151,7 +151,7 @@ def build_lr_submodel():
``` ```
<a id="org80d7554"></a> <a id="org2f04073"></a>
## 编写 Deep 部分 ## 编写 Deep 部分
...@@ -173,7 +173,7 @@ def build_dnn_submodel(dnn_layer_dims): ...@@ -173,7 +173,7 @@ def build_dnn_submodel(dnn_layer_dims):
``` ```
<a id="orge8947b8"></a> <a id="org627bd1a"></a>
## 两者融合 ## 两者融合
...@@ -195,7 +195,7 @@ def combine_submodels(dnn, lr): ...@@ -195,7 +195,7 @@ def combine_submodels(dnn, lr):
``` ```
<a id="orgaf3e9f2"></a> <a id="orgbfd11b8"></a>
## 训练任务的定义 ## 训练任务的定义
...@@ -244,7 +244,7 @@ trainer.train( ...@@ -244,7 +244,7 @@ trainer.train(
``` ```
<a id="orgad3893f"></a> <a id="org4c7ec78"></a>
# 引用 # 引用
......
...@@ -2,59 +2,59 @@ ...@@ -2,59 +2,59 @@
<h2>Table of Contents</h2> <h2>Table of Contents</h2>
<div id="text-table-of-contents"> <div id="text-table-of-contents">
<ul> <ul>
<li><a href="#orgc5babdf">1. 数据集介绍</a></li> <li><a href="#orgc14f235">1. 数据集介绍</a></li>
<li><a href="#orgbbc9886">2. 特征提取</a> <li><a href="#orgbbd35aa">2. 特征提取</a>
<ul> <ul>
<li><a href="#orgce8b3e2">2.1. 类别类特征</a></li> <li><a href="#org6cd6490">2.1. 类别类特征</a></li>
<li><a href="#org36ef5ff">2.2. ID 类特征</a></li> <li><a href="#orga7b8fc0">2.2. ID 类特征</a></li>
<li><a href="#org86e6ead">2.3. 数值型特征</a></li> <li><a href="#orgd9e9727">2.3. 数值型特征</a></li>
</ul> </ul>
</li> </li>
<li><a href="#orgb22787c">3. 特征处理</a> <li><a href="#orgd77edab">3. 特征处理</a>
<ul> <ul>
<li><a href="#orge3814aa">3.1. 类别型特征</a></li> <li><a href="#orgd148362">3.1. 类别型特征</a></li>
<li><a href="#org0d48201">3.2. ID 类特征</a></li> <li><a href="#orge427332">3.2. ID 类特征</a></li>
<li><a href="#org399e146">3.3. 交叉类特征</a></li> <li><a href="#org417457a">3.3. 交叉类特征</a></li>
<li><a href="#org2ce9054">3.4. 特征维度</a> <li><a href="#org7ed28fc">3.4. 特征维度</a>
<ul> <ul>
<li><a href="#org02df08b">3.4.1. Deep submodel(DNN)特征</a></li> <li><a href="#orgecae989">3.4.1. Deep submodel(DNN)特征</a></li>
<li><a href="#org76983ab">3.4.2. Wide submodel(LR)特征</a></li> <li><a href="#orgc7a00e0">3.4.2. Wide submodel(LR)特征</a></li>
</ul> </ul>
</li> </li>
</ul> </ul>
</li> </li>
<li><a href="#org38b7a5c">4. 输入到 PaddlePaddle 中</a></li> <li><a href="#org8a65ed5">4. 输入到 PaddlePaddle 中</a></li>
</ul> </ul>
</div> </div>
</div> </div>
<a id="orgc5babdf"></a> <a id="orgc14f235"></a>
# 数据集介绍 # 数据集介绍
数据集使用 `csv` 格式存储,其中各个字段内容如下: 数据集使用 `csv` 格式存储,其中各个字段内容如下:
- id: ad identifier - `id` : ad identifier
- click: 0/1 for non-click/click - `click` : 0/1 for non-click/click
- hour: format is YYMMDDHH, so 14091123 means 23:00 on Sept. 11, 2014 UTC. - `hour` : format is YYMMDDHH, so 14091123 means 23:00 on Sept. 11, 2014 UTC.
- C1 &#x2013; anonymized categorical variable - `C1` &#x2013; anonymized categorical variable
- banner<sub>pos</sub> - `banner_pos`
- site<sub>id</sub> - `site_id`
- site<sub>domain</sub> - `site_domain`
- site<sub>category</sub> - `site_category`
- app<sub>id</sub> - `app_id`
- app<sub>domain</sub> - `app_domain`
- app<sub>category</sub> - `app_category`
- device<sub>id</sub> - `device_id`
- device<sub>ip</sub> - `device_ip`
- device<sub>model</sub> - `device_model`
- device<sub>type</sub> - `device_type`
- device<sub>conn</sub><sub>type</sub> - `device_conn_type`
- C14-C21 &#x2013; anonymized categorical variables - `C14-C21` &#x2013; anonymized categorical variables
<a id="orgbbc9886"></a> <a id="orgbbd35aa"></a>
# 特征提取 # 特征提取
...@@ -65,18 +65,18 @@ ...@@ -65,18 +65,18 @@
1. ID 类特征(稀疏,数量多) 1. ID 类特征(稀疏,数量多)
```python ```python
- id - id
- site<sub>id</sub> - `site_id`
- app<sub>id</sub> - `app_id`
- device<sub>id</sub> - `device_id`
``` ```
2. 类别类特征(稀疏,但数量有限) 2. 类别类特征(稀疏,但数量有限)
```python ```python
- C1 - C1
- site<sub>category</sub> - `site_category`
- device<sub>type</sub> - `device_type`
- C14-C21 - `C14-C21`
``` ```
...@@ -87,7 +87,7 @@ ...@@ -87,7 +87,7 @@
``` ```
<a id="orgce8b3e2"></a> <a id="org6cd6490"></a>
## 类别类特征 ## 类别类特征
...@@ -97,7 +97,7 @@ ...@@ -97,7 +97,7 @@
2. 类似词向量,用一个 Embedding Table 将每个类别映射到对应的向量 2. 类似词向量,用一个 Embedding Table 将每个类别映射到对应的向量
<a id="org36ef5ff"></a> <a id="orga7b8fc0"></a>
## ID 类特征 ## ID 类特征
...@@ -112,7 +112,7 @@ ID 类特征的特点是稀疏数据,但量比较大,直接使用 One-hot ...@@ -112,7 +112,7 @@ ID 类特征的特点是稀疏数据,但量比较大,直接使用 One-hot
上面的方法尽管存在一定的碰撞概率,但能够处理任意数量的 ID 特征,并保留一定的效果[2]。 上面的方法尽管存在一定的碰撞概率,但能够处理任意数量的 ID 特征,并保留一定的效果[2]。
<a id="org86e6ead"></a> <a id="orgd9e9727"></a>
## 数值型特征 ## 数值型特征
...@@ -122,12 +122,12 @@ ID 类特征的特点是稀疏数据,但量比较大,直接使用 One-hot ...@@ -122,12 +122,12 @@ ID 类特征的特点是稀疏数据,但量比较大,直接使用 One-hot
- 用区间分割处理成类别类特征,稀疏化表示,模糊细微上的差别 - 用区间分割处理成类别类特征,稀疏化表示,模糊细微上的差别
<a id="orgb22787c"></a> <a id="orgd77edab"></a>
# 特征处理 # 特征处理
<a id="orge3814aa"></a> <a id="orgd148362"></a>
## 类别型特征 ## 类别型特征
...@@ -177,7 +177,7 @@ class CategoryFeatureGenerator(object): ...@@ -177,7 +177,7 @@ class CategoryFeatureGenerator(object):
本任务中,类别类特征会输入到 DNN 中使用。 本任务中,类别类特征会输入到 DNN 中使用。
<a id="org0d48201"></a> <a id="orge427332"></a>
## ID 类特征 ## ID 类特征
...@@ -205,7 +205,7 @@ class IDfeatureGenerator(object): ...@@ -205,7 +205,7 @@ class IDfeatureGenerator(object):
``` ```
<a id="org399e146"></a> <a id="org417457a"></a>
## 交叉类特征 ## 交叉类特征
...@@ -225,12 +225,12 @@ def gen_cross_fea(self, fea1, fea2): ...@@ -225,12 +225,12 @@ def gen_cross_fea(self, fea1, fea2):
我们通过组合出两者组合来捕捉这类信息。 我们通过组合出两者组合来捕捉这类信息。
<a id="org2ce9054"></a> <a id="org7ed28fc"></a>
## 特征维度 ## 特征维度
<a id="org02df08b"></a> <a id="orgecae989"></a>
### Deep submodel(DNN)特征 ### Deep submodel(DNN)特征
...@@ -251,19 +251,19 @@ def gen_cross_fea(self, fea1, fea2): ...@@ -251,19 +251,19 @@ def gen_cross_fea(self, fea1, fea2):
<tbody> <tbody>
<tr> <tr>
<td class="org-left">app<sub>category</sub></td> <td class="org-left">`app_category`</td>
<td class="org-right">21</td> <td class="org-right">21</td>
</tr> </tr>
<tr> <tr>
<td class="org-left">site<sub>category</sub></td> <td class="org-left">`site_category`</td>
<td class="org-right">22</td> <td class="org-right">22</td>
</tr> </tr>
<tr> <tr>
<td class="org-left">device<sub>conn</sub><sub>type</sub></td> <td class="org-left">`device_conn_type`</td>
<td class="org-right">5</td> <td class="org-right">5</td>
</tr> </tr>
...@@ -275,7 +275,7 @@ def gen_cross_fea(self, fea1, fea2): ...@@ -275,7 +275,7 @@ def gen_cross_fea(self, fea1, fea2):
<tr> <tr>
<td class="org-left">banner<sub>pos</sub></td> <td class="org-left">`banner_pos`</td>
<td class="org-right">7</td> <td class="org-right">7</td>
</tr> </tr>
</tbody> </tbody>
...@@ -289,7 +289,7 @@ def gen_cross_fea(self, fea1, fea2): ...@@ -289,7 +289,7 @@ def gen_cross_fea(self, fea1, fea2):
</table> </table>
<a id="org76983ab"></a> <a id="orgc7a00e0"></a>
### Wide submodel(LR)特征 ### Wide submodel(LR)特征
...@@ -311,44 +311,44 @@ def gen_cross_fea(self, fea1, fea2): ...@@ -311,44 +311,44 @@ def gen_cross_fea(self, fea1, fea2):
<tbody> <tbody>
<tr> <tr>
<td class="org-left">id</td> <td class="org-left">id</td>
<td class="org-right">10000</td> <td class="org-right">100000</td>
</tr> </tr>
<tr> <tr>
<td class="org-left">site<sub>id</sub></td> <td class="org-left">`site_id`</td>
<td class="org-right">10000</td> <td class="org-right">100000</td>
</tr> </tr>
<tr> <tr>
<td class="org-left">app<sub>id</sub></td> <td class="org-left">`app_id`</td>
<td class="org-right">10000</td> <td class="org-right">100000</td>
</tr> </tr>
<tr> <tr>
<td class="org-left">device<sub>id</sub></td> <td class="org-left">`device_id`</td>
<td class="org-right">10000</td> <td class="org-right">100000</td>
</tr> </tr>
<tr> <tr>
<td class="org-left">device<sub>id</sub> X site<sub>id</sub></td> <td class="org-left">`device_id` X `site_id`</td>
<td class="org-right">1000000</td> <td class="org-right">10000000</td>
</tr> </tr>
</tbody> </tbody>
<tbody> <tbody>
<tr> <tr>
<td class="org-left">Total</td> <td class="org-left">Total</td>
<td class="org-right">1,040,000</td> <td class="org-right">10,400,000</td>
</tr> </tr>
</tbody> </tbody>
</table> </table>
<a id="org38b7a5c"></a> <a id="org8a65ed5"></a>
# 输入到 PaddlePaddle 中 # 输入到 PaddlePaddle 中
......
...@@ -2,23 +2,23 @@ ...@@ -2,23 +2,23 @@
* 数据集介绍 * 数据集介绍
数据集使用 ~csv~ 格式存储,其中各个字段内容如下: 数据集使用 ~csv~ 格式存储,其中各个字段内容如下:
- id: ad identifier - ~id~ : ad identifier
- click: 0/1 for non-click/click - ~click~ : 0/1 for non-click/click
- hour: format is YYMMDDHH, so 14091123 means 23:00 on Sept. 11, 2014 UTC. - ~hour~ : format is YYMMDDHH, so 14091123 means 23:00 on Sept. 11, 2014 UTC.
- C1 -- anonymized categorical variable - ~C1~ -- anonymized categorical variable
- banner_pos - ~banner_pos~
- site_id - ~site_id~
- site_domain - ~site_domain~
- site_category - ~site_category~
- app_id - ~app_id~
- app_domain - ~app_domain~
- app_category - ~app_category~
- device_id - ~device_id~
- device_ip - ~device_ip~
- device_model - ~device_model~
- device_type - ~device_type~
- device_conn_type - ~device_conn_type~
- C14-C21 -- anonymized categorical variables - ~C14-C21~ -- anonymized categorical variables
* 特征提取 * 特征提取
下面我们会简单演示几种特征的提取方式。 下面我们会简单演示几种特征的提取方式。
...@@ -27,15 +27,15 @@ ...@@ -27,15 +27,15 @@
1. ID 类特征(稀疏,数量多) 1. ID 类特征(稀疏,数量多)
- id - id
- site_id - ~site_id~
- app_id - ~app_id~
- device_id - ~device_id~
2. 类别类特征(稀疏,但数量有限) 2. 类别类特征(稀疏,但数量有限)
- C1 - C1
- site_category - ~site_category~
- device_type - ~device_type~
- C14-C21 - ~C14-C21~
3. 数值型特征转化为类别型特征 3. 数值型特征转化为类别型特征
- hour (可以转化成数值,也可以按小时为单位转化为类别) - hour (可以转化成数值,也可以按小时为单位转化为类别)
...@@ -146,30 +146,30 @@ ID 类特征的特点是稀疏数据,但量比较大,直接使用 One-hot ...@@ -146,30 +146,30 @@ ID 类特征的特点是稀疏数据,但量比较大,直接使用 One-hot
我们通过组合出两者组合来捕捉这类信息。 我们通过组合出两者组合来捕捉这类信息。
** 特征维度 ** 特征维度
*** Deep submodel(DNN)特征 *** Deep submodel(DNN)特征
|------------------+-----------| |--------------------+-----------|
| feature | dimention | | feature | dimention |
|------------------+-----------| |--------------------+-----------|
| app_category | 21 | | ~app_category~ | 21 |
| site_category | 22 | | ~site_category~ | 22 |
| device_conn_type | 5 | | ~device_conn_type~ | 5 |
| hour | 24 | | hour | 24 |
| banner_pos | 7 | | ~banner_pos~ | 7 |
|------------------+-----------| |--------------------+-----------|
| Total | 79 | | Total | 79 |
|------------------+-----------| |--------------------+-----------|
*** Wide submodel(LR)特征 *** Wide submodel(LR)特征
|---------------------+-----------| |-------------------------+-----------|
| Feature | Dimention | | Feature | Dimention |
|---------------------+-----------| |-------------------------+-----------|
| id | 10000 | | id | 100000 |
| site_id | 10000 | | ~site_id~ | 100000 |
| app_id | 10000 | | ~app_id~ | 100000 |
| device_id | 10000 | | ~device_id~ | 100000 |
| device_id X site_id | 1000000 | | ~device_id~ X ~site_id~ | 10000000 |
|---------------------+-----------| |-------------------------+-----------|
| Total | 1,040,000 | | Total | 10,400,000 |
|---------------------+-----------| |-------------------------+-----------|
* 输入到 PaddlePaddle 中 * 输入到 PaddlePaddle 中
Deep 和 Wide 两部分均以 ~sparse_binary_vector~ 的格式[1]输入,输入前需要将相关特征拼合,模型最终只接受 3 个 input, Deep 和 Wide 两部分均以 ~sparse_binary_vector~ 的格式[1]输入,输入前需要将相关特征拼合,模型最终只接受 3 个 input,
分别是 分别是
......
...@@ -5,9 +5,9 @@ import logging ...@@ -5,9 +5,9 @@ import logging
import paddle.v2 as paddle import paddle.v2 as paddle
from paddle.v2 import layer from paddle.v2 import layer
from paddle.v2 import data_type as dtype from paddle.v2 import data_type as dtype
from data_provider import categorial_features, id_features, field_index, detect_dataset, AvazuDataset, get_all_field_names from data_provider import field_index, detect_dataset, AvazuDataset
id_features_space = 10000 id_features_space = 100000
dnn_layer_dims = [128, 64, 32, 1] dnn_layer_dims = [128, 64, 32, 1]
train_data_path = './train.txt' train_data_path = './train.txt'
data_meta_info = detect_dataset(train_data_path, 500000) data_meta_info = detect_dataset(train_data_path, 500000)
...@@ -90,18 +90,20 @@ trainer = paddle.trainer.SGD( ...@@ -90,18 +90,20 @@ trainer = paddle.trainer.SGD(
dataset = AvazuDataset(train_data_path, n_records_as_test=test_set_size) dataset = AvazuDataset(train_data_path, n_records_as_test=test_set_size)
def event_handler(event): def event_handler(event):
if isinstance(event, paddle.event.EndIteration): if isinstance(event, paddle.event.EndIteration):
if event.batch_id % 100 == 0: if event.batch_id % 100 == 0:
logging.warning("Pass %d, Samples %d, Cost %f" % ( logging.warning("Pass %d, Samples %d, Cost %f" %
event.pass_id, event.batch_id * batch_size, event.cost)) (event.pass_id, event.batch_id * batch_size,
event.cost))
if event.batch_id % 1000 == 0: if event.batch_id % 1000 == 0:
result = trainer.test( result = trainer.test(
reader=paddle.batch(dataset.test, batch_size=1000), reader=paddle.batch(dataset.test, batch_size=1000),
feeding=field_index) feeding=field_index)
logging.warning("Test %d-%d, Cost %f" % (event.pass_id, event.batch_id, logging.warning("Test %d-%d, Cost %f" %
result.cost)) (event.pass_id, event.batch_id, result.cost))
trainer.train( trainer.train(
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册