精通推荐算法26:行为序列建模之BST— Transformer建模用户行为序列

2024-08-21 11:04

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

1 行为序列建模算法架构

BST背景

DIEN利用GRU循环神经网络来建模用户行为序列,捕获了用户行为的演变过程,以及行为间的相关关系,取得了非常不错的业务效果。但受制于GRU天然的串行计算方式,存在长程序列梯度弥散、串行计算影响速度等问题。在自然语言处理领域,Transformer自2017年提出以来,就席卷了整个行业,并在2018年BERT上线后大放异彩。2022年底火遍全球的ChatGPT,其模型底座就是Transformer。相比于GRU,Transformer优势巨大,主要有:

  1. 可以并行计算Transformer的多头自注意力(后称Multi-Head Self Attention前馈神经网络(后称Feed-Forward可以并行计算。而GRU和LSTM等循环神经网络则依赖上一状态,必须串行
  2. 减少长程依赖,利用Self Attention将每个Token之间距离缩短为1,大大缓解了循环神经网络因长距离反向传播导致的梯度弥散问题。
  3. 增加网络深度。由于大大缓解了长程序列梯度弥散问题,Transformer网络可以很深,基于Transformer的BERT甚至可以做到24层。而GRU一般只有2层或者4层。网络越深,高阶特征捕获能力越好,模型性能也越高。
  4. 真正的双向网络。Transformer可以同时融合前后位置的信息,而双向GRU只是将两个方向的编码结果简单相加,严格来说仍然是单向的。
  5. 可解释性。Transformer通过Attention强度,可以表达状态之间的相关性,可解释性更强。Attention得分越高,相关性也越大。

BST将Transformer引入到了推荐算法用户行为序列建模中,取得了不错的业务效果。它由阿里巴巴淘宝推荐团队于2019年提出,全称“ Behavior Sequence Transformer for E-commerce Recommendation in Alibaba[4]

3 BST模型结构:Transformer输入层

BST模型结构包括三个部分,分别是Transformer输入层Multi-Head Self Attention模块Feed-Forward模块,下面依次进行介绍。

BST整体上仍然是“Embedding + MLP”的基本范式,主要优化点为用户行为序列建模部分。它利用Transformer[5]中的Multi-Head Self Attention和Feed-Forward,来建模得到原始行为序列的表征向量。再和其他特征的Embedding向量,合并在一起。然后经过多层全连接神经网络,实现特征充分交叉。最终通过Sigmoid激活输出。其模型结构如图5-9所示。

下面重点来看行为序列建模部分。Transformer的输入分为两部分。一部分是行为序列中各物品的特征向量,比如物品ID、类目ID、卖家ID、品牌ID等,如图5-9中的红色向量。这儿可以挑选一些比较重要的物品侧特征,BST受制于计算复杂度,只加入了物品ID和类目ID。行为序列中的这些特征,可以与物品侧的对应特征共享Embedding向量,从而加速模型收敛,并提升鲁棒性。

另一部分是位置特征,用来表征行为发生的先后顺序和时间间隔,如图5-9中的蓝色向量。位置特征的计算如公式5-15所示。

4 BST模型结构:Multi-Head Self Attention模块

5 BST模型结构:Feed-Forward模块

这部分和原版Transformer基本一样,采用两层全连接。为了防止过拟合,全连接之间加入了LeakyReLU非线性激活Dropout函数。Self Attention和Feed-Forward模块中,均应用了残差连接,从而优化梯度弥散问题并增加模型稳定性。并利用LayerNorm进行层归一化。计算过程如公式5-18所示。

  1. 先将输入向量送入Multi-Head Self Attention模块,并经过Dropout函数。然后再和输入向量相加,实现残差连接。再通过LayerNorm归一化。
  2. 再将第一步的输出送入两层全连接网络,并经过ReLU激活和Dropout函数。然后再和第一步的输出向量相加,实现残差连接。再通过LayerNorm归一化。得到最终输出。

LayerNorm可以对不同层的数据进行归一化,让它们保持在一个量级上,从而可以加快收敛速度。与BatchNorm计算方法类似,但作用目标不同,注意区分。另外需要注意的是,两层全连接之间没有使用残差连接

最后,在自然语言处理中,经常会堆叠(Stacking)多层Multi-Head Self Attention和Feed-Forward模块,从而捕获高阶语义。BERT基础模型堆叠了12层,其Large版本更是采用了24层。BST对这方面也做了研究,最终发现堆叠单层,在其业务场景上效果最好。其原因主要为,推荐算法中特征间的相关性比较直接,相对容易捕获。另外堆叠多层,会加大计算复杂度,增加模型训练和预测耗时。具体使用多少层,要根据实际业务场景数据分布来确定,并考虑可能因此带来的时延。

6 BST代码实现

参见文章 精通推荐算法27:行为序列建模之BST— 代码实现

7 作者新书推荐

历经两年多,花费不少心血,终于撰写完成了这部新书。本文在5.4节中重点阐述了。

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

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

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

《精通推荐算法》,限时半价,半日达icon-default.png?t=N7T8https://u.jd.com/mq5gLOH

这篇关于精通推荐算法26:行为序列建模之BST— Transformer建模用户行为序列的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Vue项目的甘特图组件之dhtmlx-gantt使用教程和实现效果展示(推荐)

《Vue项目的甘特图组件之dhtmlx-gantt使用教程和实现效果展示(推荐)》文章介绍了如何使用dhtmlx-gantt组件来实现公司的甘特图需求,并提供了一个简单的Vue组件示例,文章还分享了一... 目录一、首先 npm 安装插件二、创建一个vue组件三、业务页面内 引用自定义组件:四、dhtmlx

前端 CSS 动态设置样式::class、:style 等技巧(推荐)

《前端CSS动态设置样式::class、:style等技巧(推荐)》:本文主要介绍了Vue.js中动态绑定类名和内联样式的两种方法:对象语法和数组语法,通过对象语法,可以根据条件动态切换类名或样式;通过数组语法,可以同时绑定多个类名或样式,此外,还可以结合计算属性来生成复杂的类名或样式对象,详细内容请阅读本文,希望能对你有所帮助...

golang字符串匹配算法解读

《golang字符串匹配算法解读》文章介绍了字符串匹配算法的原理,特别是Knuth-Morris-Pratt(KMP)算法,该算法通过构建模式串的前缀表来减少匹配时的不必要的字符比较,从而提高效率,在... 目录简介KMP实现代码总结简介字符串匹配算法主要用于在一个较长的文本串中查找一个较短的字符串(称为

Python爬虫selenium验证之中文识别点选+图片验证码案例(最新推荐)

《Python爬虫selenium验证之中文识别点选+图片验证码案例(最新推荐)》本文介绍了如何使用Python和Selenium结合ddddocr库实现图片验证码的识别和点击功能,感兴趣的朋友一起看... 目录1.获取图片2.目标识别3.背景坐标识别3.1 ddddocr3.2 打码平台4.坐标点击5.图

Java中实现订单超时自动取消功能(最新推荐)

《Java中实现订单超时自动取消功能(最新推荐)》本文介绍了Java中实现订单超时自动取消功能的几种方法,包括定时任务、JDK延迟队列、Redis过期监听、Redisson分布式延迟队列、Rocket... 目录1、定时任务2、JDK延迟队列 DelayQueue(1)定义实现Delayed接口的实体类 (

通俗易懂的Java常见限流算法具体实现

《通俗易懂的Java常见限流算法具体实现》:本文主要介绍Java常见限流算法具体实现的相关资料,包括漏桶算法、令牌桶算法、Nginx限流和Redis+Lua限流的实现原理和具体步骤,并比较了它们的... 目录一、漏桶算法1.漏桶算法的思想和原理2.具体实现二、令牌桶算法1.令牌桶算法流程:2.具体实现2.1

shell脚本自动删除30天以前的文件(最新推荐)

《shell脚本自动删除30天以前的文件(最新推荐)》该文章介绍了如何使用Shell脚本自动删除指定目录下30天以前的文件,并通过crontab设置定时任务,此外,还提供了如何使用Shell脚本删除E... 目录shell脚本自动删除30天以前的文件linux按照日期定时删除elasticsearch索引s

TP-Link PDDNS服将于务6月30日正式停运:用户需转向第三方DDNS服务

《TP-LinkPDDNS服将于务6月30日正式停运:用户需转向第三方DDNS服务》近期,路由器制造巨头普联(TP-Link)在用户群体中引发了一系列重要变动,上个月,公司发出了一则通知,明确要求所... 路由器厂商普联(TP-Link)上个月发布公告要求所有用户必须完成实名认证后才能继续使用普联提供的 D

最长公共子序列问题的深度分析与Java实现方式

《最长公共子序列问题的深度分析与Java实现方式》本文详细介绍了最长公共子序列(LCS)问题,包括其概念、暴力解法、动态规划解法,并提供了Java代码实现,暴力解法虽然简单,但在大数据处理中效率较低,... 目录最长公共子序列问题概述问题理解与示例分析暴力解法思路与示例代码动态规划解法DP 表的构建与意义动

关于最长递增子序列问题概述

《关于最长递增子序列问题概述》本文详细介绍了最长递增子序列问题的定义及两种优化解法:贪心+二分查找和动态规划+状态压缩,贪心+二分查找时间复杂度为O(nlogn),通过维护一个有序的“尾巴”数组来高效... 一、最长递增子序列问题概述1. 问题定义给定一个整数序列,例如 nums = [10, 9, 2