本篇一共5432个字
摘要:本文主要介绍阿里的深度兴趣网络DIN模型。为了解决推荐领域中用户历史行为包含大量用户兴趣信息,但只有一小部分用户兴趣信息会最终影响用户点击行为的问题,阿里引入Attention机制提升相关商品的权重同时降低非相关商品的权重,最终实现对用户历史行为进行加权的目的。同时讲了DIN模型中其他具有借鉴价值的工程实践,包括自适应正则Regularization、自适应激活函数Dice和评价指标使用GAUC替代AUC。
本文按照如下思维导图进行讲解:
01 为啥要学习DIN模型
1.1 DIN模型介绍以及在阿里的作用
DIN全称是深度兴趣网络模型(Deep Interest Network),是阿里妈妈精准定向检索及基础算法团队在2017年6月针对电子商务领域提出的CTR预估模型,主要是充分利用和挖掘用户历史行为数据提升CTR预估指标。阿里推荐系统整体框架如下图所示:
图1 阿里推荐系统整体框架
整体流程可以分为以下几个步骤:
- 获取用户历史行为数据,比如逛了什么店铺,购买了什么商品等等;
- 使用Matching模型产生候选的商品,一般是从海量的商品中选择用户可能感兴趣的部分商品,类似初筛的操作;
- 使用Ranking模型对候选的商品进行精排的操作,得到候选商品可能点击的概率,并根据概率大小逆序排序生成最终的用户推荐列表;
- 记录用户对于当前推荐商品的行为,点击标志为1,未点击则标志为0,反向用于模型训练和预测,系统自己生产和消费用户行为数据,形成闭环。
DIN模型在整个框架中负责生成用户推荐商品列表,也就是进行商品推荐。
1.2 DIN模型推荐效果显著提升
对于阿里这样大厂来说,推荐系统的好坏直接关乎真金白银,所以阿里推出的DIN模型推荐效果非常优秀。下面分别对比LR、Wide&Deep、DeepFM和
BaseModel(阿里上一版本的深度网络推荐系统)在公开数据集、离线数据以及线上效果对比。
1.2.1 公开数据集对比效果
分别对比模型在公开数据集MovieLens和Amazon(Electro)中的效果如下图所示:
图2 对比模型在公开数据集上的效果
在公开数据集下DIN模型表现最好,因为使用了注意力机制,可以自适应的得到用户兴趣的不同表示,所以极大提升了模型的表达能力。
1.2.2 对比阿里巴巴离线实验
图3 对比模型在阿里巴巴离线数据上的效果
DIN模型相比于BaseModel在AUC方面提升了1.89%。
1.2.3 对比线上实验A/B test
线上A/B test实验中,DIN模型的CTR指标比BaseModel模型提升了10%,RPM提升了3.8%。
综合来看,DIN模型在公开数据集、阿里巴巴离线数据和线上实验A/B test中推荐效果都有显著的提升。
1.3 应用到我们的场景
之前说过我们团队很重要的一个任务就是做广告推荐,就是为广告主圈选合适的人群进行广告投放,最终达到良好的广告转化效果。从大的范围来说,阿里推荐的商品本身就是广告的一种,所以我们的应用场景是一致的。通过公开数据集、阿里巴巴离线数据和线上实验A/B test效果也可以看出,DIN模型在推荐效果上有显著的提升,所以有必要学习并应用到我们实际项目中来。
02 深度学习中的CTR模型
2.1 深度学习中的CTR模型常规操作
随着深度学习已经应用到人工智能的方方面面,自然在CTR预估领域也有广泛的应用,比如常见的Wide&Deep、DeepFM等算法。通常情况下深度学习中的CTR模型分成以下流程:
- 通过embedding层将高维稀疏特征转换成固定长度的embedding向量;
- 通过多个全连接层学习特征之间的非线性关系;
- 通过sigmoid函数输出概率值。
总结下来是这样一个流程:Sparse Features -> Embedding Vector -> MLPs -> Sigmoid-> Output。
常规方法的优点:相比于传统的机器学习算法比如LR等,通过神经网络可以拟合高阶的非线性关系,同时大大减少了繁琐的人工特征工程的工作量。
2.2 阿里基础版本深度推荐网络BaseModel
下图是DIN模型之前阿里的深度推荐网络结构图,后文统称为BaseModel。
图4 BaseModel网络结构图
从上图可以看出,BaseModel模型基本上是深度学习中CTR模型的常规操作:首先将用户和商品这些高维稀疏特征经过embedding层转换成embedding向量。这里需要注意的是用户行为特征会经过一个sum pooling得到一个固定长度的向量。将用户向量、用户行为向量、候选广告向量和上下文向量进行拼接操作;然后将拼接的embedding向量经过两层全连接层学习特征之间的非线性关系;最后通过Softmax函数输出点击概率。
模型中用到的特征主要分成以下四部分:用户特征、用户行为特征、广告特征和上下文特征,具体如下图所示:
图5 特征列表
One-hot特征比较常见,比较特殊的是用户行为特征这种multi-hot多值离散特征。通过下图说明one-hot和multi-hot的区别:
图6 one-hot和multi-hot的区别
比如周几和性别都是one-hot类型,这种输入都是高维稀疏矢量,并且只有一位为1,其他都是0。用户行为特征是multi-hot类型,输入也是高维稀疏矢量,区别是可能多位为1,比如用户浏览了三种商品,那么这三种商品对应的位置都是1,其他则为0。
这里需要重点注意的是用户行为特征的处理流程。因为不同用户购买的商品数量是不同的,所以是multi-hot类型。通过引入sum pooling层将multi-hot向量转化成成固定长度的embedding向量。这种方式的好处是不管用户购买的商品差异有多大(这里的差异表现在购买商品的列表上),我们都会得到一个固定长度的embedding向量。但是也存在很大的缺点,这也是后面DIN模型需要重点解决的问题。
03 主角登场深度兴趣网络DIN
3.1 BaseModel存在的问题
上面讲到BaseModel对于用户行为通过sum pooling层将multi-hot向量转化成固定长度的embedding,这种操作存在一个明显的缺点:对于候选的商品来说,用户历史行为中购买的商品是同等重要的。通过下面一个例子进行详细说明:
图7 用户购买行为列表
上表中是两位用户购买商品的历史行为和候选商品表。年轻妈妈购买过羊毛衫、手提袋、耳环、童装、运动装等等,而游泳爱好者则购买过浴服、旅游手册、踏水板、马铃薯、冰激凌和坚果等等。当给游泳爱好者推荐护目镜(goggle)时,BaseModel认为当前用户购买过的浴服、旅游手册、踏水板、马铃薯、冰激凌和坚果等是一样重要的。但是明眼人一下就能看出来其中的不合理之处:一个可能的共识是当需要给游泳爱好者推荐护目镜时列表中那些和游泳爱好相关的商品肯定比那些和游泳不相关的商品的重要性要高。而DIN模型的最终目的就是自动提升相关商品的重要性,降低非相关商品的重要性。所以DIN模型的实质就是解决推荐领域中用户历史行为中包含大量的用户兴趣信息,但是只有一小部分用户兴趣信息会最终影响用户点击行为的问题。
3.2 引入Attention机制的DIN模型
为了自动提升用户历史行为中相关商品的重要性,阿里提出了DIN模型,模型主要思想是:将NLP中的Attention机制引入推荐系统,从而实现通过Attention机制对用户历史行为加权的目的。DIN模型网络结构如下图所示:
图8 DIN模型网络结构
对比DIN模型和BaseModel网络结构,可以发现整体大同小异,区别在于如何获取用户历史行为embedding向量信息。BaseModel直接对多个商品向量信息进行等权的sum pooling操作。这样虽然能得到固定长度的历史行为embedding向量,但是会带来信息的丢失。因为是等权操作,所以不同商品的embedding向量权重是一样的。而DIN模型将候选商品分别和用户历史行为中购买的商品进行局部激活操作(local activation),其本质就是weighted-sum pooling操作,让模型更加关注有用的信息。
DIN模型主要通过ActivationUnit神经网络来计算用户行为的embedding向量和候选商品的emebdding向量的Attention权重。Activation Unit网络结构如下图所示:
图9 ActivationUnit网络结构图
Activation Unit网络输入包含两部分,分别是用户历史行为中某个购买的商品embedding向量和候选商品的embedding向量,输出是用户历史行为中购买的这个商品对候选商品的重要性,也就是权重Activation Weight。其中需要注意的是不仅仅使用两者的embedding向量,还会将两者的向量经过外积计算得到的向量一起进行拼接,论文中指出这种方法有利于模型学习两者之间的相关性。
这里需要注意的是阿里引入的Attention机制并不是原始NLP任务中采用的Attention。原始的NLP顶层通过Softmax使得各权重之和为1。DIN模型中抛弃了顶层的Softmax,放宽了对于权重之和为1的限制。这么做的原因是将权重之和也作为有意义的参考价值,对于候选商品来说用户历史行为权重之和越大代表相关程度越高。而如果加入Softmax则权重和均为1,那么就失去了这个参考价值。
下面从计算公式的角度分析Attention机制对于计算用户兴趣embedding的变化。加入Activation Unit后,用户的兴趣计算公式如下所示:
图10 加入Activation Unit之后用户兴趣计算公式
其中V_u是用户的embedding向量,V_a代表候选商品的embedding向量,V_i是用户历史行为中某一次购买商品的embedding向量。加入Attention机制之前权重w_i都是1,也就是说列表中的商品权重都是一样的。但是加入Attention机制之后权重w_i变成了g(V_i,V_a),这个g(V_i,V_a)就是Activation Unit单元计算得到的Activation Weight。
通过一个简单的方式理解加入Attention机制前后对于候选推荐商品A来说用户各个历史行为的重要性。假如用户历史购买过五件商品,加入Attention机制之前,每件商品的权重都是一样的,假设都是0.2。现在加入Attention机制之后,可能五件商品的权重变成了0.6、0.3、0.1、0.1、0.1,其中0.6和0.3代表和商品A有关的商品,其他代表和商品A无关的商品。通过这种Attention机制很好的实现了自动给用户历史行为中和候选推荐商品相关的行为提升权重,给不相关的行为降低权重的目的。
3.3 DIN效果可视化图
图11 DIN模型效果可视化图
上图是DIN模型局部激活的效果展示图。可以看出当我们的候选商品是一件衣服时,用户历史行为中和衣服相关的商品具有更高的权重,非衣服的权重则较低。
04 其他有价值的工程实践
Attention机制的引入是DIN模型最核心的价值,但是该模型的价值不仅于此。DIN模型中还包含很多阿里工程师的优秀工程实践。
4.1 自适应正则Regularization
CTR预估模型中输入一般是高维稀疏特征,比如论文中列出商品id特征为6亿。如果不添加任何正则的方法,模型在一个epoch后效果会如下图所示快速下降:
图12 不添加正则化模型效果迅速下降
针对这个问题通常做法是使用L1、L2或者Dropout等方法防止过拟合。但这种方式对于工业级CTR模型并不适用。以L2正则化为例,当有上亿参数时计算每个mini-batch下所有参数的L2正则化,计算量太大。
通过分析发现用户数据符合长尾定律long-tail law,也就是说小部分特征出现多次,而大部分特征仅出现几次。这种长尾现象会给模型训练增加很多噪声,并且加重了过拟合的风险。
解决这个问题最简单的方法是舍弃出现次数较少的特征,但是缺点是人为的丢失了一些信息,导致模型更容易过拟合。同时需要设置阈值来确定舍弃的次数,这个新的超参数需要通过实验不断修正,并且可能发生变化。
针对这个问题阿里妈妈的工程师提出了自适应正则的方法,核心是根据特征出现的频率自适应的调整正则化的强度:对于出现频率较高的特征给与较小的正则化强度,同样的对于出现频率较低的给与较大的正则化强度。计算公式如下所示:
图13 自适应正则化计算公式
4.2 自适应激活函数Dice
要说Dice自适应激活函数(Data Dependent Activation Function),必须从Relu函数说起。下图是从Relu、PRelu到Dice自适应激活函数:
图14 从Relu到Dice激活函数图
PRelu是Relu的改良版,其中的a_i参数是可以学习的。当a_i为0时PRelu退化为Relu函数;当a_i是一个固定的很小的值时,PRelu退化为LRelu。PRelu相当于是输出x在0点的阶跃整流器。由于Relu在x小于0时梯度为0,可能导致网络停止更新,所以PRelu对整流器的左半部分进行了优化,使得x小于0时输出不为0。虽然PRelu可以提升准确率,但是也增加了模型过拟合的风险。
因为PRelu函数总是将0作为控制转折点,实际项目中输入层是不同分布的,也就是分割点不一定为0,所以阿里妈妈的工程师将PRelu做了平滑进行自适应的调整,使得拐点依赖于数据的分布而不再是固定的0。Dice激活函数的计算公式如下:
图15 Dice激活函数公式
这里可以把Dice看成是PRelu的一种推广,主要思想是根据输入数据分布来自适应调修正点,使得修正点不再是默认的0值,而是数据均值。除此之外,Dice还有一个好处是可以平滑过渡两个状态。也可以看出,当E(s)=0 and var[s]=0时,Dice退化为PRelu函数。
4.3 评价指标使用GAUC替代AUC
AUC是对于全体样本排序后计算的一个值,反应了模型对于整体样本的排序能力。但是用户推荐是个性化的场景,不同用户之间的商品排序不适合放在一起比较。我们最终的目的是对于每个用户来说想要的结果排在前面。这里通过下面一个例子进行说明:
假如现在有两个用户甲和乙,一共有5个样本,其中 表示正样本,-则表示负样本。因为同样的样本对于甲和乙可能是不同的label,所以应该进一步分成甲 、甲-、乙 和乙-。现在有两个模型A和B,对这5个样本的预测得分从小到大排序如下表所示:
图16 用户得分表
从以上模型预测结果来看,对于甲用户来说,模型A和模型B对甲的正样本打分都比负样本高,因为甲 都在甲-前面。同理用户乙也是如此。因此对于用户甲和用户乙来说两个模型的效果是一样好的。
但是如果分别计算两个模型的AUC,那么模型A的AUC值为0.883,模型B的AUC值为0.667。这时候我们发现AUC在当前场景下不准了,针对这种情况阿里妈妈团队提出了Group AUC作为评价指标。GAUC会先计算各个用户自己的AUC,然后加权平均,GAUC公式如下所示:
图17 GAUC计算公式
实际计算时我们还可以将权重设置为每个用户浏览或者点击的次数,并且会过滤掉单个用户全是正样本或者全是负样本的情况,进一步消除用户偏出对模型的影响。最终实验也证明了GAUC的确是一个更加合理的评价指标。
总结
本文主要介绍阿里的深度兴趣网络DIN模型。首先讲了下为啥要学习DIN模型,作为阿里最新(2018年时)的推荐系统模型,相比于上一代模型BaseModel推荐效果有显著提升,同样适用于我们团队广告推荐的场景;然后讲了下深度学习中的CTR模型常规操作和阿里基础版本深度推荐网络;接着重点讲了下本文的主角深度兴趣网络DIN模型,为了解决推荐领域中用户历史行为包含大量用户兴趣信息,但只有一小部分用户兴趣信息会最终影响用户点击行为的问题,阿里引入Attention机制提升相关商品的权重同时降低非相关商品的权重,最终实现对用户历史行为进行加权的目的;最后讲了DIN模型中其他具有借鉴价值的工程实践,包括自适应正则Regularization、自适应激活函数Dice和评价指标使用GAUC替代AUC。