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 的输入