精通推荐算法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

相关文章

从入门到精通详解Python虚拟环境完全指南

《从入门到精通详解Python虚拟环境完全指南》Python虚拟环境是一个独立的Python运行环境,它允许你为不同的项目创建隔离的Python环境,下面小编就来和大家详细介绍一下吧... 目录什么是python虚拟环境一、使用venv创建和管理虚拟环境1.1 创建虚拟环境1.2 激活虚拟环境1.3 验证虚

C# LiteDB处理时间序列数据的高性能解决方案

《C#LiteDB处理时间序列数据的高性能解决方案》LiteDB作为.NET生态下的轻量级嵌入式NoSQL数据库,一直是时间序列处理的优选方案,本文将为大家大家简单介绍一下LiteDB处理时间序列数... 目录为什么选择LiteDB处理时间序列数据第一章:LiteDB时间序列数据模型设计1.1 核心设计原则

Java List 使用举例(从入门到精通)

《JavaList使用举例(从入门到精通)》本文系统讲解JavaList,涵盖基础概念、核心特性、常用实现(如ArrayList、LinkedList)及性能对比,介绍创建、操作、遍历方法,结合实... 目录一、List 基础概念1.1 什么是 List?1.2 List 的核心特性1.3 List 家族成

史上最全MybatisPlus从入门到精通

《史上最全MybatisPlus从入门到精通》MyBatis-Plus是MyBatis增强工具,简化开发并提升效率,支持自动映射表名/字段与实体类,提供条件构造器、多种查询方式(等值/范围/模糊/分页... 目录1.简介2.基础篇2.1.通用mapper接口操作2.2.通用service接口操作3.进阶篇3

Linux中的自定义协议+序列反序列化用法

《Linux中的自定义协议+序列反序列化用法》文章探讨网络程序在应用层的实现,涉及TCP协议的数据传输机制、结构化数据的序列化与反序列化方法,以及通过JSON和自定义协议构建网络计算器的思路,强调分层... 目录一,再次理解协议二,序列化和反序列化三,实现网络计算器3.1 日志文件3.2Socket.hpp

Spring WebClient从入门到精通

《SpringWebClient从入门到精通》本文详解SpringWebClient非阻塞响应式特性及优势,涵盖核心API、实战应用与性能优化,对比RestTemplate,为微服务通信提供高效解决... 目录一、WebClient 概述1.1 为什么选择 WebClient?1.2 WebClient 与

最新Spring Security的基于内存用户认证方式

《最新SpringSecurity的基于内存用户认证方式》本文讲解SpringSecurity内存认证配置,适用于开发、测试等场景,通过代码创建用户及权限管理,支持密码加密,虽简单但不持久化,生产环... 目录1. 前言2. 因何选择内存认证?3. 基础配置实战❶ 创建Spring Security配置文件

从入门到精通详解LangChain加载HTML内容的全攻略

《从入门到精通详解LangChain加载HTML内容的全攻略》这篇文章主要为大家详细介绍了如何用LangChain优雅地处理HTML内容,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录引言:当大语言模型遇见html一、HTML加载器为什么需要专门的HTML加载器核心加载器对比表二

Spring的RedisTemplate的json反序列泛型丢失问题解决

《Spring的RedisTemplate的json反序列泛型丢失问题解决》本文主要介绍了SpringRedisTemplate中使用JSON序列化时泛型信息丢失的问题及其提出三种解决方案,可以根据性... 目录背景解决方案方案一方案二方案三总结背景在使用RedisTemplate操作redis时我们针对

Spring Boot spring-boot-maven-plugin 参数配置详解(最新推荐)

《SpringBootspring-boot-maven-plugin参数配置详解(最新推荐)》文章介绍了SpringBootMaven插件的5个核心目标(repackage、run、start... 目录一 spring-boot-maven-plugin 插件的5个Goals二 应用场景1 重新打包应用