推荐系统之深度会话兴趣网络DSIN

深度会话兴趣网络DSIN

深度会话兴趣网络(Deep Session Interest Network,DSIN)是阿里浅梦发表在IJCAI 2019上的模型,是阿里既DIN、DIEN之后的又一CTR模型。不过二者应该属于阿里不同团队的研究工作,DIN和DIEN是阿里妈妈定向广告团队孵化的,去年跑到朝阳听过卞维杰分享的Talk,阿里妈妈最新的工作应该是ESMM、MIMN以及算法和工程co-design的相关研究。双方的开源工作分别是X-DeepLearning和DeepCTR,star数差不多,目前均为3k,但DeepCTR有文档更friendly,X-DeepLearning在官方Alibaba Organization下,曝光率高,但有利有弊,大公司更新官方repo流程可能会繁琐一些,谁能维持一个更好的community环境估计会是突破10k的关键吧。

Motivation

没有business value的技术再炫酷也一钱不值,毕竟凡人修仙之前还是要吃饭的。电商业务场景中,最有价值的莫过于海量的User Behavior数据,因此DIN、DIEN和DSIN可谓一脉相承,核心思想都是如何更契合实际地建模用户行为序列,挖掘用户真实兴趣。

淘宝用户数以亿计,每一个用户都是独立的个体,有着独一无二的shopping习惯和兴趣偏好,比如办公室美眉可能每天都逛淘宝,逛完上衣看靴子,冬天尚未结束已经开始浏览第二年的春装,默默喂给模型大量且高频有价值的交互信息。而吾等码农,可能新手机上市,上线一下;卫生纸用完了,补一下货,一年下来交互记录没有几条。推荐系统虽然号称千人千面,但不可能为每一个用户train一个模型,因此能捕捉大多数人的偏好习惯特征已算是不错。
在这里插入图片描述
DIN模型是直接将用户行为序列看做兴趣,并使用Attention机制来提取兴趣的多样性,但其潜在假设是用户行为序列中的每个行为都是独立不相关的,这当然过于理想化,比如用户当前对机械键盘感兴趣,看完Cherry红轴很可能会点击Flico茶轴。因此DIEN将用户行为序列看做用户兴趣不断进化的过程,并使用GRU序列模型+Attention机制来建模,选择GRU是模型效果和工程落地的权衡之举,当然DIEN也并不是完美的。

DSIN作者通过挖掘用户的交互记录,发现用户行为具有如下的特点 - “user behaviors are highly homogeneous in each session and heterogeneous cross sessions”。如上图所示,将用户的点击行为按时间排列,按间隔是否大于30 min划分为不同的session,可以看出这位女施主在第一个session中看得都是和裤子相关的商品,在第二个session中看得都是和戒指相关的商品,在第三个session中看得都是和上衣相关的商品。

个人感觉session划分的合理性(可解释性)在于用户购买商品时普遍会货比三家,但类似于番茄工作法,人只能保持25min高效集中的注意力,下一个session兴趣可能就转移了或者需要购买其他商品,除非极其贵重或有特殊意义的商品,为了买一瓶洗面奶而挑三个小时的人应该是比较少的。当然通过30min这条规则来划分session,作者是受到Airbnb论文的启发,简单且高效。

DSIN 模型框架

在这里插入图片描述
DSIN模型框架如图所示,左侧User Profile和Item Profile通过Embedding将Sparse Feature转化为Dense表示属于常规操作,不再赘述。重点在于右侧对于User Behavior序列的处理,DSIN将之分为四层,从下到上依次是:

  • 1)序列切分层(Session Division Layer),负责将用户的历史行为记录划分到不同的Session;
  • 2)会话兴趣抽取层(Session Interest Extrator Layer),负责学习Session的表征;
  • 3)会话兴趣交互层(Session Interest Interacting Layer),用来学习Session之间的演变;
  • 4)会话兴趣激活层(Session Interest Activating Layer),用于学习Target Ad和历史点击Session的相关性。
序列切分层(Session Division Layer)

将User Behavior Sequence按照时间排序,并根据两个行为之间的间隔是否大于30 min,切分为不同的Session。潜在假设是同一个Session内用户的行为是接近的,比如Session 1里都是裤子相关的商品,而不同Session之间的行为是有差异的。

经过切分,行为序列Sequence转化为Session序列,比如第 k k k个Session表示为:
Q k = [ b 1 , . . . , b i , . . . , b T ] ∈ R T × d m o d e l Q_k = [b_1, ...,b_i,...,b_T] \in R^{T \times d_{model}} Qk=[b1,...,bi,...,bT]RT×dmodel 其中 T T T是第 k k k个Session的长度, b i b_i bi是Session中第 i i i个行为, d m o d e l d_{model} dmodel是输入的Item的embedding大小。

会话兴趣抽取层(Session Interest Extrator Layer)

对每个Session,使用Transformer获取Session的表征。用户在同一Session内部的行为是高度相关的,但同时一些随意行为会偏离整个Session表达,为了刻画相同Session内行为间的相关性,同时减小不相关行为的影响,DSIN使用Multi-head Self-attention来对每个Session建模。同时为了刻画不同Session之间的顺序,DSIN引入偏置编码Bias Encoding,实际上是对序列中位置信息的编码。

会话兴趣交互层(Session Interest Interacting Layer)

用户的会话兴趣,是有序列兴趣的,DSIN使用Bi-LSTM来建模捕捉Session之间的演变。每个时刻的hidden state计算如下:
H t = h f t → ⊕ h b t ← H_t = \overrightarrow{h_{ft}} \oplus \overleftarrow{h_{bt}} Ht=hft hbt 相加的两项分别是前向传播和反向传播对应的 t t t时刻的hidden state,得到的隐藏层状态 H t H_t Ht可以认为是混合了上下文信息的会话兴趣。

会话兴趣激活层(Session Interest Activating Layer)

用户的Session兴趣与Target Item商品越相近,那么应该赋予更大的权重,DSIN使用Attention机制来捕捉这种相关性。后面的操作,就是把四部分的向量:用户特征向量、待推荐物品向量、会话兴趣加权向量、带上下文信息的会话兴趣加权向量UH进行横向拼接,输入到全连接层中,得到输出。

DSIN 可视化

在这里插入图片描述
最后作者对Self-attention和Activation Unit做了可视化,颜色深浅表示Attention Weight的权重,可以看出Target Ad是裤子的时候,Session 1明显要深很多。

总结

模型确实很复杂,也许只有爱因斯坦才能天纵横才想出 E = m c 2 E = mc^2 E=mc2这种简单优雅的公式刻画真实的物理世界。

Reference

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值