Skip to content

John-Yao/Tencent_Social_Ads2018

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Tencent_Social_Ads2018

2018腾讯社交广告33名的nn方案,单模75+(主要是分享下方案和pytorch的网络)

特征工程

  • 原始特征低频hash处理
  • 多值特征训练时truncate、网络里做pooling,truncate 参数如下:
  bag_feats = ['kw1','kw2','kw3','topic1','topic2','topic3',
        'appIdAction','appIdInstall',
        'interest1',
        'interest2',
        'interest3',
        'interest4',
        'interest5']
  bag_value_cnts =[5, 5, 5, 5, 5, 5, 50, 50, 35, 30, 10, 10, 70]
  • 增加用户的全集出现次数特征
  • 统计特征主要用了下面3个,直接分箱(下面3个特征可以提1-1.5个千,因为提特征和编码过程和其他无用特征混在一起,所以训练和提特征我删除了下面3个特征):
    • aid_age_mean,uid_creativeSize_mean,aid_creativeSize_mean

网络

  • lr
  • fm
  • cin(xdeepfm,复现参考的tensorflow版,跟原论文有点出入)
  • din(代替多值特征的mean pooling,max pooling没有尝试,目前网络支持mean pooling 和din共存;复现参考的tensorflow版,跟原论文有点出入)
  • dnn

训练过程(主要解释TSADSDataset.py):

  1. pytorch的DataLoader在多进程使用时会出现copy and write的情况(其实这个情况我暂时没有搞的明白,尝试了很多写法都没有解决),初赛数据直接就可以训练了,复赛数据压根训不起来,所以对需要训练的数据切分成10分,分10份依次训练。
  2. 为了处理多值特征偏长的情况(其实如果其他特征工程做得好的话,truncate直接取10差不多的),对于每个多值特征采用字符串的形式保存,并做训练时解析、random truncate.
  3. 类别特征做的是线上stack,方便新增新的类别特征

训练时间:

总共5个epoch收敛,每个epoch在4核大概1-1.5小时

损失函数

  • 交叉熵ce
  • focalloss(这个线下精细调参的话可以比ce的1个千,但直接用跟ce同样参数一般都是掉几个千),主要用于融合

环境配置

  • Ubuntu 16.04
  • python 3.6
  • pytorch 0.4.0(0.2.x,0.3.x版本不支持,主要是不支持torch.where这个api)
  • sklearn:0.19.1
  • glob
  • GPU: 12G(8G的应该能跑,训练集batch_size=8192时,训练显存占用5G+,验证的batch_size调小应该可以的)
  • Memory: >140G(主要是多值特征编码合并多列时需要用较大的内存,训练时130G内存可以同时训练2个)
  • disk: about 300G(tmp文件夹就有200+G主要是一些临时文件想重复用就没删掉)
  • number of process: >4(单核能跑,只是比较慢)

目录介绍

  • /preprocess/:
    • 0_user_feat_transform.py:流式转化初赛和复赛的.data文件为.csv格式
    • 1_slice_merge.py:合并复赛数据(将数据切成两片,分开merge再concat)
  • /feature/:
    • 2_get_feat_low_case_split_with_pre.py: 提取特征、编码、切分训练验证集
  • /train_dl_with_pre:
    • 3-train_add_feature_0612.py:训练
    • 4-test_din_xdeepfm_addFeat_0612.py:测试
  • /data/:
    • /final/:
      • /merged/: 切片后保存的临时文件以及merged后的原始复赛数据
    • /preliminary_contest_data/:原始初赛数据
  • /tmp/:
    • /0610_get_feat_with_pre/
      • /sub/: 初赛复赛训练集以及测试集的instance id
      • /encoded_lowcase_hash200/
        • merged_bag.csv:merge后的复赛多值特征预处理原始特征
        • merged_cate.csv:merge后的复赛类别特征预处理原始特征
        • pre_merged_bag.csv:merge后的初赛多值特征预处理原始特征
        • pre_merged_cate.csv:merge后的初赛类别特征预处理原始特征
        • .pkl: 全数据集各种编码后的单列特征
        • /pkl/
          • /bag_enc_dict/:多值特征编码器
          • /cate_encoder/:类别特征编码器
        • /split/
          • /trains/:
            • .pkl: 初赛复赛训练集各种编码后的单列特征(已经切分)
            • /instance_ids/: 训练集instance id(已经切分)
            • /merged/:
              • x_bag.pkl: concat后的复赛多值特征(已经编码了)
              • pre_x_bag.pkl: concat后的初赛多值特征(已经编码了)
          • /test1/:
            • .pkl: 测试集各种编码后的单列特征
            • /merged/:
              • bag.pkl: concat后的所有多值特征(已经编码了)
          • /test2/: 同test1
      • merged_bag.csv:merge后的复赛多值特征原始数据
      • merged_cate.csv:merge后的复赛类别特征原始数据
      • pre_merged_bag.csv:merge后的初赛多值特征原始数据
      • pre_merged_cate.csv:merge后的初赛类别特征原始数据
      • labels.pkl: 复赛的标签
      • pre_labels.pkl:初赛的标签

最终成绩

类似k折验证训练了10+个模型,融合lgb,libffm,线上auc:0.7609

Releases

No releases published

Packages

No packages published