0. 写在前面
前面我们分别讲了alibaba在电商推荐场景下的两大工作,分别是DIEN和DSIN。 其实,这两个模型均基于最初的模型DIN(Deep Interest Network)发展优化而来。这次,我们就来看看DIN相比于其他模型而言,到底有哪些优化点。
个人心得:
- 用户的历史行为与每个候选物品的相关性权重不是一定的,可以用attention来建模
- 激活函数的优化--适应数据分布的激活函数Dice
论文地址:
https://arxiv.org/abs/1706.06978
论文代码:
https://github.com/zhougr1993/DeepInterestNetwork
1. 背景
当前主流的深度学习推荐算法模型基本可以表示为如图所示的通用架构。
其中,模型的输入包括:用户特征、待推荐物品特征、上下文特征及用户与物品的交互历史特征。不论是wide&deep也好,还是DeepFM,一旦模型训练完毕,在推理过程中,用户的历史行为特征与待推荐物品的权重以及对推荐结果的影响就不会发生改变。举个例子,用户在历史中买了篮球和花,那么对于待推荐物品为篮球鞋和花盆的情况,篮球和花在推理过程中权重并不会发生变化。然而,直观上,篮球对于篮球框的权重(相关性)是要明显大于花盆的。因此,能不能利用用户的历史行为特征,动态的计算用户对当前待推荐物品的兴趣呢?基于这个出发点,alibaba提出了DIN深度推荐模型。
2. DIN模型
本节主要介绍DIN建模思路。将从模型架构和激活函数两个方面来对DIN进行介绍。DIN模型架构图如图所示。
2.1 模型架构
我们先看DIN的输入层。DIN的输入层其实与其他网络没有明显的区别,同样包含用户特征、用户历史行为特征、上下文特征及待推荐物品特征。在电商推荐场景下,物品特征可能包含有物品分类,物品的店铺,物品自身id等特征。然后,再对这些特征进行Embedding向量化的操作从而压缩维度。这些都是深度推荐网络输入层的常规做法,相信大家也都能想到。
那么,DIN又在哪里做了优化呢?既然提到“兴趣”网络,前面我们也说过,用户的兴趣在不同的物品上权重一定是不一样的。既然如此,如何度量用户的历史行为序列(即用户的兴趣)在当前待推荐物品上的权重呢?答案就是:Attention。DIN设计了一种attention模块来计算用户历史行为与待推荐物品间的相关性,进而将历史行为进行相关性加权,从而得到用户对带推荐物品的综合兴趣。
2.2 Attention Module
DIN的attention模块如图所示。
可以看到,Attention模块接受用户历史行为物品embedding及待推荐物品embedding作为输入,经过外积、拼接等一些列操作后,经过PRelu/Dice激活函数后,输出attention weight,即用户历史行为与当前待推荐物品的相关程度。然后,用attention weight对用户历史行为embedding进行加权,通过sum pooling得到综合了所有历史行为了的用户对待推荐物品的兴趣,与其他特征进行拼接后,送入PRelu/Dice激活函数,并做最后的2分类softmax。
2.3 Dice激活函数
上文中,两次提到激活函数Dice,分别用于attention模块以及全连接层后。下面我们来介绍Dice激活函数。
我们都知道,ReLU系列是目前常用的激活函数,例如ReLU,Leaky ReLU, PReLU等。这些激活函数均有在零点处发生阶跃的特点,并且对于任何分布的数据,这种激活方式是维持不变的。论文提出,面对不同分布的数据,采用同样的策略可能是不合理的。因此,DIN设计者提出了一种新的激活函数Dice,能够随着数据的分布来动态改变激活的策略,提高模型整体的学习和表达能力。Dice的数学表达如下所示,
其中,E[s]表示数据的均值,Var[s]表示数据的方差, 表示值很小的常量。
Dice会随着数据的分布进行自适应的调整,如下图所示。
3. 效果
论文对比了业界主流的推荐模型,例如wide&deep/DeepFM等。DIN的效果还是优于其他模型的,也进一步验证了引入用户兴趣的有效应以及对推荐效果的促进作用。
4. 总结
本文主要介绍了深度兴趣网络DIN的一些技术点,包括基于attention机制并结合用户历史行为的用户综合兴趣表征,能够自适应数据分布的激活函数DICE以及其他一些技术细节。DIN整体建模思路清晰简洁,能够为推荐算法工程师的日常工作与学习提供有价值的参考。