推荐系统之DIEN模型原理

2021-01-10  本文已影响0人  HaloZhang

简介

本文要介绍的是由阿里巴巴团队于2019年提出的DIEN模型,此模型是该团队此前提出的DIN的演化版本。DIEN的应用场景和DIN一模一样,其创新之处在于使用了序列模型来模拟用户兴趣的进化过程。DIN模型直接将用户历史行为数据当成用户的兴趣特征,但是正如我们所知,用户潜在的兴趣很难通过显式的历史行为数据直观反映出来。DIEN正是瞄准了这个难点,深入挖掘历史行为数据背后隐藏的用户兴趣特征,并且捕捉用户兴趣的进化过程。

DIEN的“进化”动机

无论是电商购买行为,还是视频网站的观看行为,或者是新闻应用的阅读行为,特定用户的历史行为都是一个随着时间排序的序列。既然是时间相关的序列,就一定存在或深或浅的前后依赖关系,这样的序列信息对于推荐过程无疑是有价值的。举例来说明这一点,对于一个综合电商来说,用户兴趣的迁移其实非常快。例如,上周以为用户在挑选篮球鞋,这位用户上周的行为序列可能都集中在篮球鞋这个品类的商品上,但在他完成购买之后,本周他的购物兴趣可能会变成买一个机械键盘。序列信息的重要性在于:

如果放弃序列信息,则模型学习时间和趋势这类信息的能力就不会那么强,推荐模型就仍然是基于用户所有购买历史的综合推荐,而不是针对“下一次购买”推荐。显然,从业务的角度来看,后者才是推荐系统正确的推荐目标。

DIEN模型

基于引进“序列”信息的动机,阿里巴巴对DIN模型进行了改进,形成了DIEN模型的结构。DIEN模型依旧遵循传统的Embedding层+聚合层+多层全连接神经网络+输出层的结构。DIEN模型整体框架如下图:

DIEN模型 上图中彩色部分是“兴趣提取网络”,可以认为它是用来从用户的历史行为数据中提取兴趣的网络,它最终的输出是h'(T),代表当前用户的兴趣向量。DINE模型的创新点在于如何构建“兴趣提取网络”。“兴趣提取网络”自底向上共包含3层,分别是:

后两层才是DIEN比较关键的创新,我们着重分析一下这两层的构造。

兴趣提取层(Interest Extractor Layer)

在电商系统中,用户的行为数据往往蕴含着用户的兴趣爱好,这些兴趣也会随着用户的购买行为而发生变化,兴趣提取层的目的就是从用户的行为序列中提取出一系列的兴趣状态。
为了平衡效率和性能,作者选择了GRU(Gated Recurrent Unit,门循环单元)网络来对用户行为之间的依赖进行建模。相比传统的RNN和LSTM,GRU能够克服RNN梯度消失的问题,同时比LSTM网络具有更少的参数,训练收敛速度更快,更加适合电商系统。GRU的结构如下:

GRU 论文中所使用的GRU结构与上图一致,只不过参数相比上图右边的公式中描述的更多,DIEN中使用的GRU的计算公式如下: GRU计算公式 其中\sigma代表sigmoid激活函数,\text {o}代表逐元素乘积,W^{u}, W^{r}, W^{h} \in \mathbb{R}^{n_{H} \times n_{I}}, U^{z}, U^{r}, U^{h} \in n_H \times n_H,其中n_H代表隐层的大小,n_I是输入大小,i_t是GRU的输入状态向量,也就是行为序列中个行为的embedding向量,h_t是GRU网络中第t个隐状态向量。
然而,隐状态向量h_t只能捕捉用户行为之间的依赖关系,却并不能很好地描述用户的兴趣。由于目标item的点击行为是由最终计算出来的兴趣特征触发的,L_{target}中使用的标签数据只对最终生成的兴趣进行监督学习,而历史隐状态h_t (t < T)并不能进行监督学习。因此,作者提出了辅助损失(auxiliary loss),它使用了t+1时刻的行为向量e_{t+1}来监督当前t时刻GRU学习到的隐状态h_t。示意图如下: Auxiliary Loss
除了使用时间轴上下一个行为向量e_{t+1}作为正样本以外,还从不包含正样本的历史行为样本集中抽样出一个负样本e_{t+1}'
这样就可以形成N对行为向量序列:\left\{\mathbf{e}_{b}^{i}, \hat{\mathbf{e}}_{b}^{i}\right\} \in \mathcal{D}_{\mathcal{B}}, i \in 1,2, \cdots, N, 其中 \mathbf{e}_{b}^{i} \in \mathbb{R}^{T \times n_{E}}代表点击行为序列,\mathbf{\hat e}_{b}^{i} \in \mathbb{R}^{T \times n_{E}}代表负样本序列。T是行为序列的总长度,n_E是embedding向量的维度。由此可得,Auxiliary Loss的计算方式如下: 其中\sigma(x_1,x_2)的定义如下: h_t代表GRU的第t个隐状态,DIEN的总体损失函数为: Loss 其中\alpha是一个超参数,用于平衡CTR预估和兴趣表示。
作者认为,通过引入Auxiliary Loss,GRU的每个隐状态h_t就有足够强的表达能力来代表用户的兴趣,并且所有T个隐状态进行聚合之后得到序列[h_1,h_2,...,h_T]也能够让兴趣进化层进行近一步的建模。总得来说,Auxiliary Loss具有以下优点:

实际上,没太明白Auxiliary Loss究竟如何提供更多语义信息。

兴趣进化层(Interest Evolving Layer)

由于内部和外部环境的影响,用户的兴趣是在不断变化的。以买衣服为例,随着时下流行和用户口味的变化,用户对衣服的品位也会随之变化。用户对衣服偏好的变化会直接影响到对候选衣服的CTR预估。当然,随着用户兴趣的进化,兴趣也可能会发生偏移。举个例子,用户可能在一段时间内喜欢买书,而在另外一段时间内喜欢买衣服。尽管兴趣之间是会互相影响的,但是每个兴趣爱好都有各自的进化历程,并且基本都是独立的。比如,关于书和衣服的品位的变化就基本是独立的。我们在做CTR的时候,只需要关注与目标物品相关的兴趣进化过程。
在兴趣进化层的第一阶段,作者引入了注意力机制,来计算每个GRU的隐状态h_t与目标广告之间的权重关系,也叫做注意力分数。具体计算公式如下:

其中e_a是目标广告的embedding向量,W \in \mathbb R^{n_H \times n_A}n_A是广告embedding向量的维度。注意力分数可以反映广告e_a和输入h_t之间的关系,关系越紧密,则分数越高。
接下来介绍一些将GRU和注意力结合的机制,它们共同来对用户兴趣进化过程进行建模。作者一共提出了3种模型,分别是AIGRU、AGRU、AUGRU。

这里需要注意一下后两种,他们主要是修改了GRU内部的计算公式,GRU的整体输入和输出还是没变的。

代码实践

待补充

参考

上一篇下一篇

猜你喜欢

热点阅读