精通推荐算法6:用户行为序列建模 -- 总体架构

2024-05-30 22:28

本文主要是介绍精通推荐算法6:用户行为序列建模 -- 总体架构,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1 行为序列建模技术架构

身处目前这个信息爆炸的时代,用户在各推荐场景上有丰富的行为序列。将行为序列特征引入推荐算法中,有利于丰富特征工程体系、获得更立体和更全面的信息,同时可以表达用户兴趣演化过程,并捕获用户实时兴趣。目前主流推荐场景均已加入了用户行为序列建模,并提升了推荐模型准确性和用户体验。

用户行为序列(User Behavior Sequence,UBS)建模,主要包括特征工程序列建模,和长序列建模三大主题。特征工程是序列建模的基础,主要围绕有哪些特征、正反馈和负反馈、短期行为和长期行为,以及全场景建模等方向。序列建模则分为池化序列化两种方式,其中池化包括求和(Sum)/最大(Max)/平均(Mean)和基于注意力(Attention)两大类,序列化包括循环神经网络(Recurrent Neural Network,RNN)和Transformer网络两大类。长序列建模则用来捕获用户长期兴趣,可进一步提升序列建模的表达能力和准确性,包括离线法在线法两种方案,后文详细展开。用户行为序列建模的知识框架如下图所示。

行为序列建模在我的新书《精通推荐算法:核心模块+经典模型+代码详解》第五章中有详细讲解。详细请参见

《精通推荐算法:核心模块+经典模型+代码详解》(谢杨易)【摘要 书评 试读】- 京东图书

2 行为序列建模的意义

近几年用户行为序列建模,已经成为继特征交叉和表征学习后,推荐系统的另一大重点发力方向。行为序列建模可以丰富特征工程体系,引入更全面和更立体的信息,并捕获用户兴趣演化过程和实时兴趣倾向,为各推荐场景业务提升和用户体验优化起到了关键作用。

用户行为序列建模的意义十分重大,目前已经成为了推荐系统核心优化方向,也是推荐算法工程师的必备技能。其意义主要有:

(1) 丰富特征工程体系。特征工程是算法模型的基础,特征越丰富越精细,则模型获取的输入信息越多,最终预估也会越精准。用户行为序列,可以囊括点击、购买、点赞和收藏等正反馈信息,以及不喜欢和曝光未点击等负反馈信息。它由被行为(比如被点击)的物品ID,和其各种属性特征组成,比如物品的品牌ID、卖家ID和价格等。另外,行为序列既可以包括用户的短期行为,还可以包括长期行为。用户行为序列是推荐系统特征工程的重要组成部分,可以极大的丰富特征工程体系。

(2) 获得更立体的信息。与很多其他特征只是一个标量不同,行为序列可以理解为是一个向量,其信息更为立体。比如用户近7天的购买商品数,可以通过其近7天的购买行为序列推导出来。更重要的是,通过行为序列,可以清楚的知道用户在哪几天购买了,什么卖家、什么品牌的商品,其信息更为立体。同时,购买行为距离当前的远近,代表了用户不同的活跃度,普通标量特征难以对其精准表达,而行为序列则可以。

(3) 表达用户兴趣演化过程。用户的兴趣迁移有一定的内在逻辑和关联,比如用户购买了手机,通常会继续购买手机壳和贴膜等。通过用户行为序列,可以清晰的观测到这一变化过程,有利于捕获用户兴趣演化过程,从而更精准的预估其下一次购买行为。

(4) 捕捉用户实时兴趣。用户的点击和购买等行为,代表了其较强的兴趣倾向。用户点击了某件商品后,实时推荐与之相关的其他商品,通常能取得不错的效果。更重要的是,用户兴趣转瞬即逝,而且随时可能退出APP。因此捕获用户实时兴趣,并做出精准推荐十分重要。通过提升行为序列特征的实时性,有助于这一目标的达成。

用户历史点击过的各商品与候选商品相关性

