2020 腾讯广告算法大赛初赛总结

1. 赛题描述

本届算法大赛的题目来源于一个重要且有趣的问题。众所周知,像用户年龄和性别这样的人口统 计学特征是各类推荐系统的重要输入特征,其中自然也包括了广告平台。这背后的假设是,用户对广告 的偏好会随着其年龄和性别的不同而有所区别。许多行业的实践者已经多次验证了这一假设。然而,大 多数验证所采用的方式都是以人口统计学属性作为输入来产生推荐结果,然后离线或者在线地对比用 与不用这些输入的情况下的推荐性能。本届大赛的题目尝试从另一个方向来验证这个假设,即以用户 在广告系统中的交互行为作为输入来预测用户的人口统计学属性。

我们认为这一赛题的“逆向思考”本身具有其研究价值和趣味性,此外也有实用价值和挑战性。例 如,对于缺乏用户信息的实践者来说,基于其自有系统的数据来推断用户属性,可以帮助其在更广的人 群上实现智能定向或者受众保护。与此同时,参赛者需要综合运用机器学习领域的各种技术来实现更 准确的预估。

具体而言,在比赛期间,我们将为参赛者提供一组用户在长度为 91 天 (3 个月) 的时间窗口内的广 告点击历史记录作为训练数据集。每条记录中包含了日期 (从 1 到 91)、用户信息 (年龄,性别),被点 击的广告的信息 (素材 id、广告 id、产品 id、产品类目 id、广告主 id、广告主行业 id 等),以及该用 户当天点击该广告的次数。测试数据集将会是另一组用户的广告点击历史记录。提供给参赛者的测试 数据集中不会包含这些用户的年龄和性别信息。本赛题要求参赛者预测测试数据集中出现的用户的年 龄和性别,并以约定的格式提交预测结果。

2.数据集介绍

训练数据中包含了一组用户 91 天的广告点击日志,被组织为三张表,以带标题行的 CSV 文件的 格式提供 (编码采用无 BOM 的 UTF-8),分别是:click_log.csv,user.csv,ad.csv。测试数据包含了另 一组用户 91 天的广告点击日志,组织方式与训练数据相同,但不包含 user.csv。各表的详细格式描述 如下。

click_log.csv:

  • time: 天粒度的时间,整数值,取值范围 [1, 91]。
  • user_id: 从 1 到 N 随机编号生成的不重复的加密的用户 id,其中 N 为用户总数目 (训练集和测
    试集)。
  • creative_id: 用户点击的广告素材的 id,采用类似于 user_id 的方式生成。
  • click_times: 当天该用户点击该广告素材的次数。

user.csv:

  • user_id
  • age: 分段表示的用户年龄,取值范围 [1-10]。
  • gender: 用户性别,取值范围 [1,2]。

ad.csv:

  • creative_id
  • ad_id: 该素材所归属的广告的 id,采用类似于 user_id 的方式生成。每个广告可能包含多个可
    展示的素材。
  • product_id: 该广告中所宣传的产品的 id,采用类似于 user_id 的方式生成。
  • product_category: 该广告中所宣传的产品的类别 id,采用类似于 user_id 的方式生成。 - advertiser_id: 广告主的 id,采用类似于 user_id 的方式生成。
  • industry: 广告主所属行业的 id,采用类似于 user_id 的方式生成。

3. 解决方案

由于总 creative_id 有 444w,若是直接做 onehot,然后 embedding,参数过大,很难进行训练。因此 我们使用 Word2vec 的思想,将每个用户历史点击记录看成句子,例如将访问过的所有 creative_id 当 作一个“句子”,每个广告为一个“单词”,对于用户 1234 来说:[’821396’, ’209778’, ’877468’, ’1683713’, ’122032’, …]。这样我们总共可以形成 90w 个长度不等的序列,然后通过 Word2vec 模型进行训练(自 监督模型),每个 creative_id 可以形成一个 K 维的向量。先把 id 看成一个词,然后把 id 拼接起来连 成一个句子,于是任务就变成了一个脱敏场景下的多输入文本分类问题。

网络结构设计

基于 LSTM 的多类文本输入分类模型网络结构:

整个模型由 4 部分构成:输入层、LSTM 层、池化层、全连接层。

1.输入层(词嵌入层):
我选了’creative_id’,’ad_id’,’advertiser_id’,’product_id’ 作为输入文本。 使用预训练模型,即预先训练各个 id 的 word2vec 模型,将预训练的 word2vec 模型其嵌入 Embedding 层,固定住参数,之后训练时不调整这一层参数。每种 id 文本输入为一个定长 100 个词的文本序列,通过嵌入的预训练 word2vec 模型的 Embedding层转化为 100 个词向量构成的句向量。

2.LSTM 层:
多个 id 句向量拼接后输入 LSTM 层使用双向 LSTM 提取文本特征,从输入的定长文本序列中, 利用局部词序信息,提取初级的特征,并组合初级的特征为高级特征。

3.池化层:
使用了平均池化,即减少了模型的参数,又保证了在不定长的卷基层的输出上获得一个定长的全 连接层的输入。

4.全连接层:
全连接层的作用就是分类器,我使用了一层隐藏层的全连接网络进行分类,最后 log_softmax 输 出分类结果。
网络结构,如图 1所示:
在这里插入图片描述

损失函数设计
损失函数使用 CrossEntropyLoss:交叉熵损失函数
优化器使用 Adam

源码连接

4.总结

第一次参加数据比赛,很多东西都是现学的,一个人写代码训练,所以上分速度比较慢,但是也学习到 了 nlp 文本分类的知识。最后模型训练了3折,排名初赛200名。虽然没能进入复赛,但是比赛过程还是提升了自我的能力。后续准备学习前排大佬赛后的开源代码,寻找差距,提升自我能力。

猜你喜欢

转载自blog.csdn.net/qq_32505207/article/details/106923336