作者:尘风,炼丹爱好者
排版:一元,炼丹笔记四品炼丹师
Deep Interest Evolution Network for Click-Through Rate Prediction(AAAI2019)
背景
对于CTR预测模型,需要捕捉用户行为数据背后潜在的用户兴趣。此外,考虑到外部环境和内部认知的变化,用户兴趣会随着时间的推移而动态演化。兴趣建模的CTR预测方法有多种,但大多将行为的表现直接视为兴趣,缺乏对具体行为背后潜在兴趣的专门建模。此外,很少有研究考虑兴趣的变化趋势。
深度兴趣演化网络DIEN,设计了兴趣提取层来从历史行为序列中捕捉时间兴趣。在这一层,我们引入一个辅助损失来抽取每一步的时间兴趣信息。针对用户兴趣的多样性,特别是在电子商务系统中,我们提出了兴趣演化层来捕捉与目标商品相关的兴趣演化过程。在兴趣演化过程中,注意力机制不断强化,并嵌入到序列结构中。该方案在taobao的广告中取得了20.7%的提升。
网络基础框架
特征表示
此处我们使用四类特征:User Profile,User Behavior,Ad和Context,每个又都会有许多域。
- User Profile:Gender,Age等等;
- User Behavior:浏览过的商品id;
- Ad:广告id,商品id等;
- Context:时间信息等等;
和DIN类似,我们先通过encoding将特征转换到稀疏二元特征[0,1],我们将这些不同的field的one-hot向量进行concat,得到,在序列化的CTR任务中,每个field可能有一系列的行为,每个行为对应一个one-hot向量,可以被表示为:,其中被编码为one-hot向量并且表示第个行为,是用户的历史行为个数,表示用户点击的总的商品数。
BaseModel的结构
1. Embedding
Embedding将大规模的稀疏特征转化为低维度的dense特征,在embedding层,特征的每个field都对应一个embedding矩阵,也就是说,看过的商品可以被表示为:,其中,表示维度为的embedding向量,对于每个行为特征,如果,那么它对应的embedding向量就是,有序embedding向量列表的行为可以被表示为:,相似的,表示表示广告类别中字段的concatenated的嵌入向量。
2. MLP层
最后我们来自一个类的embedding向量被送入pooling操作,然后来自不同类的pooling向量被拼接起来,最后拼接的向量被输入到MLP进行最终的预测。
3. Loss函数
当我们将所有的数据都拼接完成之后,下最后我们一般会连接一个全连接的MLP层,最后介入我们的Loss函数,
其中是大小为的训练集,, 是大小为的训练集,为对应的标签, 为网络的输出预测概率。
DIEN网络框架
捕捉用户的兴趣以及它们的动态变化对于CTR预测是至关重要的,DIEN就是致力于捕捉用户的兴趣以及对兴趣的变化过程进行建模。DIEN的大致框架图如下:
Interest Extractor Layer
在兴趣抽取层,我们从序列化的用户行为中抽取一系列兴趣状态。用户在电子商务系统中的点击行为是丰富的,为了平衡效率和效果,我们使用GRU来进行建模。输入的数据是依据行为的发生顺序的行为,GRU对应的数学形式如下:
其中表示sigmoid函数,表示element-wise的乘积,,, 表示hidden的大小,表示输入的大小,是GRU的输入,表示用户的第个行为,表示第个hidden状态。
但是隐藏状态只能捕获行为之间的依懒性不能完全表示兴趣,在中的标签只包含了监督最终兴趣预测的信息,但是历史状态不能捕获到正确的监督,正如我们所知,每一步的兴趣状态会带来连续的行为,所以此处我们提出了辅助loss,我们使用来监督兴趣状态的学习,除了使用真实的下一步行为正实例,我们还使用从商品集中排除了点击商品的负实例作为负样本,于是我们有行为embedding的序列, 其中:
- 表示点击的行为序列;
- 表示负的样本序列,为历史序列行为的个数;
- 为embedding的维度;
- 表示用户点击的第个商品的emebdding。
- 表示用户点击的第个商品的emebdding,这些都是从商品集合中采样得到的,排除了用户在第步点击的商品。
其中是sigmoid激活函数, 表示GRU的第个隐藏状态,CTR模型的损失就是:
其中是超参,用来平衡兴趣表示和CTR预测。
所有个兴趣点,组成了兴趣序列,兴趣变化层可以建模兴趣。
整体上,辅助loss的引入可以带来下面的几大帮助:
- 帮助GRU的每个隐藏单元更好地表示兴趣;
- 在建模长时间序列的时候,辅助loss可以降低back propagation的困难;可以拿到更好的emebdding矩阵。
def auxiliary_loss(self, h_states, click_seq, noclick_seq, mask, stag = None):
mask = tf.cast(mask, tf.float32)
click_input_ = tf.concat([h_states, click_seq], -1)
noclick_input_= tf.concat([h_states, noclick_seq], -1)
click_prop_ = self.auxiliary_net(click_input_, stag = stag)[:, :, 0]
noclick_prop_ = self.auxiliary_net(noclick_input_, stag = stag)[:, :, 0]
click_loss_ = - tf.reshape(tf.log(click_prop_), [-1, tf.shape(click_seq)[1]]) * mask
noclick_loss_ = - tf.reshape(tf.log(1.0 - noclick_prop_), [-1, tf.shape(noclick_seq)[1]]) * mask
loss_ = tf.reduce_mean(click_loss_ noclick_loss_)
return loss_
def auxiliary_net(self, in_, stag='auxiliary_net'):
bn1 = tf.layers.batch_normalization(inputs=in_, name='bn1' stag, reuse=tf.AUTO_REUSE)
dnn1 = tf.layers.dense(bn1, 100, activation=None, name='f1' stag, reuse=tf.AUTO_REUSE)
dnn1 = tf.nn.sigmoid(dnn1)
dnn2 = tf.layers.dense(dnn1, 50, activation=None, name='f2' stag, reuse=tf.AUTO_REUSE)
dnn2 = tf.nn.sigmoid(dnn2)
dnn3 = tf.layers.dense(dnn2, 2, activation=None, name='f3' stag, reuse=tf.AUTO_REUSE)
y_hat = tf.nn.softmax(dnn3) 0.00000001
return y_hat
Interest Evolving Layer
对于变化过程的优势在于:
- 兴趣演化模块可以为最终兴趣的表示提供更多的相关历史信息;
- 根据兴趣变化趋势来预测目标商品的CTR更好。
在演变的过程中,兴趣展示了两大特性:
- 由于兴趣的多样性,兴趣会漂移。兴趣漂移对行为的影响是用户可能在一段时间内对各种书籍感兴趣,而在另一段时间内需要衣服。
- 虽然兴趣可以相互影响,但每个兴趣都有自己的演变过程,例如书籍和衣服的演变过程几乎是独立的。我们只关注与目标项目相关的演进过程。
在第一步,伴随着辅助loss的帮助,我们可以获得更加具有表示能力的兴趣序列。通过分析兴趣变化的特性,通过分析兴趣演化的特点,将注意力机制的局部激活能力与从GRU到模型兴趣演化的顺序学习能力相结合。GRU的每个步骤中的局部激活可以强化相对兴趣的影响,并减弱兴趣漂移的干扰,有助于建立与目标项相关的兴趣演化过程。
我们使用表示输入和兴趣变化模块的隐藏状态,其中第二个GRU的输入对应在Interest Extractor Layer:, 最后一个隐藏状态则表示最终的兴趣状态:,我们使用的attention函数可以表示如下:
其中是在目标的ad的fields的embedding的concat结果。, 表示隐藏状态的维度,为广告的embedding向量。
1. AIGRU(GRU with attentional input)
其中表示GRU中第个隐藏状态, 是第二个GRU的输入,表示标量向量的乘积。
2. AGRU(Attention based GRU)
AGRU的数学形式为:
其中,和是AGRU的隐藏状态。AGRU使用attention score来控制隐藏状态的更新,同时弱化不相关兴趣的影响。
3. AUGRU(GRU with attentional update gate)
其中是AUGRU的原始更新门,专门为AUGRU设计的attentional 更新们,, , 为AUGRU的隐藏状态。
在AUGRU中,我们保留了更新门的原始维度信息,这决定了每个维度的重要性。在区分信息的基础上,我们使用注意分数at来衡量更新门的各个维度, 结果表明,关联度越小,对隐藏态的影响越小。奥格鲁更有效地避免了利益漂移的干扰,推动了相对利益的顺利演进。
实验
1. 效果比较
- DIEN的效果是最好的;
2. AUGRU & 辅助Loss的影响
- 与BaseMode相比,两层GRU关注度得到了提高,但缺乏对演化建模的能力限制了它的能力。AIGRU的基本思想是对进化过程进行建模,尽管它在兴趣演化过程中有进步、注意力分散和信息丢失等问题。
- AGRU进一步尝试融合注意力和进化,AUGRU取得了明显的进步,这反映出它将注意机制和顺序学习完美地融合在一起,捕捉到了进化的过程相对利益的有效处理。
- 辅助Loss有着相似的下降速度;
- 辅助loss可以带来巨大的帮助。
3. 在线服务&A/B测试
从2018-06-07到2018-07-12时间段,DIEN帮助我们将CTR提升了20.7%,eCPM提升了17.1%。
小结
本文是DIN的扩展,相较于DIN,DIEN可以更好地建模用户的兴趣演变过程,DIEN在在线广告系统中大大的提升了CTR的预估效果。DIEN中的辅助Loss帮助我们更好地学习Embedding,提供了更多的监督信息;此外,DIEN使用GRU和注意更新门(AUGRU)来模拟与目标项目相关的兴趣演变过程。在AUGRU的帮助下,DIEN可以克服兴趣漂移带来的干扰。
参考文献
- Deep Interest Evolution Network for Click-Through Rate Prediction:https://arxiv.org/pdf/1809.03672.pdf
- https://github.com/mouna99/dien