Skip to content

Latest commit

 

History

History
95 lines (54 loc) · 2.85 KB

readme.md

File metadata and controls

95 lines (54 loc) · 2.85 KB
  1. 环境配置和依赖库:

    • python3

    • TensorFlow >=1.3

    • scikit-learn

    • Ubuntu 16.04, 128G内存, 8路显卡(能够并行完整跑完run.sh的环境,需要5张显卡,否则请修改run.sh,自己合理安排显卡的利用)

  2. 特征工程说明:

    • 基本特征:31个ID特征

    • 长度特征:多值特征的长度,共11个特征(如interest的个数)

    • 计数特征:uid的总数和正负样本数,uid和所有广告特性的正负样本数,共25个特征(如uid与advertiserId交叉ID出现的正负样本数)

    • 总特征:31+11+25=67个

  3. 模型结构与参数说明:

  • 此次比赛使用了两种模型,nffm与xdeepfm,相关模型成绩如下:

    复赛数据 复赛+初赛数据 ensemble
    nffm(单模型) 0.764 0.770 0.7734
    xdeepfm(单模型) 0.763 0.766 0.770
    nffm+xdeepfm 0.768 - 0.7740
  • nffm:nfm的变种,在Bi-Interaction中替换FFM,并且只使用用户与广告的交叉,https://arxiv.org/pdf/1708.05027v1.pdf. 参数如下:

    • embedding的维度:16
    • 优化器与学习率,batch大小:adam,0.00002,4096
    • MLP的隐藏节点与激活函数:[128,128,128,1],['relu','relu','relu','linear']
    • 多值特征使用mean pooling
    • epoch=1
  • xdeepfm: https://arxiv.org/pdf/1803.05170.pdf. 参数如下

    • embedding的维度:16
    • 优化器与学习率,batch大小:adam,0.00002,4096
    • MLP的隐藏节点与激活函数:[400,400,400,1],['relu','relu','relu','linear']
    • 卷积核维度与激活函数:[128,128,128], identity
    • epoch=1
  • 如需达到线上0.7748的成绩,修改nffm的MLP参数,300与512,各训练五个模型,进行ensemble即可

  1. 数据预处理:

    • 把初赛数据放在data/preliminary_data,把复赛数据放在data/final_data
    • python3 -u src/extract_features.py (如果不使用初赛数据,请在调用pre_data函数时,设置preliminary_path=None)
  2. 训练模型:

 python3 -u src/train.py gpu_id chunk_id chunk_num model_name sub_name
  • gpu_id:用于训练模型的gpu的编号(如第一张卡,设置为0)
  • chunk_num:将数据分成chunk_num块,如chunk_num=5,则把数据分成ABCDE五部分
  • chunk_id:数据块的起始编码,如chunk_id=2,则训练顺序为CDEAB。(便于ensemble)
  • model_name:nffm/xdeepfm
  • sub_name:预测结果的文件名,保存在result_sub目录中
  1. ensemble
  python3 src/combine_nffm.py
  python3 src/combine_xdeepfm.py
  python3 src/combine.py
  1. pipeline
  bash run.sh