作者 | 知乎博主@青枫拂岸 整理 | NewBeeNLP
阿里的搜索团队在2019 DLP-KDD上发表的《Behavior Sequence Transformer for E-commerce Recommendation in Alibaba》[1]。
文章的主要内容就是将近几年在NLP领域常用的Transformer模型迁移到推荐领域,利用Transformer处理 用户行为序列信息。模型已部署在淘宝推荐精排阶段,相比于Wide&Deep和DIN模型,CTR有了进一步提升。
1. 介绍
在深度学习时代,淘宝以WDL(Wide&Deep简称,下同)为基础,构建Rank阶段模型。虽然WDL作为推荐领域影响深远的模型,但是现阶段在处理某些特征时却出现了瓶颈,即: 用户行为序列( users’ behavior sequences 简称 UBS) , 即用户的item点击顺序。
该特征是对用户后续行为的点击预测非常重要的特征。近几年,越来越多的公司开始探索如何利用用户行为序列,以此来提高用户CTR,从而带来收益。例如阿里妈妈团队: 经典的 引入Attention机制的DIN[2] 和 GRU结构的DIEN[3] 和 以Capsule network为举出的MIND。序列化推荐的常用建模方式可以参考:https://zhuanlan.zhihu.com/p/272862240
文章同时也指出DIN的缺点:虽然使用Attention获取候item和用户历史点击的item的相似性,但是却并未考虑用户行为的顺序性质。
由于Transformer近几年在NLP领域的大获成功,从而将其引入处理UBS特征(主要是Multi-head Self-attention Position embedding结构),经过文章的实验证明,BST无论是离线还是在线效果均优于WDL和DIN。
2. 模型
1. 模型结构图
模型结构上并没有十分特别的设计,就是other Feature进行Embedding。User Behavior Sequence 进行Transformer 中的encoder部分操作的过程。这里将其命名为Transformer Layer。
2.Embedding Layer
无需多言,将不同类型的Feature转化为Embedding。
文中利用常规方法将 非用户历史行为特征 分为四类:
- User侧特征:年龄、性别、所在城市、...
- Item侧特征:类别id、店铺id、标签、...
- 上线文特征:匹配类型、展示位置、所在页数、...
- 交叉特征:上述特征的交叉
上面的四类特征在模型结构图中被归纳为other Feature。
用户历史行为特征 则包含两部分,分别为序列 Item 特征(图中红色) and 位置特征 (图中蓝色),其中序列item特征也和DIN中一样设定,包含item_id和category_id 两部分。文中也提到,一个item包含上百个特征,全做为历史行为特征计算成本过高,只需要找到最能代表的即可,item_id和category_id足够胜任。毕竟直接用id没有任何信息损失。
另外还引入Positional embedding,这个特征由Transformer模型中引入。每个特征向量拼接上特征位置信息。但是计算方法上没有采用Transformer中的方法。文中说是试过,但效果不好。这里采用计算时间差作为Positional值。
其中 代表第i个item被点击的时间戳, 代表候选的目标item。值得注意的一点是并没有采用Transformer中的 Postional Embedding相加,而是采用concat(拼接)。
3.Transformer Layer
Multi-head Self-attention
Transformer最令人印象深刻的非Multi-head Self-attention莫属,在BST中Multi-head Self-attention结构完整的得到保留。Self-Attention 可以用一句话来概括:将输入转化为K、Q、V矩阵,使对应输出不在只包含对应输入信息,也包含了整个序列Session 的信息。Multi-head Self-attention 则是构建多个K、Q、V,多次利用Self-Attention 从不同空间角度,更全面的获取有效信息。
这里只是抛转引入,网上对Self-Attention的解析已经十分全面,推荐看下面这篇博主记录的李宏毅老师对Self-Attention的讲解[4]
给出文中公式:
其中,, 是所有item的embedding, 表示head的个数。
值得注意的是,Self-Attention层的输入和输出必须维度相同,单头attention 的 Q/K/V 的shape和多头attention 的每个头的Qi/Ki/Vi的大小是不一样的,假如单头attention 的 Q/K/V的参数矩阵WQ/WK/WV的shape分别是[512, 512](此处假设encoder的输入和输出是一样的shape),那么多头attention (假设8个头)的每个头的Qi/Ki/Vi的参数矩阵WQi/WKi/WVi大小是[512, 512/8]。
Point-wise Feed-Forward Networks
与Transformer中一致,加入FFN网络增强非线性,加入LayerNorm、ResNet、dropout结构,并将原始的Relu激活函数改为leakyRelu。
这里回顾一下LayerNorm和BatchNorm的区别:
Batch Normalization 的处理对象是对一批样本, Layer Normalization 的处理对象是单个样本。Batch Normalization 是对这批样本的同一维度特征做归一化, Layer Normalization 是对这单个样本的所有维度特征做归一化。
LN不依赖于batch的大小和输入sequence的深度,因此可以用于batchsize为1和RNN中对边长的输入sequence的normalize操作。
目的都是让该层参数稳定下来,避免梯度消失或者梯度爆炸,方便后续的学习。
一般来说,BN更适合特征依赖于不同样本间的统计参数。因为它删除了不同特征之间的大小关系,但是保留了不同样本间的大小关系。所以在CV领域更常用。 而在NLP领域,LN就更加合适。因为它删除不同样本间的大小关系,但保留了一个样本内不同特征之间的大小关系。对于NLP或者序列任务来说,一条样本的不同特征,其实就是时序上字符取值的变化,样本内的特征关系是非常紧密的。(来自BatchNorm与LayerNorm的异同[5])
文中讨论了Transformer层需要重叠几次再输出的问题,Transformer的原始论文中是6层encoder堆叠。经过测试发现一层相比于两层和三层效果更好。个人猜测可能是 用户历史行为信息对比NLP的整句话,包含的信息更少,浅层网络即可获取大部分信息。
4.MLP layers
三层MLP Sigmod输出。loss取二分类经典交叉熵损失函数。Adagrad为优化器。
3.实验
数据集
使用淘宝App 某连续8天的日志构造数据集,过去7天作为训练,第8天测试。
对比 WDL DIN 与不同数量Transformer Layer下的BST。
实验参数设置
实验结果
离线使用AUC作为评价指标,在线A/Btest则使用RT,即:响应时间(RTI),是为给定查询生成推荐结果的时间成本,即淘宝用户的一个请求。
4.总结和思考
个人有一些疑问:
1.position函数怎么embedding化,文章中没有具体提及,源码论文中没有开源,这个我们不得而知,个人觉得可能进行分桶,如距购买1天内、3天内、7天内等等。如果数值型直接embedding参数会很大。
2.把target item embedding 在Transformer Layer上如何操作,是拼接在原始User Behavior Sequence后进入self-Attention?在self-Attention后拼接?很多细节受限于4页表达并不清晰。
3.论文没有在公有数据集上进行,例如经典的Criteo数据集,只用了内部数据集,那么内部数据集是否在行为特征上具有普适性,具体的数据分布,这里并没有详细去描述。
文章是transformer在推荐领域的迁移,对transformer的关键点Positional Embedding和Multi-head Self-attention进行了复用,如position函数和激活函数的更改。相比于阿里出品的其他论文,稍显寡淡。
随着Transformer和Bert在NLP领域效果上一枝独秀,推荐领域有越来越多的模型开始借鉴、迁移NLP中的优秀技术。如本篇的BST、关注特征交叉的AutoInt、还是下一篇要介绍的BERT4Rec都是典型代表。但是需要注意的是NLP领域更关注于时序这个性质,落地前需要衡量公司在这部分的数据积累是否充足,否则可能会出现事倍功半的效果。
本文参考资料
[1]《Behavior Sequence Transformer for E-commerce Recommendation in Alibaba》: https://link.zhihu.com/?target=https://dl.acm.org/doi/abs/10.1145/3326937.3341261
[2]引入Attention机制的DIN: https://zhuanlan.zhihu.com/p/425064402
[3]GRU结构的DIEN: https://zhuanlan.zhihu.com/p/426670720
[4]李宏毅老师对Self-Attention的讲解: https://zhuanlan.zhihu.com/p/171875438
[5]BatchNorm与LayerNorm的异同: https://zhuanlan.zhihu.com/p/428620330