之前我们介绍了阿里的深度兴趣网络(Deep Interest Network,以下简称DIN),一年后阿里再次升级其模型到深度兴趣进化网络(Deep Interest Evolution Network,以下简称DIEN。
本系列文章通过解读DIN & DIEN论文以及源码,顺便梳理一些深度学习相关概念和TensorFlow的实现。
本文是系列第六篇 :DIEN 论文解读,参考了大量文章,衷心感谢各位兄弟的分享,具体参见文末链接。
DIN忽略兴趣的变化。
作者提出,以前的CTR预估方法都是直接将用户表现的表示向量当作兴趣,而没有通过具体的表现对隐藏的兴趣进行建模。因此提出DIEN【关键 - 兴趣直接导致了连续的行为,所以需要对用户兴趣及其演变建模,从用户历史行为中挖掘用户与目标商品相关的兴趣及演变】。
DIEN有两个关键模块:
可以这样说,在训练的每一步中,我们为 interest extractor layer 引入了辅助loss。在 interest evolving layer 中加入了attention机制。
隐式兴趣(latent interest):用户与系统交互的行为是表达兴趣的载体。
兴趣演变(Interest evolving):受外在环境与内在认知变化的影响,用户的兴趣往往会随时间不断变化。以购买衣服为例,用户对兴趣的喜好,会随季节、时尚风潮以及个人品味的变化而变化。
因此,想要做好点击率预估,必须在挖掘用户兴趣的同时,抓住用户兴趣的变化过程。
DIN架构如下:
与DIN类似,模型架构同样是由 输入层 + Embedding层 + 连接层 + 多层全连接神经网络 + 输出层的整体架构;
和DIN不同的是,DIEN把 user behavior 组织成序列数据的形式,并把简单的使用外积完成的activation unit变成一个attention-based GRU网络。
深度兴趣进化网络分为几层,从下到上依次是:
再详细点说:
DIEN论文中提到,之前的一些算法,通过引入RNN来发掘和利用行为序列(也就是浏览过的商品序列)中的依赖关系,比直接对行为序列做pooling效果更好。但是这些算法存在的问题就是直接将RNN的隐层输出作为用户的兴趣表示。而商品embedding才是对商品的真实表达,也是对用户兴趣的直接反应,RNN的隐层输出向量未必能够真正表达用户的兴趣。
因为观测到当前时刻的兴趣直接影响了下一时刻行为的发生,而GRU对兴趣表示的针对性弱。所以兴趣提取层引入了一个有监督学习,设计了auxiliary loss 损失函数,目的是用下一时刻的行为监督当前时刻兴趣的学习。这样就强行将RNN输出隐层与商品embedding发生交互,如架构图中左侧的Auxiliary Loss所示。
即:
兴趣进化层的基本结构是GRU(Gated Recurrent Unit)网络,如架构中黄色区域所示,即用GRU来对用户行为之间的依赖性进行建模。
电子商务系统中的用户行为丰富,即使在很短的如两周这样的时间,其历史行为序列也很长。为了在效率和性能之间进行平衡,我们采用GRU对行为进行建模。
GRU的输入是用户按时间排序的行为序列,也就是行为对应的商品(按照时间步排列的商品embedding向量)。相比传统的序列模型RNN和LSTM,GRU解决了RNN的梯度消失问题;与LSTM相比,GRU的参数更少,训练收敛速度更快。
参数解释如下:
为了使序列结构模型的隐藏状态有效地表示潜在兴趣,应该对隐藏状态进行额外的监督,例如引入排名信息。在推荐系统中,排名损失已被广泛用于排名任务。
辅助loss来源于全部的点击记录,而非针对目标广告,有利于避免梯度消失,将有点击的作为正样本,未点击的作为负样本。
DIEN定义辅助损失如下:
DIEN使用的全局损失函数如下:
DIEN作者指出GRU只能学习行为之间的依赖,并不能很好反映用户兴趣。Label target 只包含了最终兴趣的监督信息,中间的历史状态 ht 并不能得到监督信息来指导学习。而兴趣可能会导致多个连续行为,因此模型引入Auxiliary Loss来提升兴趣表达的准确性。
具体来讲,就是利用 t 时刻的行为 b(t+1) 作为监督去学习隐含层向量 ht ,除了利用真实的下一个行为作为正样本之外,负例的选择或是从用户未交互过的商品中随机抽取,或是从已展示给用户但用户没有点击的商品中随机抽取。正负样本分别代表了用户 点击/未点击 的第 t 个物品embedding向量。
引入Auxiliary Loss的优势有:
帮助GRU的隐状态更好地表示用户兴趣。加入了辅助损失,GRU的每一个隐藏状态 都表示用户在 时间下的兴趣状态,所有的兴趣状态点的拼接 构造了一个兴趣序列;
RNN在建模长序列场景下梯度传播可能并不能很好地影响到序列开始部分,在序列的每个部分引入一个辅助监督信号,可以一定程度上降低优化难度;
Auxiliary Loss可以给Embedding层的学习带来更多的语义信息,学习到的Item对应更好的Embedding。
经过GRU组成的兴趣抽取层后,用户的行为向量 b ( t ) 被进一步抽象化,形成了兴趣状态向量h ( t )。
再用一句话总结下,兴趣提取层的作用是挖掘行为序列中商品之间的联系,对用户的兴趣进行提取和表达。
兴趣进化层 Interest Evolution Layer 的主要目标是刻画用户兴趣的进化过程。
用户兴趣是不断变化的:
用户这种变化会直接影响用户的点击决策。建模用户兴趣的进化过程有两方面的好处:
随着外部环境和内部认知的变化,用户兴趣也在不断变化,因此用户的行为受不同兴趣的影响。兴趣进化层相比兴趣抽取层的最大特点在于引入Attention机制,为了更有针对性地模拟与目标广告相关的兴趣进化路径。
推荐模型永远不能脱离具体业务场景,在阿里这种电商环境下,用户非常有可能同时对多品类商品感兴趣,比如在购买“机械键盘”的同时也在查看“衣服”品类下的商品。这样当目标商品是某电子产品时,“机械键盘”相关的兴趣演化路径就要比“衣服”相关的演化路径重要。
用户兴趣的演化具有如下规律:
基于以上规律,兴趣进化层通过 AUGRU(GRU with Attentional Update gate)来引入注意力机制,通过使用兴趣状态和 target item 计算得到相关性,AUGRU 增强相关兴趣的影响,同时减弱不相关兴趣的影响,进而去捕捉与目标商品相关的兴趣及其演变。
即通过分析兴趣演化的特征,作者结合注意力机制的局部激活能力和GRU的序列学习能力来对兴趣演化进行建模。这样,在GRU的每个步骤中,注意力机制都可以增强相对兴趣的影响,并减弱来自兴趣漂移的干扰。
有了用户的兴趣表示,兴趣发展层的作用就是捕获与candidate相关的兴趣发展模式,如架构图中红色区域所示,这里使用了第 2 个 GRU。将 candidate 的 embedding 向量与第 1 个 GRU 的输出隐向量发生交互,生成attention 分数。需要注意的是,与 DIN 不同,这里的 attention 分数采用 softmax 做了归一化。attention 分数 反应了目标物品 和当前兴趣状态 的关系,相关性越大,则分数越大。
attention计算如下:
如何将attention机制加到GRU中呢?文中尝试了3种方法
GRU with attentional input (AIGRU):在输入中结合注意力机制。
AIGRU使用注意力评分影响兴趣进化层的输入。即直接将attention系数和输入相乘。在理想的情况下,相关兴趣越少,输入值越小,那么我们就可以对与目标项目相关的兴趣进化趋势进行建模。然而,AIGRU的表现并不好。因为即使是零输入也会改变GRU的隐藏状态,所以相对兴趣越少,也会影响兴趣进化的学习。
Attention based GRU(AGRU): 将注意力分数替换GRU的更新门(利用注意力score来控制hidden state的更新),直接地改变了隐藏状态。即直接将attention系数来替换GRU的update gate,直接对隐状态进行更新。
AGRU利用注意力得分直接控制隐藏状态的更新,削弱了兴趣演变过程中较少相关兴趣的影响。将注意力嵌入到GRU中可以改善注意力机制的影响力,并有助于AGRU克服AIGRU的缺陷。虽然AGRU可以使用注意分数直接控制隐藏状态的更新,但它使用一个标量(attention score)代替一个向量,忽略了不同维度间的重要性差异。
GRU with attentional update gate (AUGRU): 在GRU的更新门中加入注意力分数:
在AUGRU中,保留更新门的原始尺寸信息,通过注意力分数 来缩放更新门的所有维度,从而导致相关度较小的兴趣对隐藏状态的影响也较小。AUGRU可以更有效地避免利益漂移带来的干扰,并推动相对兴趣平稳发展。
AUGRU是效果最好的一种。文中将attention分数与update gate相乘,替换原始的update gate,称为AUGRU,其中A指的是Attention,U指的是Update gate。
我们看一下DIEN这个结构有什么问题。GRU是串行计算结构,要按照时间步一步一步进行计算。DIEN有两个GRU,第2个GRU还要基于第1个GRU的结果来做attention,所以第2个GRU必须要等到第1个GRU全部计算完成才能开始计算,两个GRU单元无法并行计算,所以可能存在时延大的问题,序列越长,时延可能就越长。文中介绍说工业场景输入的序列长度是50,累积两个GRU的时延,相当于序列长度为100的时延。
对兴趣进化建模的优点如下:
兴趣进化层结合了注意力机制中的局部激活能力和GRU的序列学习能力来实现建模兴趣演化的目标。
DIEN的主要贡献如下:
下一篇将介绍模型源码整体架构,敬请期待。
https://blog.csdn.net/John159151/article/details/91377508)
【paper reading】Deep Interest Evolution Network for Click-Through Rate Prediction
也评Deep Interest Evolution Network
https://zhuanlan.zhihu.com/p/134170462)
【读书笔记】Deep Interest Evolution Network for Click-Through Rate Prediction
推荐系统遇上深度学习(二十四)–深度兴趣进化网络DIEN原理及实战!
from google.protobuf.pyext import _message,使用tensorflow出现 ImportError: DLL load failed
https://blog.csdn.net/qq_35564813/article/details/90714056)
阿里CTR预估三部曲(2):Deep Interest Evolution Network for Click-Through Rate Prediction简析