趣投稿|用BERT夺腾讯广告算法大赛50万元大奖,这是冠军团队的解决方案


机器之心报道
编辑:小舟、蛋酱
这三位程序员 , 用 BERT 捧走了 50 万人民币的高额奖金 。
8 月 3 日 , 一年一度的腾讯广告算法大赛在深圳腾讯滨海大厦举办 。
一直以来 , 腾讯广告都在不断寻找更为优秀的数据挖掘和机器学习算法 。 这场备受瞩目的算法盛事 , 今年已经是第四届 。 每一年的比赛都会吸引上万人参加 , 还催生出一个小型算法社区 。
【趣投稿|用BERT夺腾讯广告算法大赛50万元大奖,这是冠军团队的解决方案】最终 , 由三位年轻程序员组成的 DYG 团队捧走了冠军 7 万美金(近 50 万人民币)的高额大奖 。 从初赛冠军、复赛冠军 , 再到最佳答辩 , 这三位程序员究竟靠的是什么?
DYG 团队由来自武汉大学计算机科学硕士、算法工程师王贺 , 中山大学 - 微软研究院联合培养博士生郭达雅以及多次荣获国内 NLP 和数据挖掘比赛 TOP 名次的梁少强组成 。 值得一提的是 , 前两位选手同时也是 2019 年腾讯广告算法大赛的冠军得主 。
趣投稿|用BERT夺腾讯广告算法大赛50万元大奖,这是冠军团队的解决方案
本文插图

左起:腾讯广告副总裁蒋杰 , 「DYG」战队王贺、郭达雅、梁少强 。
比赛题目
今年腾讯广告算法大赛的题目是「广告受众基础属性预估」 , 和以往比赛分析广告转化率、预估曝光效率的传统思路不同 , 这次的赛题是一种逆向思考 。
通常认为人们对于广告的偏好会因年龄和性别的不同而有所区别 , 许多行业的实践者已经验证了这一假设 。 但大多数采用的方法是在已有这些属性之后进行区分推荐 , 随后对比推荐效果 。
而今年的赛题「广告受众基础属性预估」尝试从相反方向验证这一假设 。 这既是行业中会面临的问题 , 也符合目前 AI 算法落地更加注重用户隐私的趋势 。
本次比赛的训练数据集为一组用户在长度为 91 天(3 个月)时间窗口内的广告点击历史记录 。 每条记录中包含了日期(从 1 到 91)、用户信息(年龄 , 性别) , 被点击的广告的信息(素材 id、广告 id、产品 id、产品类目 id、广告主 id、广告主行业 id 等) , 以及该用户当天点击该广告的次数 。
测试数据集则是另一组用户的广告点击历史记录 , 提供给参赛者的测试数据集中不会包含这些用户的年龄和性别信息 。 测试数据集与训练数据集一起提供给参赛者 。
本赛题要求参赛者预测测试数据集中出现的用户的年龄和性别 , 并以约定的格式提交预测结果 。 评价指标包括参赛者提交的结果计算预测的准确率(accuracy) , 年龄预测和性别预测的准确率分别评估 , 两者之和用于参赛者的打分 。
测试数据集中出现的用户划分为两组 , 具体划分方式对参赛者不可见 。 其中一组用户用于初赛和复赛阶段除最后一天之外的排行榜打分计算 , 另一组则用于初赛和复赛阶段最后一天的排行榜打分计算 , 以及最后的胜出队伍选择 。
接下来我们就来看一下本次比赛的冠军 DYG 团队的解决方案 。
代码地址:https://github.com/guoday/Tencent2020_Rank1st
特征工程
统计特征
用户出现的总次数和天数
用户点击广告的总次数
用户点击不同广告、产品、类别、素材、广告主的总数
用户每天每条广告点击的平均次数 , 均值和方差
概率分布特征
趣投稿|用BERT夺腾讯广告算法大赛50万元大奖,这是冠军团队的解决方案
本文插图

经过大量特征工程的尝试 , DYG 团队最后选用五折交叉的 target encoding 得到每个该广告实体对应的性别年龄信息 , 按用户点击广告实体进行聚合统计 。
模型介绍
首先来看下模型的框架 , 主要分为三个部分:BERT(Bidirectional Encoder Representation From Transformer)部分、融合层和输出层 。
趣投稿|用BERT夺腾讯广告算法大赛50万元大奖,这是冠军团队的解决方案
本文插图

