zoukankan      html  css  js  c++  java
  • 深度兴趣网络DIN-DIEN-DSIN

    看看阿里如何在淘宝做推荐,实现“一人千物千面”的用户多样化兴趣推荐,首先总结下DIN、DIEN、DSIN:

    1. 传统深度学习在推荐就是稀疏到embedding编码,变成稠密向量,喂给NN
    2. DIN引入attention机制,捕获候选商品和用户浏览过的商品之间的关系(兴趣)
    3. DIEN在DIN基础上引入序列概念,将用户历史行为序列纳入到网络内
    4. DSIN将行为序列划分为session,更符合RNN概念

    大多推荐场景下数据下都包含如下信息,用户内在属性信息、用户行为信息、商品信息、上下文信息,一个明显区别是不同用户的行为信息差异很大。

    深度学习在推荐系统一般做法:

    稀疏向量 -- embedding -- fixed-length稠密向量 --- MLP

    这样做有什么问题?

    1. 一个明显的问题是不同用户的行为序列长度是不同的,fixed-length信息表达不全面

    2. 用户最终的行为只和历史行为中的部分有关,因此对历史序列中商品相关度应有区分

    • DIN

    根据上述问题,有两个解决思路:

    1. 对不同用户尝试不同维度的向量,导致训练困难
    2. 如何在有限的维度表示用户的差异化兴趣?

    DIN从第二个问题出发,引入局部激活单元,对特定的ad自适应学习用户兴趣表示向量。即同一用户在获选ad不同时,embedding向量不同。

    key idea

    使用attention机制捕获ad和用户行为序列商品之间的关系

    看结果

    1. 和ad相似度搞得物品拥有更高的权重
    2. 不相关物品的相似度低

    下面是两个小tricks,对结果提升有帮助:

    1. Mini-batch Aware Regularization

    2. Dice Activation Function

    tricks的细节可以参考原论文。


    • DIEN
      DIEN使用了GRU来建模用户行为序列,在DIN基础上考虑序列信息
    1. 使用GRU建模序列信息,即用GRU最后时刻的隐状态表示序列信息
    2. 修改GRU为AUGRU

    看下AUGRU部分:

    [a_{t}=frac{exp left(mathbf{h}_{t} W mathbf{e}_{a} ight)}{sum_{j=1}^{T} exp left(mathbf{h}_{j} W mathbf{e}_{a} ight)} ]

    [egin{aligned}& ilde{mathbf{u}}_{t}^{prime}=a_{t} * mathbf{u}_{t}^{prime}\&mathbf{h}_{t}^{prime}=left(1- ilde{mathbf{u}}_{t}^{prime} ight) circ mathbf{h}_{t-1}^{prime}+ ilde{mathbf{u}}_{t}^{prime} circ ilde{mathbf{h}}_{t}^{prime}end{aligned} ]

    根据attention score控制更新门。

    看模型,直观的思考貌似很合理,但是有两个问题:

    1. 序列信息包含多长?即短期兴趣还是长期兴趣的问题
    2. 序列连续否?不同时期的兴趣不一样,序列间隔过大相关性可能很低
    3. 用户是否一定服从严格的序列?先点那个和后点那个的区别大吗

    1.DIEN使用过去14天信息行为序列,从RNN角度来说可能短期内行为信息更重要,但长期信息是否引入了噪音?

    2.过去14天内用户需求会变。比如第一天买了衣服、可能十天后买的是书

    3.用户点击顺序不一定重要,自己想一想好像是

    关于使用RNN是否合适,RNN只关心t-1(上一步)和t(当前步),而没有涉及t-1和t之间的时间间隔。没涉及不代表不重要,反而是因为其使用前提就是假定各步骤之间是等间距的,见维基百科。

    A time series is a series of data points indexed (or listed or graphed) in time order. Most commonly, a time series is a sequence taken at successive equally spaced points in time"

    以上部分内容摘自[3].


    • DSIN

    DSIN进一步做出优化,在每个会话中的行为是相近的,而在不同会话之间差别是很大的,如下图的例子:

    模型架构

    1.会话分割层

    将用户的点击行为按照时间排序,判断每两个行为之间的时间间隔,前后的时间间隔大于30min,就进行切分。

    2.兴趣提取层

    用Tansformer编码用户行为序列,简单来说就是输入一个序列,输出一个对应的embedding序列。

    引入了偏置编码(Bias encoding),实质上是对序列中位置信息的编码

    原始做法:

    [egin{aligned}&P E_{( ext {pos}, 2 i)}=sin left( ext {pos} / 10000^{2 i / d_{ ext {model}}} ight)\&P E_{(p o s, 2 i+1)}=cos left(p o s / 10000^{2 i / d_{m o d e l}} ight)end{aligned} ]

    bias encoding:

    [mathbf{B E}_{(k, t, c)}=mathbf{w}_{k}^{K}+mathbf{w}_{t}^{T}+mathbf{w}_{c}^{C} ]

    第一项表示处于第几个session,第二项表示session的第几个行为,第三项表示整体位置的embedding。关于这三项其实不是很明确,知道的同学麻烦帮忙解答下,贴上原图

    3.兴趣交互层

    捕获序列的顺序关系,文中使用Bi-LSTM

    4.兴趣激活层

    和DIN中一样,使用attention捕捉商品相关性

    模型思想大概就这么多,细节部分可以参考原论文。

    具体应用

    1. 充分了解领域数据特点,根据场景定制适合具体问题的网络结构

    2. 需要有丰富的特征

    references:

    [1]Deep Interest Network for Click-Through Rate Prediction,https://arxiv.org/pdf/1706.06978.pdf ,KDD2018

    [2]Deep Interest Evolution Network for Click-Through Rate Prediction, https://arxiv.org/pdf/1809.03672.pdf. AAAI 2019

    [3]也评Deep Interest Evolution Network . https://zhuanlan.zhihu.com/p/54838663.

    [4]Deep Session Interest Network for Click-Through Rate Prediction. https://arxiv.org/pdf/1905.06482.pdf . IJCAI 2019

  • 相关阅读:
    [整理]Win下好用的Markdown工具
    tcpip http socket
    [整理].net中的延迟初始化器
    [整理]ASP.NET WEB API 2学习
    [整理]ASP.NET MVC 5
    [转载]AngularJS 指令 用法
    [整理]HTML5 WebSocket
    [整理]CSS3 滤镜
    [整理]WebAPP开发的框架
    [整理]AngularJS移动端开发遇到的问题
  • 原文地址:https://www.cnblogs.com/gongyanzh/p/12133984.html
Copyright © 2011-2022 走看看