【复赛前排分享(三)】高手上场第一招,这些赛事技巧你掌握了吗?
- 2020 年 12 月 16 日
- AI
2020腾讯广告算法大赛复赛已经落幕,决赛答辩终极一战即将在8月3日14:00深圳腾讯滨海大厦举行,了解决赛详情并预约直播观赛,请点击:
外部赛场战况激烈,腾讯公司也联合码客开启了面向员工的内部赛道。在这次复赛前排分享会,我们邀请到了名列复赛内部榜第三的Embedding团队。在破解本次赛题的过程中,他们不仅实现了自己的解决方案,还解锁了许多赛事技巧。接下来,就让Embedding的思路引领我们走向破题的关键吧!
01 赛题解读
本届腾讯广告算法大赛的复赛题目是用户画像,即根据用户点击广告的序列预测用户的年龄和性别。
02 答题概况&技巧
本次比赛我们组使用了纯Transformer架构,另外训练了基于联合ID的词向量嵌入方案,在复赛A榜中,基于Skip Gram的词向量6输入20折模型可获得1.474的分数,加上联合ID词向量后能达到1.476,在B榜中为1.478。
再给大家分享一些我们总结的本次赛事技巧:
1) transformer学习率要小,并且随着epoch的增加,可适当降低学习率。
2) 模型中间层的结果可以concat的方式拼接到一起,供最后全连接层使用。
3) creative_id关联起来的多个属性ID可以通过联合学习的方式生成词向量,能进一步提升模型性能。
4) transformer结构多折融合收益显著。
03 数据准备&预处理
将初赛训练集、测试集和复赛训练集解压缩到input文件夹,生成的词向量和合并后的数据文件也都存储在input文件夹中,model文件夹为存储训练过程中保存的模型文件。
之后对数据进行预处理:
– ad.csv: product_id, industry中的\\N替换成0,然后所有值+1。
– ad.csv, click_log.csv连接:以creative_id为基础将两张表合并,将初赛数据集、复赛数据集合并,并按照’user_id’, ‘time’排序。
– hdf文件保存:
train_click_log
test_click_log
train_user
– 生成训练、测试jsonl数据集:对每个user,生成:
{‘user_id’: user_id, ‘labels’: [age, gender], ‘time’: [], ‘creative_id’: [], ‘click_times’: [], ‘ad_id’: [], ‘product_id’: [], ‘product_category’: [], ‘advertiser_id’: [], ‘industry’: []}
– 生成skip gram词向量训练数据集:对于每个用户的以下序列,写入到文件中:
‘creative_id’
‘ad_id’
‘product_id’
‘product_category’
‘advertiser_id’
‘industry’
– 生成joint id词向量训练数据集:将jsonl中的’user_id’,’labels’,’time’,’click_times’删除后,形成joint id数据集。
04 训练词向量
– skip gram词向量:使用gensim,参数为:
`gensim.models.Word2Vec(sentences, size=128, window=20, min_count=1, workers=24, iter=10, sg=1, negative=20, sample=1e-3)。`
– joint id 词向量:模仿KDD18论文——
//arxiv.org/pdf/1712.08289.pdf
对creative_id生成128维词向量,训练分为两个阶段:第一阶段以0.004的学习率训练5轮,第二阶段以0.001的学习率学习3轮。
05 Transformer模型
1)特征
共使用了6个ID类特征:
creative_id
ad_id
product_id
advertiser_id
industry
product_category
其中creative_id、ad_id在输入阶段已经转化成了词向量embedding特征。creative_id转换的特征有两个:
joint_in_creative_emb
creative_id_emb
ad_id转化的特征为ad_id_emb。以下四个ID使用pytorch预先载入权重:
product_id
advertiser_id
industry
product_category
并且Embedding层也参与训练。
2)模型结构
每个ID单独Embedding后使用一层稀疏Transformer模型SinkhornTransformer进行Encoder编码,形成7个BatchSize * MaxLength * EmbbedingSize的序列。
然后在Embbeding维度Concat到一起,使用两个新的SinkhornTransformer依次进行Encoder编码。
最后将Embedding层、3个SinkhornTransformer层分别进行MaxPooling,形成BatchSize * (EmbbedingSize * 28)的矩阵,然后分别接一个2分类和10分类的全连接层。
3)运行参数
– 嵌入维度:128
– 最大序列长度:128
– 批大小:128
– Epoch:3
– 学习率:每个Epoch的学习率分别是1e-4, 6e-5, 1e-5。
– 模型保存:每个Epoch分别每隔10000,8000,4000步保存一次,20折交叉验证时可取48000步的模型作为最终模型使用。
06 多折结果融合
对20折产生的模型,依次进行预测,将分类结果softmax后,将20个结果相加,取值最大的所在索引,+1后得到最终提交文件。
感谢Embedding团队的分享。紧张的实战中技巧常常是取胜的关键,这也是Embedding的取胜法宝之一。希望选手们在决赛答辩时也能善于找到自己的优势,展现出自己的最佳状态!
8月3日14:00腾讯广告算法大赛决赛即将启幕,算法王者巅峰对决,为你带来算法与技术激烈碰撞的盛筵。快点击【文末链接】,扫描报名页面底部二维码,预约线上直播观赛吧!
同时,欢迎选手们到“官网—个人信息”页面上传简历。加入腾讯,就趁现在!
扫码加入大赛官方QQ群
或搜索群号:1094257162
和小伙伴一起解锁更多内容

点击下方链接,预约直播观赛: