热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

推荐系统_推荐系统之用户兴趣建模DIEN论文解读

篇首语:本文由编程笔记#小编为大家整理,主要介绍了推荐系统之用户兴趣建模-DIEN论文解读相关的知识,希望对你有一定的参考价值。

篇首语:本文由编程笔记#小编为大家整理,主要介绍了推荐系统之用户兴趣建模-DIEN论文解读相关的知识,希望对你有一定的参考价值。




0. 说在前面


这篇论文距发表已经有一段时间了,但作为引入用户时序信息中提取用户兴趣的经典思路,在一些技术细节上还是有必要学习借鉴下。


个人心得:





  1. 用户行为可视为序列特征(相对于DIN的改进)



  2. GRU / LSTM隐变量 - 通过用户行为洞悉背后的兴趣



  3. Attention - 捕捉不同时间点的用户兴趣与当前推荐物品的相关性,得到用户对该推荐物品的最近兴趣


https://arxiv.org/pdf/1809.03672.pdf


原文代码:


https://github.com/mouna99/dien


1. 背景


在商品推荐场景中,用户的兴趣是随时间发生变化的。目前工业界主流的推荐算法一般都是将用户的行为表示作为兴趣,缺乏对兴趣建模的专门方法。


为了实现对用户的兴趣进行建模,alibaba提出了DIEN(Deep Interest Evolution Network)模型。这篇论文在DIN(Deep Interest Network)的基础上,提出了两个主要创新点:





  1. 引入了用户的兴趣序列,并对兴趣序列进行建模



  2. 对用户的兴趣变化进行建模


相对应的,论文在模型中嵌入了如下两层结构:





  1. 兴趣抽取层,通过用户购买序列抽取用户兴趣的抽象表示



  2. 兴趣演化层,建模表示用户的兴趣变化


通过计算待推荐候选物品与用户最近兴趣的相关程度,并结合用户特征及上下文特征,得到最终的推荐结果。


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处理用户行为序列方法如下



推荐系统之用户兴趣建模-DIEN论文解读

其实就是标准的GRU计算方法,通过GRU门控单元对用户历史信息进行归纳,对当前信息进行吸收,并得到用户的隐藏状态。这里的隐藏状态,即可抽象为用户当前的兴趣,即公式(5)中的


2.3 兴趣演化层


兴趣演化层将兴趣抽取层计算得到的用户序列中每个时刻的兴趣作为输入,通过计算与当前待推荐物品的相关性,得到用户对待推荐物品的兴趣演化,进而得到用户最近的与推荐物品相关的兴趣。具体的实现方法,论文通过对GRU隐状态引入attention机制,来计算不同兴趣对待推荐商品的权重



推荐系统之用户兴趣建模-DIEN论文解读

上式
为待推荐物品的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中,计算不同历史时刻的用户兴趣对待推荐物品的权重,进而得到当前时刻用户对待推荐推荐物品的兴趣。




推荐阅读
  • 构建高性能Feed流系统的设计指南
    随着移动互联网的发展,Feed流系统成为了众多社交应用的核心组成部分。本文将深入探讨如何设计一个高效、稳定的Feed流系统,涵盖从基础架构到高级特性的各个方面。 ... [详细]
  • 本文将详细介绍如何配置并整合MVP架构、Retrofit网络请求库、Dagger2依赖注入框架以及RxAndroid响应式编程库,构建高效、模块化的Android应用。 ... [详细]
  • [编程题] LeetCode上的Dynamic Programming(动态规划)类型的题目
    继上次把backTracking的题目做了一下之后:backTracking,我把LeetCode的动态规划的题目又做了一下,还有几道比较难的Medium的题和Hard的题没做出来,后面会继续 ... [详细]
  • 深入解析轻量级数据库 SQL Server Express LocalDB
    本文详细介绍了 SQL Server Express LocalDB,这是一种轻量级的本地 T-SQL 数据库解决方案,特别适合开发环境使用。文章还探讨了 LocalDB 与其他轻量级数据库的对比,并提供了安装和连接 LocalDB 的步骤。 ... [详细]
  • 尤洋:夸父AI系统——大规模并行训练的深度学习解决方案
    自从AlexNet等模型在计算机视觉领域取得突破以来,深度学习技术迅速发展。近年来,随着BERT等大型模型的广泛应用,AI模型的规模持续扩大,对硬件提出了更高的要求。本文介绍了新加坡国立大学尤洋教授团队开发的夸父AI系统,旨在解决大规模模型训练中的并行计算挑战。 ... [详细]
  • Redis管理工具的安装与使用指南
    本文详细介绍了两款流行的Redis管理工具——Another Redis Desktop Manager 和 Redis Desktop Manager 的安装步骤及基本使用方法,旨在帮助用户更高效地管理和操作Redis数据库。 ... [详细]
  • 2023年,Android开发前景如何?25岁还能转行吗?
    近期,关于Android开发行业的讨论在多个平台上热度不减,许多人担忧其未来发展。本文将探讨当前Android开发市场的现状、薪资水平及职业选择建议。 ... [详细]
  • 优雅地记录API调用时长
    本文旨在探讨如何高效且优雅地记录API接口的调用时长,通过实际案例和代码示例,帮助开发者理解并实施这一技术,提高系统的可观测性和调试效率。 ... [详细]
  • 本作业探讨了矩阵链乘法的问题,包括问题定义、解析过程、算法设计思路及性能分析。通过将矩阵链分解为多个子问题,旨在找到最小化基本运算次数的方法。 ... [详细]
  • 使用IntelliJ IDEA高效开发与运行Shell脚本
    本文介绍了如何利用IntelliJ IDEA中的BashSupport插件来增强Shell脚本的开发体验,包括插件的安装、配置以及脚本的运行方法。 ... [详细]
  • 深入解析Nacos服务自动注册机制
    本文将探讨Nacos服务自动注册的具体实现方法,特别是如何通过Spring事件机制完成服务注册。通过对Nacos源码的详细分析,帮助读者理解其背后的原理。 ... [详细]
  • 探索将Python Spyder与GitHub连接的方法,了解当前的技术状态及未来可能的发展方向。 ... [详细]
  • 本文总结了一次针对大厂Java研发岗位的面试经历,探讨了面试中常见的问题及其背后的原因,并分享了一些实用的面试准备资料。 ... [详细]
  • 如何高效解决Android应用ANR问题?
    本文介绍了ANR(应用程序无响应)的基本概念、常见原因及其解决方案,并提供了实用的工具和技巧帮助开发者快速定位和解决ANR问题,提高应用的用户体验。 ... [详细]
  • 说明Python教程正在编写中,欢迎大家加微信sinbam提供意见、建议、纠错、催更。drymail是一个邮件发送库,封装了Python的smtplib ... [详细]
author-avatar
淀死鈊
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有