前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >介绍一位大家的好朋友,迪恩!

介绍一位大家的好朋友,迪恩!

作者头像
炼丹笔记
发布2021-05-14 16:33:24
4710
发布2021-05-14 16:33:24
举报
文章被收录于专栏:炼丹笔记

作者:尘风,炼丹爱好者

排版:一元,炼丹笔记四品炼丹师

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函数,

Loss = - \frac{1}{N} \sum_{(x,y) \in \mathcal{S}} (ylogp(x) + (1-y)log(1-p(x)))

其中是大小为的训练集,, 是大小为的训练集,为对应的标签, 为网络的输出预测概率。

DIEN网络框架

捕捉用户的兴趣以及它们的动态变化对于CTR预测是至关重要的,DIEN就是致力于捕捉用户的兴趣以及对兴趣的变化过程进行建模。DIEN的大致框架图如下:

Interest Extractor Layer

在兴趣抽取层,我们从序列化的用户行为中抽取一系列兴趣状态。用户在电子商务系统中的点击行为是丰富的,为了平衡效率和效果,我们使用GRU来进行建模。输入的数据是依据行为的发生顺序的行为,GRU对应的数学形式如下:

u_t = \sigma(W^ui_t + U^uh_{t-1} + b^u)\\ r_t = \sigma(W^ri_t + U^rh_{t-1} + b^r)\\ u_t = tanh(W^hi_t + r_t \odot U^hh_{t-1} + b^h)\\ u_t = (1-u_t)^uh_{t-1} + u_t \odot \bar{h}_t

其中表示sigmoid函数,表示element-wise的乘积,,, 表示hidden的大小,表示输入的大小,是GRU的输入,表示用户的第个行为,表示第个hidden状态。

但是隐藏状态只能捕获行为之间的依懒性不能完全表示兴趣,在中的标签只包含了监督最终兴趣预测的信息,但是历史状态不能捕获到正确的监督,正如我们所知,每一步的兴趣状态会带来连续的行为,所以此处我们提出了辅助loss,我们使用来监督兴趣状态的学习,除了使用真实的下一步行为正实例,我们还使用从商品集中排除了点击商品的负实例作为负样本,于是我们有行为embedding的序列, 其中:

  • 表示点击的行为序列;
  • 表示负的样本序列,为历史序列行为的个数;
  • 为embedding的维度;
  • 表示用户点击的第个商品的emebdding。
  • 表示用户点击的第个商品的emebdding,这些都是从商品集合中采样得到的,排除了用户在第步点击的商品。
L_{aux} = -\frac{1}{N}(\sum_{i=1}^N \sum_{t} log \sigma(h_t^i, e_b^i[t+1]) + log(1-\sigma(h_t^i, \bar{e}_b^i[t+1])))

其中是sigmoid激活函数, 表示GRU的第个隐藏状态,CTR模型的损失就是:

L = L_{target} + \alpha L_{aux}

其中是超参,用来平衡兴趣表示和CTR预测。

所有个兴趣点,组成了兴趣序列,兴趣变化层可以建模兴趣。

整体上,辅助loss的引入可以带来下面的几大帮助:

  • 帮助GRU的每个隐藏单元更好地表示兴趣;
  • 在建模长时间序列的时候,辅助loss可以降低back propagation的困难;可以拿到更好的emebdding矩阵。
代码语言:javascript
复制
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函数可以表示如下:

a_t = \frac{exp(h_tWe_a)}{\sum_{j=1}^T exp(h_jWe_a)}

其中是在目标的ad的fields的embedding的concat结果。, 表示隐藏状态的维度,为广告的embedding向量。

1. AIGRU(GRU with attentional input)

其中表示GRU中第个隐藏状态, 是第二个GRU的输入,表示标量向量的乘积。

2. AGRU(Attention based GRU)

AGRU的数学形式为:

h'_t = (1-a_t) * h'_{t-1} + a_t * \bar{h}'_{t}

其中,和是AGRU的隐藏状态。AGRU使用attention score来控制隐藏状态的更新,同时弱化不相关兴趣的影响。

3. AUGRU(GRU with attentional update gate)
\bar{u}'_t = a_t * u'_t\\ h'_t = (1 - \bar{u}'_t) \odot h'_{t-1} + \bar{u}'_t \odot \bar{h}'_t

其中是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可以克服兴趣漂移带来的干扰。

参考文献

  1. Deep Interest Evolution Network for Click-Through Rate Prediction:https://arxiv.org/pdf/1809.03672.pdf
  2. https://github.com/mouna99/dien
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-11-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 炼丹笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 2. MLP层
  • 3. Loss函数
  • 1. AIGRU(GRU with attentional input)
  • 2. AGRU(Attention based GRU)
  • 3. AUGRU(GRU with attentional update gate)
  • 1. 效果比较
  • 2. AUGRU & 辅助Loss的影响
  • 3. 在线服务&A/B测试
相关产品与服务
智能数据分析
腾讯云智能数据分析 Intellectual Data Analysis 是新一代云原生大数据敏捷分析解决方案。产品具备存算分离、动态扩缩容等特点,并内置事件、转化、留存、行为路径等成熟分析模型,提供高可用、低成本的全场景敏捷分析服务,可同时满足数据分析师、数据开发工程师和业务决策人的关键分析需求,帮助企业大幅降低数据分析成本,支撑业务更高效决策。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档