本文主要是介绍精通推荐算法26:行为序列建模之BST— Transformer建模用户行为序列,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1 行为序列建模算法架构
2 BST背景
DIEN利用GRU循环神经网络来建模用户行为序列,捕获了用户行为的演变过程,以及行为间的相关关系,取得了非常不错的业务效果。但受制于GRU天然的串行计算方式,存在长程序列梯度弥散、串行计算影响速度等问题。在自然语言处理领域,Transformer自2017年提出以来,就席卷了整个行业,并在2018年BERT上线后大放异彩。2022年底火遍全球的ChatGPT,其模型底座就是Transformer。相比于GRU,Transformer优势巨大,主要有:
- 可以并行计算。Transformer的多头自注意力(后称Multi-Head Self Attention)和前馈神经网络(后称Feed-Forward),都可以并行计算。而GRU和LSTM等循环神经网络则依赖上一状态,必须串行。
- 减少长程依赖,利用Self Attention将每个Token之间距离缩短为1,大大缓解了循环神经网络因长距离反向传播导致的梯度弥散问题。
- 增加网络深度。由于大大缓解了长程序列梯度弥散问题,Transformer网络可以很深,基于Transformer的BERT甚至可以做到24层。而GRU一般只有2层或者4层。网络越深,高阶特征捕获能力越好,模型性能也越高。
- 真正的双向网络。Transformer可以同时融合前后位置的信息,而双向GRU只是将两个方向的编码结果简单相加,严格来说仍然是单向的。
- 可解释性强。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所示。
- 先将输入向量送入Multi-Head Self Attention模块,并经过Dropout函数。然后再和输入向量相加,实现残差连接。再通过LayerNorm归一化。
- 再将第一步的输出送入两层全连接网络,并经过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选择和职业规划的问题,都可以咨询。
详细介绍和全书目录,详见
《精通推荐算法》,限时半价,半日达https://u.jd.com/mq5gLOH
这篇关于精通推荐算法26:行为序列建模之BST— Transformer建模用户行为序列的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!