神经网络数据预测(记忆网络与特征表达学习在)
在 CTR 预估中,能不能有效地利用用户历史行为,页面同屏竞争广告信息,以及用户—广告,广告—广告关系等辅助信息来提升模型效果?本文介绍在这方面的探索工作,主要包括:
- 深度时空网络 ( DSTN )
- 深度记忆网络 ( MA-DNN )
- 特征表达辅助学习 ( MCP )
相关工作发表在 2019 KDD 主会,DLP-KDD 2019 workshop,2019 IJCAI 主会。
01
背景介绍
1. 智能营销平台的业务背景介绍
智能营销平台是一个广告变现的业务中台,支持多种流量,多种广告类型的变现业务。 系统架构主要分为:用户流量通过媒体接入、广告主通过广告投放平台投放广告,检索系统实现变现业务的核心功能。智能营销平台的目标是帮助广告主高质、高效地触达用户, 系统优化的核心指标包括点击,转化,变现能力,同时还非常关注用户体验和客户体验。
所有的广告系统都会有个检索漏斗,解决检索效率问题。主要的漏斗环节有:触发/召回、创意检索 初排、样式优选 精排、点击/转化。同时,还需要对用户的精准理解,涉及到用户画像技术。此外还有低质流量、作弊点击和转化识别等问题,需要流量价值建和反作弊建模的策略。这些环节通常都需要进行机器学习建模。
2. 机器学习的方法论和业务要求
整个机器学习就是这样的一个系统:给定信息输入,抽取为特征表达,定义模型结构并学习,然后进行决策和执行,最后得到真实世界反馈来不断优化模型。机器学习的三个要素:数据、算法和工程架构。智能营销平台模型团队的目标就是要搭建这样一套机器学习系统,并为业务赋能。在工业界中,机器学习系统有两方面的要求:
- 业务要求:准,就是 AUC 和预估偏差;快,时效性要高;稳定,波动性要满足业务要求。
- 用户对机器学习平台的要求:好用、高效、工具完善。
3. 机器学习全流程系统的要素
搭建一个工业级机器学习系统,需要上图的这些要素。大部分做过模型的同学都清楚,首先要有一个核心的训练框架,智能营销平台搭建了一套自主研发的 DNN 的模型训练框架,支持大规模离散 DNN 模型训练, 同时支持 online learning。在我们的业务中, online 模型不会一直训练,会定期训练 batch 模型,给 online 模型做初始模型接着训练,这样做的目的是防止 online 模型在不太准确的实时流样本上累积误差,导致模型学差。然后是训练的数据流,基于我们的日志系统搭建样本流,有天级的样本流和实时的样本流,天级样本流有完善的反作弊策略和脏数据清洗,实时样本流则追求时效性,但是准确性上会有损失。训练好的 online 模型会定期分发到线上模型服务,分发时有分发控制和模型监控,如果模型出现问题,不会分发到线上。机器学习系统的特征非常重要,我们专门抽象出来一个特征工程模块,这个模块在线和离线都会用到,主要是为了保证特征的一致性。另外还有样本流和特征流的监控,监控天级别的特征是否会有大的波动,这在业务上是非常必要的环节。
4. 智能营销平台模型团队的核心业务
模型团队输出两个方面的能力:端到端的学习建模能力,为业务赋能;针对核心业务的创新解决方案,打出自己的特色。
本文主要是分享怎样在业务中做创新的模型解决方案。我们之前根据业界流行的模型方案做过如下的模型迭代:连续 DNN、大规模离散 DNN、Wide&Deep、ESMM。最近一年来,我们针对自己的业务特色,深入思考,做了一些自主创新的探索工作,主要是三个方面的工作:
接下来分别为大家详细介绍下:
02
我们的工作
1. 深度时空网络 idea
之前的模型有什么问题?主流的模型独立预测每个广告的 CTR,但不考虑用户历史行为等辅助信息的影响。这些信息也可以通过特征工程的方法来做,比如加用户长期信息统计,带来的问题是繁琐、难以全面、需要领域知识,特征挖掘需要做大量的工作。我们希望能通过网络结构能自动完成用户历史行为的捕捉和挖掘。
在我们的业务场景中,可以将用户的历史广告行为和同屏广告信息作为辅助信息输入到模型中。主要引入两类辅助信息:空间信息、时间信息,比如要预估 target 广告,用户历史中看过的、点击过的历史广告广告作为时间维度信息输入,预估时的上文广告作为空间信息输入。
要有效利用时间和空间辅助广告,深度时空网络必须解决以下问题:
- 每个用户的历史行为有长有短
- 并非所有的历史信息都有用,需要压制噪声
- 当前信息对 target 广告的重要性不同
- 如何融合所有的信息
先从 feature embedding 开始。深度神经网络,需要把每个特征做 embedding 表达,每个广告有多个特征,多个特征的 embedding 通过拼接的方式连接起来,如果有多值特征则通过 sum pooling 方式累加。时空网络的 embedding 如何实现,有3种思路:
第一种是简单的 pooling 网络。Target 广告、上文广告、历史点过的广告、没点过的广告,有共享的特征:查统一的 embedding 表,形成多个拼接向量,单个类型的信息产生的 embedding 向量用 sum pooling 累加起来。有时用户行为比较稀疏,如果没有某种辅助信息的话,就变成0向量输入。这种网络结构简单,解决的问题是怎么把变长变成定长。
第一种方案虽然变成了定长,但是有的信息是有噪声的,没有体现出来。第二种方案就是增加 attention layer 对重要信息进行提取,比如有多个历史点击广告,用 attention 网络计算权重,体现历史广告信息的不同重要性。但是加 attention 还是没有和当前的广告产生重要性的交互。比如用户之前是对游戏感兴趣, 切换到教育场景,那历史信息就是噪声了。
要针对当前广告筛选有用的信息,进一步设计了第三种交互式的 attention 模型,具体做法是:在前面的结构的基础上,目标广告的 embedding 和辅助广告一起输入到 attention 结构中,产生权重 pooling 起来。
我们分别在公开数据集和自己的业务数据集进行了实验对比,对比的基线有 LR,FM,DNN,W&D,DeepFM,GRU 等模型,对于论文中提出的三种结构也进行了对比。效果最好的是 interactive-attention 的模型。
我们进一步分析了辅助广告作用大小的分布,可以看到,在搜索场景中,上文广告的作用非常大,信息流广告中一般一次展示一条广告,没有上文,因此点击的作用大一些,不点击的作用小一些。实际业务场景中,点击广告和不点击广告行为长度不一样,我们进一步做了归一化分析,结论:点击广告比不点击广告归一化后提供的信息量要大。
加入时空网络结构之后,对 embedding 学习的表达也起到了聚类效果。我们观察到同类的东西,在时空网络的 embedding 中学到的更接近一些。
同时进一步看了下 attention-weight 学习的结果,同屏展现中越相似的广告权重越小。怎么理解呢?相似的广告在同一屏展示的时候,会分散用户的注意力,用户看到一个相似的东西之后,会 miss 另一个和它相似的东西。但是前文点击序列里面,越相似权重越大;未点击序列也是越相似权重越大,但是整体权重都较小, 说明用户未点击的信息量不是太明确。
在搜索广告系统中,由于用到了上文信息,需要加入按位置拍卖的机制,所以对线上的排序机制做了修改,先选第一位的广告,再排后面的广告,后面的广告的上文为第一位广告。
参考论文:
[KDD 2019] Deep Spatio-Temporal Neural Networks for Click-Through Rate Prediction
https://github.com/oywtece/dstn
2. 深度记忆网络
第二个 idea 是深度记忆网络,主要目的是为了解决时空网络的线上性能问题。上面的时空网络,需要对输入数据的进行复杂的拼接,离线部分数据存取空间消耗大,仅能建模有限的数据量,历史行为不能太多。同时在线 inference 代价比较大,因此整个时空 DNN 上线过程对我们的工程架构挑战巨大。深度记忆网络的设计目标是不需要拼接信息,带来的好处是存储空间消耗变小,能够无限处理用户历史信息,在线 inference 结构更简单,效率更高。
回到 DNN 网络如何利用历史信息。有些网络结构,如 RNN 可以学到用户的历史信息,最终得到隐向量的输出,给下游模型使用。但是 RNN 离线训练是复杂且费时的,因此提出深度记忆网络目标是希望能够结合 DNN 和 RNN 的优点, 同时达到效果的折中:既能像 DNN 一样简单实用,又能像 RNN 一样捕捉用户的历史信息。
先看 RNN 怎么做的:RNN 把用户行为序列通过 embedding 放入 GRU 网络中,得到的输出,再给 DNN 网络做输入,GRU 的的输出可以看做是一种记忆向量。使用 GRU 网络需要对用户历史行为做扩展,显示地指定用户行为序列;深度记忆网络设计的初衷,就是能不能不显示地构造用户的历史行为序列,而是靠模型的学习机制来解决这个问题。
因此我们在 DNN 网络结构中增加了用户的记忆向量,记忆向量不需要很多槽位,只有两类记忆:用户点过和没点过的两种记忆向量,分别代表用户感兴趣和不感兴趣内容。记忆的输入内容是用了当前 DNN 网络最后一个隐层的内容,用这个隐层的原因是它是对样本的抽象表达,这个向量通过一种"写控机制"存储到用户的记忆 embedding 中,线上要预估时,把用户的记忆向量取出来,放入神经网络中使用。
训练的 loss 和普通 DNN 相同,label 和预估值做 log loss。对于写控机制,也就是记忆向量的学习,目标是希望用户的记忆向量和用户所有见过样本的表达,有 MSE loss 的约束,可以理解为最终达到的效果是:如果点了,向用户感兴趣的记忆向量里面记,不点的内容往不感兴趣的记忆向量里面记。整体是两个 loss 一起训练优化。
记忆网络我们也做了一些模型效果对比,在我们的业务模型基线以及公开数据集基线上都取得了 AUC 增益。记忆网络效果没有时空 DNN 强大,但是结构简单,实现代价低,对于希望快速拿到业务收益的场景非常实用。
参考论文:
[DLP-KDD 2019] Click-Through Rate Prediction with the User Memory Network
https://github.com/rener1199/deep_memory
3. 深度匹配、关联与预测网络
第三个工作是在特征表达学习上做了些研究,发表在 2019 IJCAI 会议上。
传统的 DNN 模型将特征 embedding 用全连接网络往上送,最终和 label 一起计算 loss 并优化,学习时更多地关注 label 和特征之间的相互关系,虽然也有神经元连接起到交叉作用,但是特征和特征之间的相互影响学习的较少。比如某个用户点了某个 item,模型学习的结果并不要求用户和 item 表达有相似性。目前有些可借鉴的网络结构,如 DSSM,会要求两个输入 item 有一定的相似性。因此我们借鉴了这种思路,并将现有的模型结构融合起来,使得 DNN 网络学习的同时,对 Embedding 的学习也使用一些辅助网络来强化。对应到我们的业务中,如用户和广告,如果有点击关系,是否能相似一些,用户点击序列中的广告,是否能学的相似一些。
看下业务中具体的具体例子, u 代表用户特征,a 代表广告特征,O 代表其他特征。用户和广告的关系,广告与广告的关系,类似于构建了一个图。比如用户1点了广告1、广告3,用户2点了广告1。用户1和用户2的 embedding 能通过图的关系推断出一些关系, 期望 embedding 表达也具有相似性, 广告1 和广告3出现在用户的一个行为序列中,也应该具有相似性。如果是放在之前的纯 DNN 网络中,用户1和用户2的 embedding 是随机初始化,向各自的样本的 loss 方向学习,很难取得预期的效果。
整个 DeepMCP 网络分为三个部分:一个是主网络,可以是任何的 DNN 网络结构,如 wide&deep,DeepFM;两个辅助网络:匹配子网络和关联子网络。匹配子网络学习的是用户和广告的相关性 ( 类似 DSSM ),关联子网络是学习广告和广告的相关性 ( 类似 word2vec 和 graph embedding ),目标是希望整个网络既有好的预测能力,又有好的 feature embedding 表达能力,从而提升模型的泛化能力。MCP 模型还有一个优点,线上 inference 时, 只需要把主网络激活就可以了,其它部分不需要计算,对线上计算性能没有影响。
网络结构详解:
- 预测子网络:最左侧的网络部分,也是模型的主任务部分,优化的目标是 log loss,线上预测时只需要激活这部分网络计算。
- 匹配子网络:一个类似 dssm 结构的网络,挑选用户相关的特征输入左侧的子网络中,广告相关的特征输入右边,上面经过全连接层,最后计算 matching score 和 loss,优化的目标是匹配能力。
- 关联子网络:一个类似 word2vec 的网络,选择用户的行为序列构建正负样本进行训练,目标是希望同在序列的 Item 表达相似。
匹配子网络,这里有一个细节,中间需要加一个 tanh 的激活函数,因为上面要做 product 计算,如果是 ReLu 的话,会出现很多0值,product 可能无效。
关联子网络,有两类样本,一类是同在一个行为序列的样本形成正样本对,一类是负样本对,随机负采样。Loss 和 word2vec 的思路类似,目标是希望同在一个行为序列的 item 特征表达相似。
训练优化的 loss 是三个网络的 loss 累加,不同的 loss 之间增加了超参数调节。
实验发现超参数的设置非常重要,业务中超参数的具体值需要根据数据集来决定。同样在公开数据集合业务数据集中做了对比,对比了通用的 DNN 模型,DeepCP 效果取得了小幅提升, DeepMP 的效果比较明显;DeepMCP 的效果是最好的。其中 DeepCP 网络的训练样本构造比较复杂,在业务落地时,可以选择 deepMP 上线。
作者:秀武 阿里巴巴 | 高级算法专家
,免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com