3 行为序列建模的基本范式

行为序列建模,主要分为短序列建模和长序列建模两大研究方向。短序列建模主要有池化和序列化两种方案,如下:

(1) 池化。分为求和/最大/平均池化注意力池化两大类。求和/最大/平均池化,直接将行为序列特征向量,通过累加、求最大值和求平均等方法进行压缩,典型代表就是YouTubeDNN模型。这一方法十分简单,计算速度快,但缺少了与候选物品的特征交叉,无法做到“千物千面”,同时没有考虑不同行为重要性的差异。以DIN为代表的注意力池化,则先计算各历史行为与候选物品的相关性权重,然后再加权求和。通过这种方式,可以有效克服求和/最大/平均池化的上述缺点。

求和池化建模行为序列

DIN:注意力池化建模行为序列

(2) 序列化。其本质思想是通过序列模型来建模用户行为和兴趣的演化过程,与NLP文本序列有一定的共通之处。主要分为循环神经网络Transformer网络两大类。DIEN通过GRU网络(RNN的一种实现)建立了行为序列层、兴趣抽取层和兴趣进化层,从而建模用户行为之间的关联和演化过程。BST和DSIN等模型则利用Transformer网络来实现序列建模,从而解决GRU的长程梯度衰减和无法并行计算等问题。

DIEN:GRU循环神经网络建模行为序列

BST:Transformer建模行为序列

基于Transformer的强大抽取能力和并行计算能力,其已成为目前序列建模的事实标准,目前短序列建模方向,Transformer已经成为了主流。长序列建模则在短序列的基础上,进一步探索用户更长期的兴趣,其难点在于巨大的计算和存储消耗,以及由此导致的线上推理延迟。

提升行为序列长度对提升模型AUC十分重要!!!

长序列建模主要分为离线法和在线法两种方案,如下:

(1) 离线法。将长周期行为序列先离线建模好,在线请求时直接调用,可以大大减少模型耗时,这就是离线法的核心思想。其典型代表是MIMN模型,它以独特的UIC工程模块设计、NTM记忆网络和MIU记忆归纳单元,打响了工业界长序列建模的第一枪。离线法实现简单,但无法与候选物品特征交叉,难以做到“千物千面”。

MIMN:离线法建模长序列

(2) 在线法。针对离线法的缺点,在线法利用两阶段范式,来建模长序列。其先从用户长周期序列中,快速筛选出与候选物品相关的历史行为,然后再对得到的短序列进行建模。与推荐系统先召回后排序的思想一脉相承。在线法的重点为,如何快速而准确地筛选历史行为。SIM模型通过候选物品的类目进行硬检索( Hard-search),另外还构建了一个辅助模型进行软检索(Soft-search)。ETA则利用SimHash和海明距离,进一步加快了筛选速度。从而在线构建Top-K近邻索引,保证两阶段一致性。

SIM:在线法建模长序列

ETA:在线法,索引也实现了在线化

4 行为序列建模的主要难点

用户行为序列建模同时也是推荐系统中落地难度较大的方向,其主要难点有:

(1) 实时性要求高。与其他静态和统计类特征(比如用户年龄和性别)不同,行为序列特征的实时性要求非常高。由于用户行为十分密集且瞬息万变,能否快速捕获其行为和兴趣,直接关系到行为序列建模的成败。通常行为序列特征需要达到秒级实时,而其他特征则小时级即可。这为特征工程体系带来了极大的挑战。

(2) 存储和计算消耗大。特别是长周期行为序列,其体积往往能占到所有特征的80%。同时随着序列长度增加,计算复杂度至少也是线性增加。这为线上推理耗时带来了极大的挑战。这一问题是长周期行为序列建模,贯穿始终的核心难点。

(3) 用户兴趣多样且易变。用户可能对多个品类的物品,均有一定的兴趣,且经常变化。同时用户点击等行为有一定的随机性,带来了较大的噪声。这为精准刻画用户兴趣带来了很大挑战。DIN通过计算候选物品和各历史行为的相关性,为用户各行为赋予了一定权重,有利于抽取集中兴趣,并能起到噪声过滤的作用。

后面有单独文章分别讲解DINDIENBSTDSINMIMNSIMETA等序列建模经典模型,可以学习它们是如何优化这些难点的。可以关注作者,谢杨易知乎主页

5 行为序列特征工程

行为序列建模的首要主题就是,有哪些行为序列,也就是行为序列特征工程。它作为模型的输入,是序列建模的基础。可以从有哪些特征正反馈和负反馈短期行为和长期行为,以及全场景建模四个方向,对其逐步丰富和完善。

一条序列中可以包括哪些特征呢?一般来说,肯定会包括被行为(如被点击)的物品ID。为了提升泛化能力,还可以将物品的各项属性特征加入进来,比如物品的品牌ID、卖家ID、类目ID和价格等。同时,还可以加入一些环境特征,比如该行为距离当前的时间。这些特征经过各自的Embedding转换后,拼接为一个向量。然后再和其他所有历史行为拼接起来,形成一个长向量。为了加快模型收敛,通常会让序列中的这些特征,共享主模型中对应特征的Embedding。

用户行为种类十分丰富,可以构建点击、购买、点赞和收藏等行为序列。它们表达了用户喜欢什么,属于正反馈。同时,还可以构建不喜欢和曝光未点击等负反馈序列,从而表达用户不喜欢什么。需要注意的是,通常曝光未点击行为十分密集,序列长度很大,而且充满了噪声,对其建模具有很大挑战。

时间周期上看,可以分为Session内行为短期行为长期行为三种。Session内行为兴趣十分集中,而长期行为兴趣则多样性强。同时建模三者,可以捕获不同时间跨度下用户的兴趣分布,有利于提升模型表达能力。

最后,全场景建模也十分重要。可以既构建用户在推荐场景的行为序列,又构建用户在搜索等其他场景的行为序列,从而获取用户完整的兴趣变化。更进一步的,如果能挖掘兄弟APP,甚至竞争对手APP上的用户行为,那就更好了。

6 总结

用户行为序列建模是推荐算法中至关重要的一环,也是目前较为核心和前沿的研究方向。其主要分为短序列建模和长序列建模两大方向。短序列建模又主要分为池化和序列化两种方式,其中池化包括求和池化、平均池化和最大值池化等非特征交叉型,和以DIN为代表的注意力池化。序列化则包括以DIEN为代表的RNN型,和以BST、DSIN等为代表的Transformer型。目前基于Transformer强大的特征抽取和并行计算能力,Transformer型已经成为了短序列建模的主流。

长序列建模则更进一步,考虑如何挖掘用户长期兴趣。其主要分为离线法和在线法两大类。离线法以MIMN为代表。它通过独特的工程设计,将长周期行为序列先离线建模好,在线请求时直接调用,大大减少了模型耗时,从而满足上线需求。在线法以SIM和ETA为代表,它们基于两阶段范式,先搜索出长序列中与当前候选物品相关的行为,得到一个短序列,再基于Transformer等短序列建模方法,得到最终的序列表征。

用户行为序列建模是推荐系统中的重点和难点,目前越来越多的公司在这个方向投入重兵,并取得了非常不错的业务效果。同时,其与NLP中的文本序列建模一脉相承,有不少共同点,很多思想和方法可以相互借鉴。

7 作者新书推荐

历经两年多,花费不少心血,终于撰写完成了这部新书。

购书方式:新书发布,京东限时15天内5折优惠。原价89,现价44.5,一杯咖啡的价钱。

发货速度:京东自营,半天即可送到。

源代码:扫描图书封底二维码,进入读者群,群公告中有代码下载方式

微信群:图书封底有读者微信群,作者也在群里,任何技术、offer选择和职业规划的问题,都可以咨询

售后:支持京东七天无理由退货,售后无忧。

详细介绍和全书目录,详见

