作者:淀死鈊 | 来源:互联网 | 2023-09-14 21:17
篇首语:本文由编程笔记#小编为大家整理,主要介绍了推荐系统之用户兴趣建模-DIEN论文解读相关的知识,希望对你有一定的参考价值。
0. 说在前面
这篇论文距发表已经有一段时间了,但作为引入用户时序信息中提取用户兴趣的经典思路,在一些技术细节上还是有必要学习借鉴下。
个人心得:
-
-
GRU / LSTM隐变量 - 通过用户行为洞悉背后的兴趣
-
Attention - 捕捉不同时间点的用户兴趣与当前推荐物品的相关性,得到用户对该推荐物品的最近兴趣
https://arxiv.org/pdf/1809.03672.pdf
原文代码:
https://github.com/mouna99/dien
1. 背景
在商品推荐场景中,用户的兴趣是随时间发生变化的。目前工业界主流的推荐算法一般都是将用户的行为表示作为兴趣,缺乏对兴趣建模的专门方法。
为了实现对用户的兴趣进行建模,alibaba提出了DIEN(Deep Interest Evolution Network)模型。这篇论文在DIN(Deep Interest Network)的基础上,提出了两个主要创新点:
-
-
相对应的,论文在模型中嵌入了如下两层结构:
-
兴趣抽取层,通过用户购买序列抽取用户兴趣的抽象表示
-
通过计算待推荐候选物品与用户最近兴趣的相关程度,并结合用户特征及上下文特征,得到最终的推荐结果。
2. 模型架构
本节详解介绍DIEN的模型架构。重点讲述关键的兴趣抽取层和兴趣演化层。
2.1 模型架构
DIEN的主要结构与DIN类似,这里主要优化了用户行为序列User behavior Sequence。为了实现对用户兴趣的建模,DIEN将用户行为序列部分设计为了三层,分别为用户行为层behavior layer, 兴趣抽取层 Interest Extractor Layer,以及兴趣演化层 Interest Evolving Layer。其中,用户行为层为模型输入层,输入用户对物品的行为序列;兴趣抽取层,处理时序序列,对用户兴趣进行建模;兴趣演化层,提取与待推荐物品最相关的用户最近兴趣。
2.2 兴趣抽取层
既然用户行为层输入的是用户的行为序列,那么,很自然而然的想到用自然语言处理领域中的序列模型来对用户的行为序列进行建模,并利用模型内部隐式状态来表征用户的兴趣。
这里,论文方案使用的是GRU来对用户行为embedding进行处理。其实,将GRU替换为LSTM/RNN也都可行,本质上都是对序列数据进行建模预测。相比于LSTM,GRU的结构更简单,参数更少,能更快收敛。而对比朴素的RNN,GRU能够处理更长的序列数据,有更好的记忆能力。论文利用GRU处理用户行为序列方法如下
其实就是标准的GRU计算方法,通过GRU门控单元对用户历史信息进行归纳,对当前信息进行吸收,并得到用户的隐藏状态。这里的隐藏状态,即可抽象为用户当前的兴趣,即公式(5)中的
。
2.3 兴趣演化层
兴趣演化层将兴趣抽取层计算得到的用户序列中每个时刻的兴趣作为输入,通过计算与当前待推荐物品的相关性,得到用户对待推荐物品的兴趣演化,进而得到用户最近的与推荐物品相关的兴趣。具体的实现方法,论文通过对GRU隐状态引入attention机制,来计算不同兴趣对待推荐商品的权重
。
上式
为待推荐物品的embedding表示,通过与用户各个时刻的兴趣
(即兴趣抽取层的输出)关联,并归一化到0-1的取值区间,进而得到每个时刻兴趣的权重。
有了每个时刻用户兴趣的attention,如何对用户兴趣推演得到与推荐物品相关的用户最近兴趣?论文提出了注意力更新门控单元AUGRU(GRU with attentional update gate)。
AUGRU对GRU更新机制进行了改进,重点引入了attention机制。在AUGRU中,计算得到的更新因子
,需要乘上一个attention权重因子,作为最终的更新因子,进而应用到隐状态的计算过程中,得到当前时刻的隐状态。
2.4 推理
DIEN的推理层与DIN的结构基本没有差别,也是当前主流的推荐网络模型的方案。将兴趣演化层的输出(用户当前时刻对待推荐物品的兴趣),待推荐物品embedding向量表示,以及用户的向量表示和环境上下文特征级联,送入全连接层进行推理,得到最终的模型推荐结果。
在优化器的选择上,论文也没有做太多设计,选择常用的SGD/ADAM均可。
3. 效果
既然有论文发表,效果自然比当前主流模型要好,因此在此就不过多赘述。但是在工业界,通常需要在模型提升效果和维护成本中进行权衡,可以看到,DIEN相比于经典的wide&deep具有一定的提升,然而毋庸置疑,模型复杂度也相对应的高出了很多,因此需要视情况来选择模型。
4. 总结
本文对DIEN模型进行了介绍,重点阐述了模型的设计要点,包括兴趣抽取层和兴趣演化层。兴趣抽取层使用RNN(这里使用的是GRU)对用户行为序列进行建模,抽取用户兴趣;兴趣演化层通过AUGRU将Attention机制嵌入GRU中,计算不同历史时刻的用户兴趣对待推荐物品的权重,进而得到当前时刻用户对待推荐推荐物品的兴趣。