简介
本文要介绍的是由阿里巴巴团队于2019年提出的DIEN模型,此模型是该团队此前提出的DIN的演化版本。DIEN的应用场景和DIN一模一样,其创新之处在于使用了序列模型来模拟用户兴趣的进化过程。DIN模型直接将用户历史行为数据当成用户的兴趣特征,但是正如我们所知,用户潜在的兴趣很难通过显式的历史行为数据直观反映出来。DIEN正是瞄准了这个难点,深入挖掘历史行为数据背后隐藏的用户兴趣特征,并且捕捉用户兴趣的进化过程。
DIEN的“进化”动机
无论是电商购买行为,还是视频网站的观看行为,或者是新闻应用的阅读行为,特定用户的历史行为都是一个随着时间排序的序列。既然是时间相关的序列,就一定存在或深或浅的前后依赖关系,这样的序列信息对于推荐过程无疑是有价值的。举例来说明这一点,对于一个综合电商来说,用户兴趣的迁移其实非常快。例如,上周以为用户在挑选篮球鞋,这位用户上周的行为序列可能都集中在篮球鞋这个品类的商品上,但在他完成购买之后,本周他的购物兴趣可能会变成买一个机械键盘。序列信息的重要性在于:
- 它加强了最近行为对下次行为预测的影响
在上面的例子中,用户近期购买机械键盘的概率会明显高于再买一双篮球鞋或者其他商品的概率。 - 序列模型能够学习到购买趋势的信息
在上面例子中,序列模型能够再一定程度上建立“篮球鞋”到“机械键盘”的转移概率。如果这个转移概率在全局统计意义上式足够高的,那么用户在购买篮球鞋时,推荐机械键盘也会成为一个不错的选项。直观上,二者的用户群体可能是一致的。
如果放弃序列信息,则模型学习时间和趋势这类信息的能力就不会那么强,推荐模型就仍然是基于用户所有购买历史的综合推荐,而不是针对“下一次购买”推荐。显然,从业务的角度来看,后者才是推荐系统正确的推荐目标。
DIEN模型
基于引进“序列”信息的动机,阿里巴巴对DIN模型进行了改进,形成了DIEN模型的结构。DIEN模型依旧遵循传统的Embedding层+聚合层+多层全连接神经网络+输出层的结构。DIEN模型整体框架如下图:
DIEN模型 上图中彩色部分是“兴趣提取网络”,可以认为它是用来从用户的历史行为数据中提取兴趣的网络,它最终的输出是,代表当前用户的兴趣向量。DINE模型的创新点在于如何构建“兴趣提取网络”。“兴趣提取网络”自底向上共包含3层,分别是:- 用户行为层(Behavior Layer)
主要作用是将原始的高维稀疏的历史行为数据转换成低维稠密的embedding向量。 -
兴趣提取层(Interest Extractor Layer)
主要作用是通过模拟用户兴趣的迁移过程,从用户历史行为数据的背后抽取真实兴趣特征。 -
兴趣进化层(Interest Evolving Layer)
主要作用是通过在兴趣提取层基础上加入注意力机制,模拟与当前广告相关的兴趣进化过程。
后两层才是DIEN比较关键的创新,我们着重分析一下这两层的构造。
兴趣提取层(Interest Extractor Layer)
在电商系统中,用户的行为数据往往蕴含着用户的兴趣爱好,这些兴趣也会随着用户的购买行为而发生变化,兴趣提取层的目的就是从用户的行为序列中提取出一系列的兴趣状态。
为了平衡效率和性能,作者选择了GRU(Gated Recurrent Unit,门循环单元)网络来对用户行为之间的依赖进行建模。相比传统的RNN和LSTM,GRU能够克服RNN梯度消失的问题,同时比LSTM网络具有更少的参数,训练收敛速度更快,更加适合电商系统。GRU的结构如下:
然而,隐状态向量只能捕捉用户行为之间的依赖关系,却并不能很好地描述用户的兴趣。由于目标item的点击行为是由最终计算出来的兴趣特征触发的,中使用的标签数据只对最终生成的兴趣进行监督学习,而历史隐状态并不能进行监督学习。因此,作者提出了辅助损失(auxiliary loss),它使用了时刻的行为向量来监督当前时刻GRU学习到的隐状态。示意图如下: Auxiliary Loss
除了使用时间轴上下一个行为向量作为正样本以外,还从不包含正样本的历史行为样本集中抽样出一个负样本。
这样就可以形成对行为向量序列: 其中 代表点击行为序列,代表负样本序列。是行为序列的总长度,是embedding向量的维度。由此可得,Auxiliary Loss的计算方式如下: 其中的定义如下: 代表GRU的第个隐状态,DIEN的总体损失函数为: Loss 其中是一个超参数,用于平衡CTR预估和兴趣表示。
作者认为,通过引入Auxiliary Loss,GRU的每个隐状态就有足够强的表达能力来代表用户的兴趣,并且所有个隐状态进行聚合之后得到序列也能够让兴趣进化层进行近一步的建模。总得来说,Auxiliary Loss具有以下优点:
- 从兴趣学习的角度来看,Auxiliary Loss的引入可以使得GRU的隐状态向量更有效地表达用户的兴趣
- 从GRU的优化角度来看,当GRU对较长历史行为序列建模时,Auxiliary loss可以降低反向传播的难度
- Auxiliary Loss的引入给embedding层的学习提供了更多的语义信息
实际上,没太明白Auxiliary Loss究竟如何提供更多语义信息。
兴趣进化层(Interest Evolving Layer)
由于内部和外部环境的影响,用户的兴趣是在不断变化的。以买衣服为例,随着时下流行和用户口味的变化,用户对衣服的品位也会随之变化。用户对衣服偏好的变化会直接影响到对候选衣服的CTR预估。当然,随着用户兴趣的进化,兴趣也可能会发生偏移。举个例子,用户可能在一段时间内喜欢买书,而在另外一段时间内喜欢买衣服。尽管兴趣之间是会互相影响的,但是每个兴趣爱好都有各自的进化历程,并且基本都是独立的。比如,关于书和衣服的品位的变化就基本是独立的。我们在做CTR的时候,只需要关注与目标物品相关的兴趣进化过程。
在兴趣进化层的第一阶段,作者引入了注意力机制,来计算每个GRU的隐状态与目标广告之间的权重关系,也叫做注意力分数。具体计算公式如下:
接下来介绍一些将GRU和注意力结合的机制,它们共同来对用户兴趣进化过程进行建模。作者一共提出了3种模型,分别是AIGRU、AGRU、AUGRU。
- GRU with attentional input (AIGRU)
这种方式将attention直接作用于输入,无需修改GRU的结构,即兴趣进化层GRU的输入是兴趣提取层GRU的隐状态与对应注意力分数的乘积: -
Attention based GRU(AGRU)
这种方式需要修改GRU的结构,此时hidden state的输出变为: -
GRU with attentional update gate (AUGRU)
这种方式需要修改GRU的结构,此时hidden state的输出变为:
这里需要注意一下后两种,他们主要是修改了GRU内部的计算公式,GRU的整体输入和输出还是没变的。
代码实践
待补充
网友评论