diff --git a/ctr/README.md b/ctr/README.md index 95c33a233f97f842e01de86f4b5257ed73691be8..7c1a5159b363eb215c200730509f25cf7157221f 100644 --- a/ctr/README.md +++ b/ctr/README.md @@ -2,7 +2,7 @@ ## 背景介绍 -CTR(Click-Through Rate)[\[1\]](https://en.wikipedia.org/wiki/Click-through_rate) 是用来表示用户点击一个特定链接的概率, +CTR(Click-Through Rate)\[[1](https://en.wikipedia.org/wiki/Click-through_rate)\] 是用来表示用户点击一个特定链接的概率, 通常被用来衡量一个在线广告系统的有效性。 当有多个广告位时,CTR 预估一般会作为排序的基准。 @@ -31,7 +31,7 @@ CTR(Click-Through Rate)[\[1\]](https://en.wikipedia.org/wiki/Click-through_rate)


-Figure 1. LR 和DNN模型结构对比 +Figure 1. LR 和 DNN 模型结构对比

LR 的蓝色箭头部分可以直接类比到 DNN 中对应的结构,可以看到 LR 和 DNN 有一些共通之处(比如权重累加), @@ -50,7 +50,7 @@ LR 对于 DNN 模型的优势是对大规模稀疏特征的容纳能力,包括 ## 数据和任务抽象 -我们可以将 `click` 作为学习目标,具体任务可以有以下几种方案: +我们可以将 `click` 作为学习目标,任务可以有以下几种方案: 1. 直接学习 click,0,1 作二元分类 2. Learning to rank, 具体用 pairwise rank(标签 1>0)或者 listwise rank @@ -58,7 +58,7 @@ LR 对于 DNN 模型的优势是对大规模稀疏特征的容纳能力,包括 我们直接使用第一种方法做分类任务。 -我们使用 Kaggle 上 `Click-through rate prediction` 任务的数据集[\[2\]](https://www.kaggle.com/c/avazu-ctr-prediction/data) 来演示模型。 +我们使用 Kaggle 上 `Click-through rate prediction` 任务的数据集\[[2](https://www.kaggle.com/c/avazu-ctr-prediction/data)\] 来演示模型。 具体的特征处理方法参看 [data process](./dataset.md) @@ -70,7 +70,7 @@ LR 对于 DNN 模型的优势是对大规模稀疏特征的容纳能力,包括 ### 模型简介 -Wide & Deep Learning Model[3] 可以作为一种相对成熟的模型框架使用, +Wide & Deep Learning Model\[[3](#参考文献)\] 可以作为一种相对成熟的模型框架使用, 在 CTR 预估的任务中工业界也有一定的应用,因此本文将演示使用此模型来完成 CTR 预估的任务。 模型结构如下: @@ -198,6 +198,36 @@ trainer.train( event_handler=event_handler, num_passes=100) ``` +## 运行训练和测试 +训练模型需要如下步骤: + +1. 下载训练数据,可以使用 Kaggle 上 CTR 比赛的数据\[[2](#参考文献)\] +2. 将训练数据的路径传给 `train.py` ,开始训练 + +上面第2个步骤可以为 `train.py` 填充命令行参数来定制模型的训练过程,具体的命令行参数及用法如下 + +``` +usage: train.py [-h] --train_data_path TRAIN_DATA_PATH + [--batch_size BATCH_SIZE] [--test_set_size TEST_SET_SIZE] + [--num_passes NUM_PASSES] + [--num_lines_to_detact NUM_LINES_TO_DETACT] + +PaddlePaddle CTR example + +optional arguments: + -h, --help show this help message and exit + --train_data_path TRAIN_DATA_PATH + path of training dataset + --batch_size BATCH_SIZE + size of mini-batch (default:10000) + --test_set_size TEST_SET_SIZE + size of the validation dataset(default: 10000) + --num_passes NUM_PASSES + number of passes to train + --num_lines_to_detact NUM_LINES_TO_DETACT + number of records to detect dataset's meta info +``` +比如执行 `python train.py --train_data_path ./train.txt` 来对目录下的 `train.txt` 建立训练任务。 ## 参考文献 1. diff --git a/ctr/dataset.md b/ctr/dataset.md index 3c3a5c06c2f555a941b60f3e315aaff2efc9abe0..dd6443d56adaf548d6c39458900c711c7f274def 100644 --- a/ctr/dataset.md +++ b/ctr/dataset.md @@ -63,7 +63,7 @@ ID 类特征的特点是稀疏数据,但量比较大,直接使用 One-hot 2. newid = id % N 3. 用 newid 作为类别类特征使用 -上面的方法尽管存在一定的碰撞概率,但能够处理任意数量的 ID 特征,并保留一定的效果[2]。 +上面的方法尽管存在一定的碰撞概率,但能够处理任意数量的 ID 特征,并保留一定的效果\[[2](#参考文献)\]。 ### 数值型特征 @@ -121,7 +121,7 @@ class CategoryFeatureGenerator(object): `CategoryFeatureGenerator` 需要先扫描数据集,得到该类别对应的项集合,之后才能开始生成特征。 -我们的实验数据集[\[3\]](https://www.kaggle.com/c/avazu-ctr-prediction/data)已经经过shuffle,可以扫描前面一定数目的记录来近似总的类别项集合(等价于随机抽样), +我们的实验数据集\[[3](https://www.kaggle.com/c/avazu-ctr-prediction/data)\]已经经过shuffle,可以扫描前面一定数目的记录来近似总的类别项集合(等价于随机抽样), 对于没有抽样上的低频类别项,可以用一个 UNK 的特殊值表示。 ```python @@ -236,7 +236,7 @@ record.append( ## 输入到 PaddlePaddle 中 -Deep 和 Wide 两部分均以 `sparse_binary_vector` 的格式 [\[1\]](https://github.com/PaddlePaddle/Paddle/blob/develop/doc/api/v1/data_provider/pydataprovider2_en.rst) 输入,输入前需要将相关特征拼合,模型最终只接受 3 个 input, +Deep 和 Wide 两部分均以 `sparse_binary_vector` 的格式 \[[1](https://github.com/PaddlePaddle/Paddle/blob/develop/doc/api/v1/data_provider/pydataprovider2_en.rst)\] 输入,输入前需要将相关特征拼合,模型最终只接受 3 个 input, 分别是 1. `dnn input` ,DNN 的输入