数据集介绍 原始数据集共包含3个,实验时存放在目录 下。 userinfo5w.csv 该文件共包含了5万条用户的个人数据; 特征分别包括了:['userid', 'device', 'os', 'province', 'city', 'age', 'gender']; 各特征的含义为:['用户id', '设备名称', '操作系统', '所在省', '所在市', '年龄', '性别']; docinfo.txt 该文件包含了所有新闻的特征数据; 各特征的含义为:['文档id', '标题', '发文时间', '图片数量', '一级分类', '二级分类', '关键词']; traindata5w.csv 该文件为用户点击数据,包含了5万个用户在过去13天的点击数据;
原始数据集共包含3个,实验时存放在目录rank/examples/dataset/raw_data/下。
user_info_5w.csv
doc_info.txt
train_data_5w.csv
数据处理的文件存放在rank/examples/dataset/data_process/下。
训练集和测试集的划分程序为:train&test_data_split.py
训练集:将所有用户在前12天的点击行为划为训练集;
测试集:
测试标签:
其他特征处理:
用户数据和文档数据的处理程序为:user&doc_data_process.py
用户数据处理
性别特征:原始的用户性别数据为用户对应不同性别的概率,这里直接将概率最高的性别作为用户的实际性别;
年龄数据:原始的用户年龄数据为用户对应不同年龄段的概率,这里将概率最高的年龄段作为用户所处的年龄段;
文档数据处理
统计特征的生成的程序为:news_data_process.py
从文档发文到展示的时间差:对于每一个样本,统计对应文档从发文到展示的日期差;
用户特征统计:
文档特征统计:
连续型特征:
类别型特征:
排序模型的执行程序存放在rank/examples/下,分别为deepfm_news.py和deepfm_ppnet_news.py。
DeepFM是2017年由华为与哈工大提出的排序模型,,模型主要包含两部分:FM部分+Deep部分。
论文链接:[DeepFM: A Factorization-Machine based Neural Network for CTR Prediction (arxiv.org)
实验结果
# data para seed: 48 # model para embed_dim: 32 drop_rate: 0.5 use_bn: Ture hidden_units: [64, 128, 64] # compile para learning_rate: 0.001 epochs: 20 batch_size: 2048 val_splite: 0.1 patience: 5 restore_best_weights: True
Epoch 1/20 2653/2653 [==============================] - 47s 17ms/step - loss: 0.3921 - auc: 0.7287 - val_loss: 0.3628 - val_auc: 0.7588 Epoch 2/20 2653/2653 [==============================] - 44s 17ms/step - loss: 0.3619 - auc: 0.7616 - val_loss: 0.3581 - val_auc: 0.7647 Epoch 3/20 2653/2653 [==============================] - 44s 17ms/step - loss: 0.3569 - auc: 0.7705 - val_loss: 0.3561 - val_auc: 0.7682 Epoch 4/20 2653/2653 [==============================] - 47s 18ms/step - loss: 0.3548 - auc: 0.7754 - val_loss: 0.3557 - val_auc: 0.7699 Epoch 5/20 2653/2653 [==============================] - 47s 18ms/step - loss: 0.3540 - auc: 0.7777 - val_loss: 0.3560 - val_auc: 0.7702 Epoch 6/20 2653/2653 [==============================] - 46s 18ms/step - loss: 0.3536 - auc: 0.7788 - val_loss: 0.3557 - val_auc: 0.7708 Epoch 7/20 2653/2653 [==============================] - 45s 17ms/step - loss: 0.3533 - auc: 0.7797 - val_loss: 0.3556 - val_auc: 0.7714 Epoch 8/20 2653/2653 [==============================] - 45s 17ms/step - loss: 0.3532 - auc: 0.7802 - val_loss: 0.3558 - val_auc: 0.7712 Epoch 9/20 2653/2653 [==============================] - 46s 17ms/step - loss: 0.3530 - auc: 0.7806 - val_loss: 0.3560 - val_auc: 0.7713 Epoch 10/20 2653/2653 [==============================] - 46s 17ms/step - loss: 0.3530 - auc: 0.7808 - val_loss: 0.3560 - val_auc: 0.7711 Epoch 11/20 2653/2653 [==============================] - 45s 17ms/step - loss: 0.3529 - auc: 0.7811 - val_loss: 0.3560 - val_auc: 0.7715 Epoch 12/20 2653/2653 [==============================] - 46s 17ms/step - loss: 0.3528 - auc: 0.7813 - val_loss: 0.3557 - val_auc: 0.7718 251/251 [==============================] - 3s 11ms/step - loss: 0.3719 - auc: 0.7508 test AUC: 0.750784
将DeepFM模型中,DNN 模块替换为PPNet模型:
参考链接:1.9万亿参数量,快手落地业界首个万亿参数推荐精排模型
实验结果:
# data para seed: 48 # model para embed_dim: 32 drop_rate: 0.5 ppnet_size: 256 ppnet_features: ['user_id', '一级分类', '年龄'] use_bn: Ture hidden_units: [64, 128, 64] # compile para learning_rate: 0.001 epochs: 20 batch_size: 2048 val_splite: 0.1 patience: 5 restore_best_weights: True
Epoch 1/20 2653/2653 [==============================] - 56s 20ms/step - loss: 0.3929 - auc: 0.7303 - val_loss: 0.3648 - val_auc: 0.7568 Epoch 2/20 2653/2653 [==============================] - 53s 20ms/step - loss: 0.3620 - auc: 0.7622 - val_loss: 0.3591 - val_auc: 0.7651 Epoch 3/20 2653/2653 [==============================] - 55s 21ms/step - loss: 0.3578 - auc: 0.7706 - val_loss: 0.3580 - val_auc: 0.7690 Epoch 4/20 2653/2653 [==============================] - 53s 20ms/step - loss: 0.3560 - auc: 0.7755 - val_loss: 0.3587 - val_auc: 0.7701 Epoch 5/20 2653/2653 [==============================] - 54s 20ms/step - loss: 0.3551 - auc: 0.7787 - val_loss: 0.3580 - val_auc: 0.7706 Epoch 6/20 2653/2653 [==============================] - 55s 21ms/step - loss: 0.3545 - auc: 0.7809 - val_loss: 0.3587 - val_auc: 0.7718 Epoch 7/20 2653/2653 [==============================] - 54s 20ms/step - loss: 0.3541 - auc: 0.7829 - val_loss: 0.3586 - val_auc: 0.7720 Epoch 8/20 2653/2653 [==============================] - 53s 20ms/step - loss: 0.3538 - auc: 0.7842 - val_loss: 0.3587 - val_auc: 0.7721 251/251 [==============================] - 4s 13ms/step - loss: 0.3686 - auc: 0.7543 test AUC: 0.754304
# 数据预处理 1. user&doc_data_process.py 2. train&test_data_split.py 3. news_data_process.py # 排序模型 4. deepfm_news.py 或 deepfm_ppnet_news.py