BERT 部分
DYG 团队假设每个广告为一个单词 , 将用户点击序列看作一句话 , 这样就将问题转为了 NLP 的文本分类问题 。 DYG 团队使用 bert 作为 encoder 进行编码 , 并使用了 12 层 transformer 。 每层 transoformer 将上一层的隐变量作为输入 , 经过 Multi-Head Self Attention 和 Layer Norm 等 , 最后输出交互更高的隐变量 。
趣投稿|用BERT夺腾讯广告算法大赛50万元大奖,这是冠军团队的解决方案
本文插图

bert 在 NLP 能够取得巨大成功的主要原因是预训练 , 所以在比赛初期 DYG 团队不断尝试将预训练运用到本赛题中 。 但与 NLP 不同 , 广告具有稀疏性 , 使其词表达到七八百万 。 这就会造成两个问题:第一个问题是这么大的词表很难放入 GPU 中 , 第二个问题是即使放到 CPU , 由于参数过大 , 也难于训练 。 针对这些问题 , DYG 团队使用了两个阶段的预训练方法对 BERT 进行训练 。
预训练:Word2Vector
第一个阶段:使用 word2vec 去预训练广告的 embedding , 目标是将类似的广告进行聚类 。 具体操作如下图所示 , DYG 团队首先将用户点击广告序列输入到 embedding 层 , 然后预测广告 id 。
趣投稿|用BERT夺腾讯广告算法大赛50万元大奖,这是冠军团队的解决方案
本文插图

但这里会存在两个问题 , 首先是此处只使用了一个广告去预测另一个广告 , 并没有使用更多的广告进行预测 , 因此缺失了更多的上下文信息 。
其次是没有利用广告本身的属性进行预测 。 比如给定该广告是游戏类型的广告 , 那么就更容易预测出当前广告 , 同时也鼓励模型结合最近点击的广告和当前广告的属性进行预测 , 从而对齐广告 id 及其属性的 embedding 。
预训练:Masked Language Modeling (MLM)
DYG 团队对 Masked Language Modeling (MLM)进行了改进 , 原始的 MLM 直接 mask 掉包括属性在内的整个广告 , 而改进之后的 MLM 只 mask 广告的一部分(广告 id 或属性) 。 改进后的 MLM 随机 mask 掉 20% 的 token , mask 后的位置使用 0 向量来代替 , 或者采样一个属性 id 来替换 。
趣投稿|用BERT夺腾讯广告算法大赛50万元大奖,这是冠军团队的解决方案
本文插图

使用改进后的 MLM 预测广告时 , 不仅可以使用最近点击的广告 , 也可以用其属性来预测 , 使得不同属性的 embedding 能够在语义空间上对齐 。
同时 , DYG 团队针对词表过大的问题采用了一个很关键的策略:把词表缩小到 10 万(提取 top10w , 其余为 unk) , 在预训练阶段只预测这 10 万个单词 , 从而使 bert 能够跑起来 。
融合层
趣投稿|用BERT夺腾讯广告算法大赛50万元大奖,这是冠军团队的解决方案
本文插图

DYG 团队方案在融合层(Fusion Layer)中 , 把点击广告的受众人群性别年龄分布融入到网络之中 , 具体的做法是把人群分为五个部分 , 假设用户点击 n 个广告并来自第一个人群 , 那么可以把剩下的作为种子人群 , 计算出每个广告的性别年龄概率分布 , 用四层的 transformer 进行融合 。
输出层
最后来看下输出层:
趣投稿|用BERT夺腾讯广告算法大赛50万元大奖,这是冠军团队的解决方案
本文插图

以上就是本次比赛 DYG 团队解决方案的主要内容 。 凭借此方案 , DYG 团队一路披荆斩棘 , 最终捧起第四届腾讯广告算法大赛冠军的奖杯 。
赛后分析
DYG 团队在赛后对此方案做了分析总结 , 归纳出其创新的亮点:
1. 改进 BERT 并运用到人口属性预测场景
分阶段预训练 , 缓解广告稀疏性问题并加快预训练速度 (4*V100 预训练 12 个小时)
改进 MLM 预训练目标 , 并从多维度学习广告及其属性的语义表示
将 BERT 运用到人口属性预测的场景 , 从性能上验证了预训练在广告领域的潜力
2. 提出融合后验概率分布的方法及模型
利用受众人群求出每个广告的概率分布
利用多层 Transformer 融合概率分布及 BERT 的语义表示 , 能有效提升性能
参考链接:https://mp.weixin.qq.com/s/-lizDyP2y357plcG1M64TA


    推荐阅读