阿里DIN模型(深度兴趣网络)详解及理解

19 篇文章 2 订阅
9 篇文章 3 订阅

目标:

掌握2017年阿里提出的深度兴趣网络(Deep Interest Network for Click-Through Rate Prediction)以及后续的DIEN。
本篇介绍DIN
原文:
Deep Interest Network for Click-Through Rate Prediction
21 Jun 2017
Deep Interest Evolution Network for Click-Through Rate Prediction
11 Sep 2018


模型产生原因:

为什么会产生DIN,个人觉得和阿里的广告业务息息相关。

前面几篇文章,主要介绍的推荐算法,主要用于提高点击率,或者说增加用户黏度,就是对所有物品一视同仁,然后推荐给用户最关心的N个商品。
但是有些平台,比如淘宝、京东、百度等,这些平台靠广告费用支持公司收入,对于某个物品,支付的广告费用越多,理应让他以更高的权重暴露给用户,这里就不仅是推荐用户最关心的物品,而是判断付了广告费的商品,是否需要推荐给指定用户?
因此,我们的先决条件变成了:
1、 待推荐的物品(candidate Ad 付了广告费的物品)
2、 用户信息
3、 用户的购买历史物品序列
4、 场景信息(当前用户所处的页面、状态、时间等信息)


核心思想:

DIN核心思想可以归纳为:
1、 基于物品的推荐,也就是判断购物购买过的物品,进而判断是否和本广告物品相关
2、 用户购买过的物品,权重不一样。比如,推荐物品为奶粉,用户购买过笔记本电脑,购买过尿不湿,显然,尿不湿的奶粉的相关性高。因此需要提高尿不湿的权重。

**顺着DIN模型的思想,我们也可以进一步提出我们的优化方案:
1、加 e − t e^{-t} et的时间衰减系数

  • 购买过的物品是时间序列,因此可以在加上和上次购买时间间隔的衰减因子。比如1年前购买过笔记本电脑,1个月前购买过尿不湿,现在要推荐鼠标,你觉得1年前购买过笔记本电脑的权重还很高吗?显然不是,可以加个 e − t e^{-t} et的时间衰减系数, t t t为上次购买时间和今天的时间间隔,时间间隔越大,权重越小。

模型介绍:

CTR预估是在线广告以及电商的非常重要的业务,除了传统的方法之外,目前以embedding+MLP为主的深度学习方法也广为应用。
在这些方法中,用户特征用固定长度的向量来表示,而已有的方法往往忽视获取用户历史行为中的兴趣多样性,即:

  • 在电商网站的广告展示中,用户可能会同时对不同的广告有兴趣。

  • 一种暴力的对用户兴趣多样性建模的方法是让特征向量足够的大,把所有购买过的物品embeding拼接成一个长向量。当然这会带来计算和存储上的困难,并且在线系统也不会允许这种方法。

  • 除此之外,当为某个广告进行预测时,并不是历史行为中的所有用于兴趣都是有用的,用户买书的时候是不会考虑已经买过的衣服的。很自然的,attention可以很好的解决以上问题,论文作者提出的Deep Interest Network从历史行为中学习user interest,其核心思想就是attention。除了DIN网络之外,作者还提出了mini-batch的正则化以及PReLU的更泛化的方法:Dice。下面首先介绍Base model。

    Base model

    刚才说了,把所有购买过的物品embeding拼接成一个长向量不可取,那结合现有的pooling技术,比如CNN卷积神经网络中的pooling(maxpooling,avgpooling),我们也能想到pooling,就是sum pooling,就是把候选物品embeding一股脑全部加起来,得到一个向量,该向量表示了用户的兴趣方向。
    于是得到了如下图的模型:

    在这里插入图片描述
    存在问题:

  • 以阿里巴巴的广告推荐系统为例,假设某个用户之前的历史记录中浏览了背包,杯子等商品。假设上图中的candidate ad是一个关于手提包的广告,如果照这种方式构建模型的话,背包,杯子所在特征对应的embedding特征就会被pooling成一个固定长度的特征,带来的效果就是我们认为背包,杯子这两类商品的特征对于手提包这个商品是否被推荐是同等重要的。但是很显然买过背包这个特征对于手提包这个商品是否被推荐具有更重要的价值,所以这就启发作者为给定的candidate ad和不同的(浏览历史中的)商品特征之间设置不同的权重,即论文的核心组件local activation unit,这个其实就是attention的思想。

    改进模型

    • 既然要设置不同的权重,自然想到物品和待推荐物品的相关性,相关性计算自然就想到了两个物品embeding向量的内积,这在经典协同过滤算法中太常用了。不只是内积,向量外积、向量减法等,都可以衡量两个向量间的夹角。比如两个物品向量相减之后,得到的结果很小,也能说明两个物品相似。
    • 原作者用得是外积,得到一个向量,然后和原来的物品向量、广告向量。三个向量拼接在一起,送进MLP,最终得到一个预测权重。结构如下:
      在这里插入图片描述
      因此,每个历史购买物品都经过这样的激活单元处理,就能得到历史物品的权重。
      在这里插入图片描述
      所以,最终就诞生了DIN模型。
      正如前文说所,既然DIN可以得到一个物品相关性权重,也可以人为加入一个时间相关性权重,就是在最后,再乘以一层时间间隔的衰减系数。
      所以理解模型产生原因和优化本质很关键。
      进一步的,除了加入时间衰减系数,还能有其他优化点吗?
  • 这就可以进一步挖掘时间序列的处理方法。时间差分,也就是相同时间段,用户的行为变化趋势,window操作。比如这个月比上个月,用户的购买行为增多,表示用户的活跃度提升,因此这个用户的权重又可以增大,说明用户喜欢在平台购物。

  • 反之,用户购买行为在减小,说明用户因为某些原因,兴趣在流失,推荐给他的物品,转化率可能也不会太高。

模型算法设计

  • 输入 x x x : 模型的输入是个 K K K 维高维稀疏二值型向量,通常是多个group的特征进行拼接而成(group可以理解为一个方面的特征)。假设有 M M M 个group,每个group的特征 t i t_i ti 向量的维度为 K i K_i Ki , 特征向量 t i t_i ti每个元素取值为0或1,取值为1的个数大于1(废话,全0怎么训练?)。
    输入类别示意图:

在这里插入图片描述
这样就搞清楚了模型的结构。
在这里插入图片描述
Loss损失函数,还是采用常规的二分类交叉熵损失函数。
在这里插入图片描述
DIN的模型结构图,与base model的主要区别就在于在用户行为特征上引入了局部激活单元(Activation Unit):
在这里插入图片描述

e 1 e_1 e1, e 2 e_2 e2, …, e H e_H eH是用户 U U U的行为物品对应的embedding向量列表, H H H是行为物品个数。 v A v_A vA 是广告A的embedding。 a ( ∗ ) a(*) a()是一个前向神经网络,它的输出作为激活权重 a ( e j , v A ) a(e_j,v_A) a(ej,vA),最后作用在 e j e_j ej上。除了两个输入嵌入向量外, a ( ∗ ) a(*) a()还增加了两个映射后的向量的外积输入到子网络中,就是激活单元的结构。
模型也可以这样表示:
在这里插入图片描述

论文的算法改进

  • 论文的算法改进主要朝着
    1. 降低模型复杂度
    1. 降低计算或者存储
    1. 通过变形、改写公式,找到相近似的表达式。进而找到模型的简化版本。
      这个其实做工程已经不是特别关心了。
      这里贴出别人解释的照片即可。

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

参考资料

https://blog.csdn.net/cqlboat/article/details/103940661
https://zhuanlan.zhihu.com/p/420211688
https://zhuanlan.zhihu.com/p/49263704

  • 3
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值