diff --git a/ctr/README.md b/ctr/README.md index 85460e19465d13029ad78b93ac063444dfaea7bd..90f036ba583aaa60974625973e17e7bde40fcf22 100644 --- a/ctr/README.md +++ b/ctr/README.md @@ -2,29 +2,29 @@

Table of Contents

- + # 背景介绍 @@ -51,7 +51,7 @@ CTR(Click-through rate) 是用来表示用户点击一个特定链接的概率 逐渐地接过 CTR 预估任务的大旗。 - + ## LR vs DNN @@ -73,7 +73,7 @@ LR 对于 NN 模型的优势是对大规模稀疏特征的容纳能力,包括 本文后面的章节会演示如何使用 PaddlePaddle 编写一个结合两者优点的模型。 - + # 数据和任务抽象 @@ -90,14 +90,14 @@ LR 对于 NN 模型的优势是对大规模稀疏特征的容纳能力,包括 具体的特征处理方法参看 [data process](./dataset.md) - + # Wide & Deep Learning Model 谷歌在 16 年提出了 Wide & Deep Learning 的模型框架,用于融合适合学习抽象特征的 DNN 和 适用于大规模稀疏特征的 LR 两种模型的优点。 - + ## 模型简介 @@ -112,7 +112,7 @@ Wide & Deep Learning Model 可以作为一种相对成熟的模型框架使用 而模型右边的 Deep 部分,能够学习特征间的隐含关系,在相同数量的特征下有更好的学习和推导能力。 - + ## 编写模型输入 @@ -136,7 +136,7 @@ click = paddle.layer.data(name='click', type=dtype.dense_vector(1)) ``` - + ## 编写 Wide 部分 @@ -151,7 +151,7 @@ def build_lr_submodel(): ``` - + ## 编写 Deep 部分 @@ -173,7 +173,7 @@ def build_dnn_submodel(dnn_layer_dims): ``` - + ## 两者融合 @@ -195,7 +195,7 @@ def combine_submodels(dnn, lr): ``` - + ## 训练任务的定义 @@ -244,7 +244,7 @@ trainer.train( ``` - + # 引用 diff --git a/ctr/dataset.md b/ctr/dataset.md index 080877e92e9d444800a96c24aefdcb491b5edb18..19c8b788bcae5278ac37a425bc193d12e95d11c4 100644 --- a/ctr/dataset.md +++ b/ctr/dataset.md @@ -2,34 +2,34 @@

Table of Contents

- + # 数据集介绍 @@ -54,7 +54,7 @@ - `C14-C21` – anonymized categorical variables - + # 特征提取 @@ -64,7 +64,7 @@ 1. ID 类特征(稀疏,数量多) ```python -- id +- `id` - `site_id` - `app_id` - `device_id` @@ -73,7 +73,7 @@ 2. 类别类特征(稀疏,但数量有限) ```python -- C1 +- `C1` - `site_category` - `device_type` - `C14-C21` @@ -87,7 +87,7 @@ ``` - + ## 类别类特征 @@ -97,7 +97,7 @@ 2. 类似词向量,用一个 Embedding Table 将每个类别映射到对应的向量 - + ## ID 类特征 @@ -112,7 +112,7 @@ ID 类特征的特点是稀疏数据,但量比较大,直接使用 One-hot 上面的方法尽管存在一定的碰撞概率,但能够处理任意数量的 ID 特征,并保留一定的效果[2]。 - + ## 数值型特征 @@ -122,12 +122,12 @@ ID 类特征的特点是稀疏数据,但量比较大,直接使用 One-hot - 用区间分割处理成类别类特征,稀疏化表示,模糊细微上的差别 - + # 特征处理 - + ## 类别型特征 @@ -177,7 +177,7 @@ class CategoryFeatureGenerator(object): 本任务中,类别类特征会输入到 DNN 中使用。 - + ## ID 类特征 @@ -205,7 +205,7 @@ class IDfeatureGenerator(object): ``` - + ## 交叉类特征 @@ -225,12 +225,12 @@ def gen_cross_fea(self, fea1, fea2): 我们通过组合出两者组合来捕捉这类信息。 - + ## 特征维度 - + ### Deep submodel(DNN)特征 @@ -269,7 +269,7 @@ def gen_cross_fea(self, fea1, fea2): -hour +`hour` 24 @@ -289,7 +289,7 @@ def gen_cross_fea(self, fea1, fea2): - + ### Wide submodel(LR)特征 @@ -310,7 +310,7 @@ def gen_cross_fea(self, fea1, fea2): -id +`id` 100000 @@ -348,16 +348,16 @@ def gen_cross_fea(self, fea1, fea2): - + # 输入到 PaddlePaddle 中 Deep 和 Wide 两部分均以 `sparse_binary_vector` 的格式[1]输入,输入前需要将相关特征拼合,模型最终只接受 3 个 input, 分别是 -1. ~dnn input~,DNN 的输入 -2. `lr input`, LR 的输入 -3. ~click~, 标签 +1. `dnn input` ,DNN 的输入 +2. `lr input` , LR 的输入 +3. `click` , 标签 拼合特征的方法: diff --git a/ctr/dataset.org b/ctr/dataset.org index 5ef55c9a0b379257d6bfd7a6a0d1268886dbabf6..af008694a422aac8901dc0127db6bc6499b4623c 100644 --- a/ctr/dataset.org +++ b/ctr/dataset.org @@ -26,19 +26,23 @@ 原始数据中的特征可以分为以下几类: 1. ID 类特征(稀疏,数量多) - - id + + - ~id~ - ~site_id~ - ~app_id~ - ~device_id~ 2. 类别类特征(稀疏,但数量有限) - - C1 + + - ~C1~ - ~site_category~ - ~device_type~ - ~C14-C21~ 3. 数值型特征转化为类别型特征 + - hour (可以转化成数值,也可以按小时为单位转化为类别) + ** 类别类特征 类别类特征的提取方法有以下两种: @@ -152,31 +156,31 @@ ID 类特征的特点是稀疏数据,但量比较大,直接使用 One-hot | ~app_category~ | 21 | | ~site_category~ | 22 | | ~device_conn_type~ | 5 | -| hour | 24 | +| ~hour~ | 24 | | ~banner_pos~ | 7 | |--------------------+-----------| | Total | 79 | |--------------------+-----------| *** Wide submodel(LR)特征 -|-------------------------+-----------| -| Feature | Dimention | -|-------------------------+-----------| -| id | 100000 | +|-------------------------+------------| +| Feature | Dimention | +|-------------------------+------------| +| ~id~ | 100000 | | ~site_id~ | 100000 | | ~app_id~ | 100000 | | ~device_id~ | 100000 | | ~device_id~ X ~site_id~ | 10000000 | -|-------------------------+-----------| +|-------------------------+------------| | Total | 10,400,000 | -|-------------------------+-----------| +|-------------------------+------------| * 输入到 PaddlePaddle 中 Deep 和 Wide 两部分均以 ~sparse_binary_vector~ 的格式[1]输入,输入前需要将相关特征拼合,模型最终只接受 3 个 input, 分别是 -1. ~dnn input~,DNN 的输入 -2. ~lr input~, LR 的输入 -3. ~click~, 标签 +1. ~dnn input~ ,DNN 的输入 +2. ~lr input~ , LR 的输入 +3. ~click~ , 标签 拼合特征的方法: