深度推荐模型 - DIN

DIN

提出背景

Deep Interest Network(DIN)是阿里巴巴在2018年提出的,该模型更加具有业务气息。应用场景是阿里巴巴的电商广告推荐业务。DIN这个模型应用了注意力机制来对用户的兴趣动态模拟。这个应用场景的最重要的特点是:有大量的用户历史行为信息。

之前的深度学习模型对于这种推荐任务一般有着差不多的固定处理套路,就是大量稀疏特征先经过embedding层,转成低维稠密的,然后进行拼接,最后喂入到多层神经网络中去。

对于这种用户留下了大量的历史交互行为的业务场景,之前的深度学习模型根本没有考虑之前用户历史行为商品具体是什么,也是没法很好的去表达出用户这广泛多样的兴趣的,更不知道究竟用户历史行为中的哪个会对当前的点击预测带来积极的作用。但实际上对于用户点不点击当前的商品广告,很大程度上是依赖于他的历史行为的。

若想在深度模型中考虑用户历史信息,就得加大隐向量的维度,让每个特征的信息更加丰富, 那这样带来的问题就是计算量上去了,毕竟真实情景尤其是电商广告推荐的场景,特征维度的规模是非常大的。并且根据上面的例子,也并不是用户所有的历史行为特征都会对某个商品广告点击预测起到作用。所以对于当前某个商品广告的点击预测任务,没必要考虑之前所有的用户历史行为。

因此,DIN的动机如下:

  1. 在业务的角度,我们应该自适应的去捕捉用户的兴趣变化,这样才能较为准确的实施广告推荐;
  2. 到模型的角度,我们应该考虑到用户的历史行为商品与当前商品广告的一个关联性,如果用户历史商品中很多与当前商品关联,那么说明该商品可能符合用户的品味,就把该广告推荐给他。

一旦涉及到关联性,就容易想到“注意力”思想,因此把注意力引入到了模型,设计了一个"local activation unit"结构,利用候选商品和历史问题商品之间的相关性计算出权重,这个就代表了对于当前商品广告的预测,用户历史行为的各个商品的重要程度大小。

DIN模型的数据集和特征表示

工业上的CTR预测数据集一般都是multi-group categorial form的形式,就是类别型特征最为常见,这种数据集一般长这样:
在这里插入图片描述

各项含义如下:
asin 产品的ID
imUrl 产品图片地址
description 产品描述
categories 产品所属的类别列表
title 产品名称
Price 价格
salesRank 销售排名信息
related 相关产品(也已购买,也已查看,一起购买,已查看后购买)
Brand 品牌

常用数据集如下:

  1. Display Advertising Challenge挑战的criteo数据集
  2. 淘宝数据集
  3. 亚马逊数据集

对于特征编码,举个例子:[weekday=Friday, gender=Female, visited_cate_ids={Bag,Book}, ad_cate_id=Book], 这种情况一般是通过one-hot的形式对其编码, 转成系数的二值特征的形式。但是这里我们发现一个visted_cate_ids,也就是用户的历史商品列表。对于某个用户来讲,这个值是个多值型的特征,而且还要知道这个特征的长度不一样长,也就是用户购买的历史商品个数不一样多,这个显然。这个特征的话,我们一般是用到multi-hot编码,也就是可能不止1个1了,有哪个商品,对应位置就是1.

注意一点 上面的特征里面没有任何的交互组合,也就是没有做特征交叉。这个交互信息交给后面的神经网络去学习。

基线模型

这里的base模型,就是Embedding&MLP的形式,没错,DIN网络的基准也是他,只不过在这个的基础上添加了一个新结构(注意力网络)来学习当前候选广告与用户历史行为特征的相关性,从而动态捕捉用户的兴趣。

基准模型的结构相对比较简单,分为三大模块:Embedding layer,Pooling & Concat layer和MLP,具体的结构如下:
在这里插入图片描述

Embedding layer

这个层的作用是把高维稀疏的输入转成低维稠密向量,每个离散特征下面都会对应着一个embedding词典,维度是 D × K D \times K D×K,这里的 D D D表示的是隐向量的维度, K K K表示的是当前离散特征的取值个数。

以weekday特征为例:假设某个用户的weekday特征就是周五,化成one-hot编码,就是[0,0,0,0,1,0,0],这里如果再假设隐向量维度是D,那么这个特征对应的embedding词典是一个 D × 7 D \times 7 D×7的一个矩阵(每一列代表一个embedding,7列正好7个embedding向量,对应周一到周日)。那么该用户这个one-hot向量经过embedding层之后会得到一个 D × 1 D \times 1 D×1的向量,也就是周五对应的那个embedding(就是 e m b e d d i n g m a t r i x ∗ [ 0 , 0 , 0 , 0 , 1 , 0 , 0 ] T embedding \quad matrix * [0,0,0,0,1,0,0]^T embeddingmatrix[0,0,0,0,1,0,0]T,其实也就是直接把embedding矩阵中one-hot向量为1的那个位置的embedding向量拿出来。)这样就得到了稀疏特征的稠密向量了。

其他离散特征也是同理,只不过上面那个multi-hot编码的那个,会得到一个embedding向量的列表,因为他开始的那个multi-hot向量不止有一个是1,这样乘以embedding矩阵,就会得到一个列表了。通过这个层,上面的输入特征都可以拿到相应的稠密embedding向量。

Pooling layer and Concat layer

pooling层的作用是将用户的历史行为embedding这个最终变成一个定长的向量,因为每个用户历史购买的商品数是不一样的,也就是每个用户multi-hot中1的个数不一致。这样经过embedding层,得到的用户历史行为embedding的个数不一样多,也就是上面的embedding列表不一样长,即每个用户的历史行为特征拼起来就不一样长了。而后面如果加全连接网络时,需要定长的特征输入。所以往往用一个pooling layer先把用户历史行为embedding变成固定长度(统一长度):
e i

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值