《精通推荐算法:核心模块+经典模型+代码详解》(谢杨易)【摘要 书评 试读】- 京东图书

这篇关于精通推荐算法6:用户行为序列建模 -- 总体架构的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1016984

相关文章

SpringBoot实现MD5加盐算法的示例代码

《SpringBoot实现MD5加盐算法的示例代码》加盐算法是一种用于增强密码安全性的技术,本文主要介绍了SpringBoot实现MD5加盐算法的示例代码,文中通过示例代码介绍的非常详细,对大家的学习... 目录一、什么是加盐算法二、如何实现加盐算法2.1 加盐算法代码实现2.2 注册页面中进行密码加盐2.

Java异常架构Exception(异常)详解

《Java异常架构Exception(异常)详解》:本文主要介绍Java异常架构Exception(异常),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. Exception 类的概述Exception的分类2. 受检异常(Checked Exception)

Java时间轮调度算法的代码实现

《Java时间轮调度算法的代码实现》时间轮是一种高效的定时调度算法,主要用于管理延时任务或周期性任务,它通过一个环形数组(时间轮)和指针来实现,将大量定时任务分摊到固定的时间槽中,极大地降低了时间复杂... 目录1、简述2、时间轮的原理3. 时间轮的实现步骤3.1 定义时间槽3.2 定义时间轮3.3 使用时

C++从序列容器中删除元素的四种方法

《C++从序列容器中删除元素的四种方法》删除元素的方法在序列容器和关联容器之间是非常不同的,在序列容器中,vector和string是最常用的,但这里也会介绍deque和list以供全面了解,尽管在一... 目录一、简介二、移除给定位置的元素三、移除与某个值相等的元素3.1、序列容器vector、deque

查看Oracle数据库中UNDO表空间的使用情况(最新推荐)

《查看Oracle数据库中UNDO表空间的使用情况(最新推荐)》Oracle数据库中查看UNDO表空间使用情况的4种方法:DBA_TABLESPACES和DBA_DATA_FILES提供基本信息,V$... 目录1. 通过 DBjavascriptA_TABLESPACES 和 DBA_DATA_FILES

最新Spring Security实战教程之表单登录定制到处理逻辑的深度改造(最新推荐)

《最新SpringSecurity实战教程之表单登录定制到处理逻辑的深度改造(最新推荐)》本章节介绍了如何通过SpringSecurity实现从配置自定义登录页面、表单登录处理逻辑的配置,并简单模拟... 目录前言改造准备开始登录页改造自定义用户名密码登陆成功失败跳转问题自定义登出前后端分离适配方案结语前言

OpenManus本地部署实战亲测有效完全免费(最新推荐)

《OpenManus本地部署实战亲测有效完全免费(最新推荐)》文章介绍了如何在本地部署OpenManus大语言模型,包括环境搭建、LLM编程接口配置和测试步骤,本文给大家讲解的非常详细,感兴趣的朋友一... 目录1.概况2.环境搭建2.1安装miniconda或者anaconda2.2 LLM编程接口配置2

mysql删除无用用户的方法实现

《mysql删除无用用户的方法实现》本文主要介绍了mysql删除无用用户的方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 1、删除不用的账户(1) 查看当前已存在账户mysql> select user,host,pa

kotlin中的行为组件及高级用法

《kotlin中的行为组件及高级用法》Jetpack中的四大行为组件:WorkManager、DataBinding、Coroutines和Lifecycle,分别解决了后台任务调度、数据驱动UI、异... 目录WorkManager工作原理最佳实践Data Binding工作原理进阶技巧Coroutine

如何通过Golang的container/list实现LRU缓存算法

《如何通过Golang的container/list实现LRU缓存算法》文章介绍了Go语言中container/list包实现的双向链表,并探讨了如何使用链表实现LRU缓存,LRU缓存通过维护一个双向... 目录力扣:146. LRU 缓存主要结构 List 和 Element常用方法1. 初始化链表2.