推荐系统用户长序列建模

目录

一、背景

二、技术方案

2.1 DIN

简介

论文细节

优缺点

2.2 DINE

简介

论文细节

2.3 MIMN

简介

论文细节

2.4 SIM

简介

论文细节

优缺点

2.5 DSIN

简介

论文细节


一、背景

阿里巴巴的精排模型从传统lr,到深度学习,再到对用户长历史序列进行建模的演变。传统的深度模型(如GwEN),一般采用Embedding&MLP的形式,它会将用户的所有兴趣信息转化为一个定长的向量。但用户的兴趣是多样的,定长的向量可能不足以表达。而且评估用户对于不同资源的兴趣时,应该使用不同的行为(判断用户是否喜欢衣服,应该关注用户对衣服的历史行为与兴趣程度;判断用户是否喜欢包包,则关注用户对包包的历史行为)。

因此盖坤团队提出DIN,从用户行为中提取与目标商品相关的多峰兴趣;DIN模型更多是从挖掘多峰兴趣角度出发,没有考虑行为的序列信息,兴趣的变化也能给模型提供信息,因此有了DIEN;这两个模型后,用户兴趣建模划分出了2个研究分支,一个是用户长期兴趣建模(MIMN、SIM),该分支依然是盖坤团队主导的;另一个分支则是从session的角度,对行为做进一步划分(DSIN)

二、技术方案

2.1 DIN

简介

如上左图是传统的Embedding&MLP模型,处理行为数据采用sum-pooling得到定长的embedding。

这里行为的定义可以是广告点击、商品购买、加购物车等,每个行为节点由3个embedding拼接组成(商品ID、商品类别ID、商铺ID)

右图是DIN的模型结构,作者将每个行为节点与候选节点做交叉得到权重(即途中的activation unit),再通过weighted-sum-pooling的模型得到行为的embedding,这样,对于每个候选商品,提取的用户行为embedding是不同的。

作者在实验部分可视化了activation unit的结果,和候选商品相关的行为节点会贡献较大的权重,符合认知

论文细节

这种行为兴趣的建模方式,在实际应用时会遇到一些问题

1、行为数据的参数量巨大(商品ID可能就百/千万),模型容易过拟合;引入L2正则,参数量大训练缓慢

2、针对不同的候选节点,用户的兴趣embedding不同,波动大会影响MLP部分的模型收敛

解决方案

1、提出Mini-batch Aware Regularization。L2正则缓慢的原因是每个mini-batch会对模型的所有参数做正则,但其实每个minibatch只使用了部分的商品ID。因此更好的做法是,每个mini-batch只对使用到的商品ID计算L2正则。实验证明,通过这种方式,能有效缓解过拟合现象,同时确保训练效率

2、作者针对MLP部分的激活函数(PReLU)做优化,提出更具泛化性的Dice,这种激活函数可以根据输入数据的均值和方差,动态调整函数形态。在后续的论文中,模型也延用了这种激活函数

优缺点

1、该模型能动态获取用户的多种兴趣。但没有考虑行为的先后关系(序列)、兴趣的变化过程等

2、候选商品与每个行为节点计算权重,仅适用较短的行为序列(论文中采用14天的曝光日志,每个用户平均35个行为)

3、对比传统的Embedding&MLP的模型,计算复杂度提升。上线时也做了一些GPU-CPU的计算优化

2.2 DINE

简介

针对DIN没有考虑行为先后关系、兴趣变化过程的问题,盖坤团队继续优化模型结构,引入GRU提取行为序列中的信息,并结合DIN中目标AD与行为节点计算权重的模式(Attention),提出AUGRU进一步挖掘兴趣变化中的信息

论文细节

Interest Extractor Layer

Interest Extractor Layer ,也就是兴趣提取层。用户行为是用户兴趣的载体,兴趣也会随着用户采取某个行动之后改变。因此要对兴趣建模,首先要对行为之间的依赖关系进行建模。考虑到效率与性能,文中使用 GRU 对行为之间的依赖关系进行建模。GRU 的公式如下:

由于 GRU 的特性,候选广告商品是否被点击的这个 label 在反向梯度传播的过程中仅仅能够对 GRU 的最终状态形成有效的监督作用,而对于中间的行为序列隐含状态缺少有效的监督信息。因此,为了使得中间的隐含能够有效的学习兴趣信息,使用下一个时刻的行为来监督当前隐含状态的学习。为此,选择真实的下一个商品作为正样本,选择其他商品作为负样本,进而计算一个二分类的辅助损失函数:

其中 ht表示第 t 个隐含状态,eb表示有真实点击行为的正样本,eb^表示没有点击行为的负样本。

引入损失函数的好处有:

  1. 有助于 GRU 每个隐含状态学习到兴趣表示。

  2. 有助于降低长序列建模中梯度反向传播的难度。

  3. 辅助损失函数还有助于嵌入层学习更多的语义信息,得到更好的嵌入矩阵。

Interest Evolving Layer

Interest Evolving Layer,如上图中红色区域所示,结合了注意力机制的局部激活能力以及GRU的序列学习能力来实现对与候选广告商品相关的兴趣演化过程建模。

具体而言,需要对用户兴趣与候选商品计算 attention:

GRU with attention update gate(AUGRU),作者提出了增加了attentional update gate的GRU结构实现attention机制和GRU的无缝结合:

2.3 MIMN

简介

DIN、DIEN处理的序列长度都有限(最大为150),而离线实验验证,采用的行为序列越长,模型收益越大。因此意愿上是期望使用更长(1000)的行为序列(long-life),但长的行为序列会带来两个问题

1、存储限制:天猫广告业务上,6亿用户,14天行为序列(最大长度150),消耗1TB的存储,如果序列长度放开到1000,预计消耗6TB(估计也用不到,毕竟大序列的可能都属于长尾)

2、时延限制:精排一般是10ms,DIEN上线已经达到14ms,如果继续拉大序列长度,预计时延会达到30ms

针对上述两个问题,作者开始了优化MIMN的优化之路

论文细节

计算分离

维护一个离线的用户兴趣中心,存储当前时刻的兴趣embedding结果(存储序列消耗资源大,存不下),每次有新的用户行为进来时更新embedding。广告请求来时,给UIC发请求,获取兴趣embedding供线上计算。

长序列兴趣提取

UIC的解决方案会引入一个新问题,如果保存当前时刻的embedding,并且这个结果是能增量更新的?作者借助记忆网络NTM来处理这个问题。整体模型结构如下,左下角部分为行为序列处理结构,Controller、Read Head、Witer Head、M均为NTM的原始模型结构,Memory Induction Unit为作者创新的部分

离线计算时,左下角的结构能得到当前时刻每个用户的行为序列特征S,兴趣矩阵M,并存储在TAIR存储系统中。线上请求到来时,查询TAIR里对应用户的特征序列和兴趣矩阵,并将候选AD的embedding,输入模型的Controller部分,继而提取相关的兴趣和序列结果,作为MLP模型输入的一部分

论文重点介绍了NTM、Memory Induction Unit两部分

1、NTM

这是Google于14年提出的记忆网络结构,该结构由Controller、Memory两部分构成,Memory存储了一个记忆矩阵 。这里,作者把矩阵的每一行想象成一种兴趣类型。Controller可以想象成MLP/LSTM等结构

整个模型包括两种操作

(1)

  • 将外部输入经过Controller得到读操作头

  • 计算存储矩阵中每一行结果(论文里作者当作用户某种类型的兴趣)与读操作的相关性,作为特征的权重,即

(2)写操作:离线计算,初始训练/用户新增行为时用

2、创新点

(1)存储利用的归一化(Memory Utilization Regularization)

这是针对写操作的一种优化。行为序列中的Item也存在马太效应,大量热门item的进入,导致写操作存在大量相同的输入(写操作头相同),此时存储矩阵中的某些行被频繁更新,某些行却被忽略。作者提出优化写操作头的构造方法

具体的,假设原来的写操作权重为,作者引入累积更新权重、对写操作头做了新一层的封装,如下:

(2)Memory Induction Unit(MIU)

优缺点

1、时延:提出计算分离的模式,使得模型处理长序列(序列长度为1000)都不存在时延的压力,如下图

2、存储:提出NTM的结构,存储系统只需要为每个用户维护存储矩阵Mt和序列矩阵S,不需要单独保存行为序列,存储量从6T转为2.7T

3、效果:计算分离后,兴趣的提取无法很好的和候选AD/商品交互(仅通过存储矩阵实现交互),可能会对效果有损

4、同步:时序模块的结果和ctr模型是异步更新的,行为序列频繁更新可能导致模型效果波动,需要有一定的回滚机制

5、适用性:当用户行为丰富且行为更新频率没有远高于请求时,可以使用该模型。这是因为该模型时针对长序列行为建模的,行为数据不丰富当然不必使用。而如果用户行为更新频繁,ctr模型都来不及更新,可能会使预测结果产生波动

6、其他:作者提到双11时虽然行为数据丰富,但用户行为特殊,提取出来做特征效果反而下降

2.4 SIM

简介

MIMN虽然通过计算分离的方式确保了时延方面无压力,但也带来了更新频率不一致,行为序列无法与候选AD更好的交互等问题。线上使用时,作者发现当序列长度超过1k时,MIMN效果会变差(也是因为无法与候选AD交互)。

基于这些问题,作者干脆直接模仿推荐系统多阶段过滤的方法,第一阶段通过相对粗略的搜索模式,提取行为序列中与候选AD较相关的节点,第二阶段通过精准搜索的模式,得到序列与候选AD的关系,并形成embedding供MLP使用。这个模型能吃下的最大序列长度为54000,能满足工业界提取长期用户兴趣的需求。

论文细节

泛搜索结构(第一阶段)

如上图左侧所示,作者的重点是提取长期行为中(短期的默认全取,论文的工业数据集中短期指14天内的行为),与候选商品相关的行为节点。作者提出两种匹配方法

1、Hard Search:核心思想是只提取和候选商品相同类目的行为信息。具体的,在线维护一个“用户ID-商品类目ID-行为商品ID”的双层索引数据。请求到来时,直接检索对应类目的行为商品序列

实际业务中,发现两种搜索模式的效果并没有太大差异,而性能上,明显Hard Search更有优势,因此线上采用Hard Search(存储消耗22TB。。。)

精准搜索结构(第二阶段)

该阶段,模型的输入分为4部分,用户画像,候选商品,短期行为序列和筛选出的长期行为序列,短期行为序列的信息提取采用DIEN的结构。而筛选的长期行为序列 ,因为行为发生时间与当前有一定距离,作者单独使用的attention结构去提取特征

优缺点

1、从实验看,SIM基本能满足工业界对用户长期兴趣提取的要求,对比DIEN,模型在对长期兴趣的提取效果是显著的。如下左图,横坐标表示的是用户当前时刻点击了某类别商品与上一次点击该类别商品的时间差,曲线表示样本分布情况,可以看到点击样本的 基本在14天以内。直方图表示对比DIEN,SIM的AUC提升情况,可以看到对于命中长期兴趣的点击样本,SIM的效果远优于DIEN

2、时延方面,SIM因为要处理1w+的序列信息,性能比MIMN要弱一些,但18ms的时延也基本满足实时性的要求

3、SIM号称能够处理的序列长度是54000,对于阿里广告业务而言,相当于180天的广告行为,已基本覆盖用户长期兴趣建模所需的时间长度

2.5 DSIN

简介

这篇论文没有从提取长期行为的角度出发,而是在时间间隔上做文章。DIEN直接将14天的行为无差别的拼接,没有考虑session的概念,但是用户的行为,在不同的Session中有明显差异。如下图,作者将行为间隔不超过30min的部分归纳为一个session,发现,同一个session内,用户点击的商品具有明显的指向性,而不同session间,用户的点击行为有明显差异

论文细节

针对这一现象,作者将行为划分为多个session,并提出兴趣抽取、兴趣交互(序列)、兴趣激活层3部分

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/21112.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Jmeter处理接口签名sign

写接口脚本的时候,很多接口涉及到签名,今天介绍下用Jmeter编写签名脚本的方法。 举个例子,开启红包接口,请求方式为post POST /v1/api/red/open json请求参数 { "red_id":1, "timestamp":"166703384…

iOS描述文件(.mobileprovision)一键申请

转载:iOS描述文件(.mobileprovision)一键申请 在主界面上点击描述文件按钮。 新建ios描述文件 然后点击新建,然后输入描述文件名称,描述文件名称字符和数字,自己好辨识就可以。然后选择描述文件类型,再选择bundle I…

Spring 拦截器

目录 今日良言:心若有所向往,何惧道阻且长 一、Spring 拦截器 1.拦截器简介 2.实现自定义拦截器 今日良言:心若有所向往,何惧道阻且长 一、Spring 拦截器 1.拦截器简介 Spring Boot 拦截器是面向切面编程-----AOP 的具体实现…

运动控制轴单位设置(H5U PLC)

H5U PLC运动控制相关应用,请参看下面博客文章 10轴总线控制(汇川H5UPLC+总线伺服编程应用)_RXXW_Dor的博客-CSDN博客H5UPLC控制总线伺服的详细配置过程,可以参看下面的文章链接:汇川H5U PLC通过EtherCAT总线控制SV660N和X3E伺服_ethercat总线伺服如何控制_RXXW_Dor的博客-C…

【K8s】openEuler23操作系统安装Docker和Kubernetes

openEuler23操作系统安装 服务器搭建环境随手记 文章目录 openEuler23操作系统安装前言:一、前期准备(所有节点)1.1所有节点,关闭防火墙规则,关闭selinux,关闭swap交换,打通所有服务器网络&am…

SQL语法

创建基本表 创建基本表要对表进行命名&#xff0c;定义表的每个列&#xff0c;定义表的完整性约束条件&#xff0c;我们使用CREATE TABLE语句创建基本表 CREATE TABLE <表名> (<列名> <数据类型> [DEEAULT<缺省值>] [列级约束定义], <列名> &l…

Netty实战(一)

Nett的概念及体系结构 第一章 Java网络编程1.1 Java NIO1.2 选择器 第二章 Netty是什么2.1 Netty简介2.2 Netty的特性2.2.1 设计2.2.2 易于使用2.2.3 性能2.2.4 健壮性2.2.5 安全性2.2.6 社区驱动 2.3 Netty的使用者2.4 异步和事件驱动2.4.1 异步2.4.2 异步和伸缩性 第三章 Net…

Qt文件系统源码分析—第一篇QFile

深度 本文主要分析Windows平台&#xff0c;Mac、Linux暂不涉及 本文只分析到Win32 API/Windows Com组件/STL库函数层次&#xff0c;再下层代码不做探究 本文QT版本5.15.2 类关系图 QTemporaryFile继承QFile QFile、QSaveFile继承QFileDevice QFileDevice继承QIODevice QIODev…

LayerZero有何发展潜力?空投热潮和大额融资双重加持

前言 近期Arbitrum的如愿空投再次点燃了市场「刷空投」的热情&#xff0c;除了ZK系的zkSync、Starknet及Scroll&#xff0c;也有部分用户将注意力投向了估值30亿美元的LayerZero。而 LayerZero刚刚完成的1.2亿美元B轮融资也让其市场热度持续攀升&#xff0c;在「空投热潮」及「…

华为OD机试真题 Java 实现【数字加减游戏】【2023Q1 200分】

一、题目描述 小明在玩一个数字加减游戏&#xff0c;只使用加法或者减法&#xff0c;将一个数字s变成数字t。 每个回合&#xff0c;小明可以用当前的数字加上或减去一个数字。 现在有两种数字可以用来加减&#xff0c;分别为a&#xff0c;其中b没有使用次数限制。 请问小明…

dwg格式转换pdf,教大家几个简单方法

dwg格式转换pdf&#xff0c;今天教大家几个简单方法吧。因为有很多小伙伴私信小编&#xff0c;询问关于CAD格式转换的问题。我们知道&#xff0c;dwg是CAD格式的一种&#xff0c;只能使用CAD软件进行打开&#xff0c;这非常不方便。特别是在需要在手机或其他平台查看时&#xf…

第12章:视图

一、视图 1.常见的数据库对象 ①表table&#xff1a;表是存储数据的逻辑单元&#xff0c;行和列形式存在。列是字段&#xff0c;行是记录。 ②数据字典&#xff1a;系统表&#xff0c;存放数据库相关信息的表。系统表的数据通常是数据库系统维护。 ③约束constraint&#x…

PPT背景图片怎么设置?4个详细教程在这!

案例&#xff1a;PPT背景图片怎么设置&#xff1f; 【因为论文答辩&#xff0c;最近需要制作PPT&#xff0c;昨晚之后感觉有点单调&#xff0c;我想设置一个背景图片&#xff0c;让我的PPT看起来更有风格&#xff0c;请问大家是怎么设置PPT背景图片的呢&#xff1f;】 PPT背景…

软件测试技术课程:软件测试流程

软件测试流程如下&#xff1a; 测试计划测试设计测试执行 单元测试集成测试确认测试系统测试验收测试回归测试验证活动 测试计划 测试计划由测试负责人来编写&#xff0c;用于确定各个测试阶段的目标和策略。这个过程将输出测试计划&#xff0c;明确要完成的测试活动&#x…

ipa怎么装到苹果手机

下面介绍ipa怎么装到苹果手机&#xff1f; 方法/步骤 进入手机上的设置&#xff0c;如下图所示&#xff1a; 在设置页面中&#xff0c;点击进入通用&#xff0c;如下图所示&#xff1a; 进入通用页面后&#xff0c;点击页面上的描述文件&#xff0c;如下图所示&#xff1a; …

【大数据】Hadoop总结

本文对于Hadoop中的HDFS和MapReduce的相关面试重点进行了总结&#xff0c;下篇将介绍调优、数据倾斜等进阶知识。 Hadoop总结 一、概述1. Hadoop特性2. HDFS结构HDFS 架构 二、HDFS分布式文件系统1 概述2. HDFS存储数据架构图NameNodeDataNode 3 HDFS优点4 HDFS缺点&#xff08…

MySQL:存储过程与函数、视图

一、学习目标 掌握如何创建存储过程掌握如何创建存储函数熟悉变量的使用方法熟悉如何定义条件和处理程序了解光标的使用方法掌握流程控制的使用掌握如何调用存储过程和函数熟悉如何查看存储过程和函数掌握修改存储过程和函数的方法熟悉如何删除存储过程和函数掌握创建存储过程…

卷麻了,新来的00后实在是太卷了...

在程序员职场上&#xff0c;什么样的人最让人反感呢? 是技术不好的人吗?并不是。技术不好的同事&#xff0c;我们可以帮他。 是技术太强的人吗?也不是。技术很强的同事&#xff0c;可遇不可求&#xff0c;向他学习还来不及呢。 真正让人反感的&#xff0c;是技术平平&…

SpringBoot拦截器获取Request的body数据

1. 场景 自定义Token后&#xff0c;需要在拦截器中进行token验证。在验证的过程中需要读取HttpServletRequest的body部分数据进行验证。 2. 存在问题 如果直接配置拦截器进行urlPatterns拦截&#xff0c;并进行参数验证&#xff0c;在拦截器中获取request的输入流&#xff0c…

网易云商·七鱼智能客服自适应 ProtoStuff 数据库缓存实践

需求背景 目前&#xff0c;网易云商七鱼智能客服数据库缓存使用了 spring-data-redis 框架&#xff0c;并由自研的缓存组件进行管理。该组件使用 Jackson 框架对缓存数据进行序列化和反序列化&#xff0c;并将其以明文 JSON 的形式存储在 Redis 中。 这种方式存在两个问题&…