以下是本例的简要目录结构及说明:
├── data # sample数据
├── dpin_sample.data
├── __init__.py
├── README.md # README
├── config.yaml # sample数据配置
├── config_bigdata.yaml # 全量数据配置
├── dpin_reader.py # 数据读取程序
├── net.py # 模型核心组网(动静统一)
├── dygraph_model.py # 构建动态图
注:在阅读该示例前,建议您先了解以下内容:
位置偏差是推荐系统有偏数据中的一个典型偏差类型,主要表现在列表中靠前的商品更容易被用户点击,而不是因为用户喜欢。传统方法认为点击率等于检查概率和关联概率的乘积,这种假设太多简单,不足以模拟位置和其他信息之间的交互。因此论文《Deep Position-wise Interaction Network for CTR Prediction》综合考虑位置、用户、上下文之间的非线性交互,提出 DPIN 模型。
本模型实现了下述论文中的 DPIN 模型:
@inproceedings{su2021detecting,
title={Deep Position-wise Interaction Network for CTR Prediction},
author={Jianqiang Huang, Ke Hu, Qingtao Tang, Mingjian Chen, Yi Qi, Jia Cheng, Jun Lei},
booktitle={Proceedings of the 44th International ACM SIGIR Conference on Research and Development in Information Retrieval (SIGIR ’21)},
year={2021}
}
原文并未提供开源数据集,因此我们使用KDD Cup 2012,Track2的赛题数据,该数据集用于搜索广告系统中的CTR预估,提供了用户在腾讯搜索中的查询词、广告信息、广告相对位置、用户点击情况、用户属性信息等。与本论文所描述的场景以及试图解决的问题相吻合。
用户可以从Kaggle上获取所使用的数据集,地址如下:https://www.kaggle.com/competitions/kddcup2012-track2/data
这里我们只使用到了training.txt
文件,文件大小9.87GB。总共有149639106条数据,每条数据包含如下信息:click、impression、displayURL、adID、advertiseID、depth、position、queryID、keywordID、titleID、descriptionID、userID。这里我们只选择使用如下信息:click、adID、advertiseID、position、userID。
为了与DIN模型进行对比,这里还需要为DIN模型生成相应的训练数据。DIN模型并未将广告的位置信息引入模型,因此除去position字段信息即可。具体训练数据生成方法详见datasets/preprocess.py
。
下面给出了一条数据的样例,并附上了介绍
# 历史浏览商品ID;历史浏览商品分类ID;历史浏览商品位置;目标商品ID;目标商品分类ID;目标商品位置;是否点击
80 71;17 50;1 1;82;56;3;0
PaddlePaddle>=2.1
python 2.7/3.5/3.6/3.7
os : windows/linux/macos
本文提供了样例数据可以供您快速体验,在任意目录下均可执行。在 dpin 模型目录的快速执行命令如下:
# 进入模型目录
cd PaddleRec/models/rank/dpin # 在任意目录均可运行
# 动态图训练
python -u ../../../tools/trainer.py -m config.yaml # sample数据运行
python -u ../../../tools/trainer.py -m config_bigdata.yaml # 全量数据运行
# 动态图预测
python -u ../../../tools/infer.py -m config.yaml # sample数据预测
python -u ../../../tools/infer.py -m config_bigdata.yaml # 全量数据预测
相较于传统的 CTR 模型只有一个 Base Module 模块,本模型有三个模块组成:Base Module、Combination Module、Interaction Module。将位置信息的建模从 Base Module 中抽离,成为新的 Interaction Module。
Base Module与传统方法一致,是一个简单的 MLP 结构,用于将用户特征、商品特征和上下文特征融合。
Interaction Module 用于生成与商品内容无关的位置特征,其中使用到了Attention与Tramsformer机制,可以更好的发掘出位置的特征。
而 Combination Module 将交互后的物品特征与每个位置特征交互,生成每个商品在每个位置的CTR。
为了方便使用者能够快速的跑通每一个模型,我们在每个模型下都提供了样例数据。如果需要复现readme中的效果,请按如下步骤依次操作即可。 在全量数据下模型的指标如下:
模型 | auc | pauc | batch_size | epoch_num | Time of each epoch |
---|---|---|---|---|---|
DPIN | 0.68 | 0.67 | 1024 | 20 | 19min |
DIN | 0.63 | 0.62 | 1024 | 20 | 13min |
- 确认您当前所在目录为PaddleRec/models/rank/dpin
- 进入PaddleRec/datasets/KDD2012_track2目录下,执行
run.sh
脚本,会从国内源的服务器上下载dpin全量数据集,并解压到指定文件夹。
cd ../../../datasets/KDD2012_track2
bash run.sh
- 切回模型目录,执行命令运行全量数据
cd - # 切回模型目录
# 动态图训练
python -u ../../../tools/trainer.py -m config_bigdata.yaml # 全量数据运行
python -u ../../../tools/infer.py -m config_bigdata.yaml # 全量数据预测
本模型支持飞桨训推一体认证 (Training and Inference Pipeline Certification(TIPC)) 信息和测试工具,方便用户查阅每种模型的训练推理部署打通情况,并可以进行一键测试。
使用本工具,可以测试不同功能的支持情况,以及预测结果是否对齐,测试流程概括如下:
- 运行
prepare.sh
准备测试所需数据和模型; - 运行测试脚本
test_train_inference_python.sh
,产出log,由log可以看到不同配置是否运行成功;
测试单项功能仅需两行命令,命令格式如下:
# 功能:准备数据
# 格式:bash + 运行脚本 + 参数1: 配置文件选择 + 参数2: 模式选择
# 模式选择 [Mode] = 'lite_train_lite_infer' | 'whole_train_whole_infer' | 'whole_infer' | 'lite_train_whole_infer'
bash test_tipc/prepare.sh configs/[model_name]/[params_file_name] [Mode]
# 功能:运行测试
# 格式:bash + 运行脚本 + 参数1: 配置文件选择 + 参数2: 模式选择
bash test_tipc/test_train_inference_python.sh configs/[model_name]/[params_file_name] [Mode]
例如,测试基本训练预测功能的lite_train_lite_infer
模式,运行:
# 确保当前目录在 PaddleRec
# cd PaddleRec
# 准备数据
bash test_tipc/prepare.sh ./test_tipc/configs/dpin/train_infer_python.txt 'lite_train_lite_infer'
# 运行测试
bash test_tipc/test_train_inference_python.sh ./test_tipc/configs/dpin/train_infer_python.txt 'lite_train_lite_infer'