- 深度学习推荐系统之deepcrossing简单介绍与代码实现
- 深度学习推荐系统之wide & deep介绍和代码实现
- 深度学习推荐系统之deepFM介绍和代码实现
- NFM(2017)结构与原理简介(代码)
阅读前思考
DIN模型在工业上的应用还是比较广泛的, 大家可以自由去通过查资料看一下具体实践当中这个模型是怎么用的? 有什么问题?比如行为序列的制作是否合理, 如果时间间隔比较长的话应不应该分一下段? 再比如注意力机制那里能不能改成别的计算注意力的方式会好点?(我们也知道注意力机制的方式可不仅DNN这一种), 再比如注意力权重那里该不该加softmax? 这些其实都是可以值的思考探索的一些问题,根据实际的业务场景,大家也可以总结一些更加有意思的工业上应用该模型的技巧和tricks,欢迎一块讨论和分享。
前言
本文我们学习一下阿里深度兴趣网络模型DIN(Deep Interest Network for Click-Through Rate Prediction),论文原文:《Deep Interest Network for Click-Through Rate Prediction》
前面文章我们介绍了几个模型:wide&deep,deepFM,NFM等深度学习模型(这里统称Embeding&MLP模型),在这些方法中,你会发现这类Embeding&MLP模型对于推荐任务一般有着差不多的固定处理套路,就是大量稀疏特征先经过embedding层, 转成低维稠密的,然后进行拼接,最后喂入到多层神经网络中去。 这些模型在这种个性化广告点击预测任务中存在的问题就是**无法表达用户广泛的兴趣**,因为这些模型在得到各个特征的embedding之后,就蛮力拼接了,然后就各种交叉等。为此阿里妈妈算法团队提出了一个新颖的模型:DIN模型通过引入Attention捕捉用户的兴趣点,用来表示用户对某个商品的历史行为的兴趣,用户的Embedding向量随着候选商品的变化而变化,有效的提升了模型的表达能力。
> Attention机制是模仿人类注意力而提出的一种解决问题的办法,简单地说就是从大量信息中快速筛选出高价值信息,即一种将内部经验和外部感觉对齐从而增加部分区域的观察精细度的机制
在具体分析DIN模型之前, 我们先介绍两块小内容,一个是DIN模型的数据集和特征表示, 一个是上面提到的之前深度学习模型的基线模型:
数据特征
我们先来看一看阿里的展示广告系统中用到哪些特征。主要分为4个特征组,如图1所示,1)画像特征、2)统计特征、3)行为序列特征、4)上下文特征:
图1
用户端的特征主要包含画像特征和多组行为序列特征;商品端主要包含画像特征;上下文特征包含时间、网络、地点、终端等特征。处理类别特征主要采用Embedding方式,连续特征采用分桶、归一化、或log等方式进行转化。
基准模型
基准模型就是比较常见的多层神经网络,即:(1)先对每个特征进行Embedding操作,得到一系列Embedding向量;(2)将不同Group的特征拼接组合起来之后得到一个固定长度的用户Embedding向量,和候选商品Embedding向量;(3)然后将(2)中的向量输入后续的全连接网络,最后输出pCTR值。具体网络结构见图2:
图2
从基准模型的结构图中可以看出,无论候选商品是什么,用户的Embedding值均不会发生改变。用户的历史行为中的商品Embedding数据对用户的Embedding的贡献力度是一样的,然而这与实际情况并不符合,因为每个用户的兴趣是多样性的。
DIN模型原理介绍
DIN模型在基准模型的基础上,增加了注意力机制,就是模型在对候选商品预测的时候,对用户不同行为的注意力是不一样的。“相关”的行为历史看重一些,“不相关”的历史甚至可以忽略。图5展示了DIN模型的网络结构图。DIN的模型结构中增加了 Activation Unit模块,该模块主要提取当前候选商品与历史行为中的商品的权重值。输入包括两个部分,一个是原始的用户行为Embedding向量、商品Embedding向量;另外一个是两者Embedding向量经过外积计算后得到的向量,和两者Embedding向量差值得到的向量。文章指出这种方式有利于保留更丰富的信息。
这一模型的核心思路为:对于每一个用户,针对不同的广告有不同的向量表示。
跟基准模型比较可以发现,User Behaviors部分的计算添加了Activation Unit部分,我们仔细分析这一部分可以看到:
1)Activation Unit部分融合了用户行为向量Good和广告特性向量Condidate ad,经过一个复杂的网络计算出各个行为点的权重向量Good i Weight。
User特征向量与Ad特征向量输入到网络中,经过Out Product形成交互向量,并结合User特征向量与Ad特征向量,concat成一个完整的向量,最终经过DNN部分,输出Weight值。
对应的函数表达为:
2)Activation Unit部分输出的Weight值与原始的Good向量进行点乘操作,融合成一个带权重的行为向量,经过Sum pooling计算形成统一的行为向量。
3)接下来将四种特征的向量concat成一个长向量,输入到DNN部分,最终计算出output值。