《Behavior Sequence Transformer for E-commerce Recommendation in Alibaba》
在过去的十年中,推荐系统已经成为业界最流行的 application
。并且在过去的五年中,基于深度学习的方法已经广泛应用于工业推荐系统中。在中国最大的电商平台阿里巴巴上,推荐系统一直是 Gross Merchandise Volume: GMV
和收入的主要引擎,并且在丰富的电商场景中已经部署了各种基于深度学习的推荐方法。
阿里巴巴的推荐系统分为两个阶段:match
和 rank
。
在 match
阶段,根据和用户交互的item
选择一组相似的item
。
然后在rank
阶段,我们学习一个经过微调(fine-tuned
)的预测模型,从而预测用户点击给定候选 item
集合的可能性。
在论文 《Behavior Sequence Transformer for E-commerce Recommendation in Alibaba》
中,我们重点关注阿里巴巴旗下淘宝(中国最大的 Consumer-to-Consumer: C2C
平台)的 rank
阶段。在这个阶段,我们有数百万的候选item
,并且需要在给定用户历史行为的情况下预测用户点击候选 item
的概率。
在深度学习时代,embedding
和 MLP
已经成为工业推荐系统的标准范式:大量原始特征作为向量被嵌入到低维空间中,然后馈入称作多层感知机(multi layer perceptron: MLP
)的全连接层中,从而预测用户是否会点击某个 item
。代表作是谷歌的 wide and deep learning: WDL
,以及阿里巴巴的 Deep Interest networks: DIN
。
在淘宝,我们在 WDL
的基础上构建了 rank
模型,在 Embedding&MLP
范式中使用了各种特征。例如,item
类目(category
)、品牌(brand
),item
的统计数字,用户画像特征等等。尽管该框架取得了成功,但是它本身远远不能令人满意,因为它实际上忽略了一种非常重要的信号:用户行为序列(即用户按顺序点击的 item
)背后的序列信号(sequential signal
)。
例如,用户在淘宝上购买了 iphone
之后倾向于点击手机保护套,或者在购买一条裤子之后试图找到合适的鞋子。从这个意义上讲,在淘宝的 rank
阶段部署预测模型时,不考虑这一因素是有问题的。
在 WDL
中,模型只是简单地拼接所有特征,而没有捕获用户行为序列中的顺序信息(order information
)。
在 DIN
中,模型使用注意力机制来捕获候选 item
和用户历史点击item
之间的相似性,也没有考虑用户行为序列背后的序列性质(sequential nature
)。
因此,在这项工作中,为解决 WDL
和 DIN
面临的上述问题,我们尝试将用户行为序列的序列信号融合到淘宝的推荐系统中。
受到 natural language processing: NLP
中机器翻译任务的 Transformer
的巨大成功的启发,我们采用 self-attention
机制,通过考虑 embedding
阶段的序列信息来学习用户行为序列中每个 item
的更好的representation
。然后将这些 item representation
馈入到 MLP
中来预测用户对候选 item
的响应。
Transformer
的主要优势在于,它可以通过 self-attention
机制更好地捕获句子中单词之间的依赖关系。从直觉上讲,用户行为序列中 item
之间的 'dependency'
也可以通过 Transformer
来提取。因此,我们在淘宝上提出了用于电商推荐的 user behavior sequence transformer: BST
。
离线实验和在线 A/B test
显示了 BST
与现有方法相比的优越性。BST
已经部署在淘宝推荐的rank
阶段,每天为数亿消费者提供推荐服务。
相关工作:自从 WDL
提出以来,人们已经提出了一系列基于深度学习的方法来提高 CTR
预估的工作,如 DeepFM
、XDeepFM
、Deep and Cross
等。然而,所有这些先前的工作都集中在神经网络的特征组合或不同架构上,而忽略了现实世界推荐场景中用户行为序列的顺序特性(sequential nature
)。
最近, DIN
通过注意力机制来处理用户的行为序列。我们的模型和 DIN
之间的主要区别在于,我们提出使用 Transformer
来学习用户行为序列中每个 item
的更 deeper
的 representation
,而 DIN
试图捕获历史点击 item
和目标 item
的相似性。换句话讲,我们的 transformer
模型更适合捕获序列信号。
在 《Self-attentive sequential recommendation》
和 《BERT4Rec: Sequential Recommendation with Bidirectional Encoder Representations from Transformer》
中,他们使用 Transformer
模型来以 sequence-to-sequence
的方式解决序列推荐问题,而我们的 CTR
预估模型与他们的架构不同。
在 rank
阶段,我们将推荐任务建模为点击率(Click-Through Rate: CTR
)预估问题,其定义如下:给定用户 item
构成的用户行为序列 item
item
) 的概率。
我们在 WDL
的基础上构建了 BST
,整体架构如下图所示。从图中可以看到 BST
遵循流行的 Embedding&MLP
范式,其中历史点击item
和相关的特征首先被嵌入到低维向量中,然后被馈送到 MLP
。
具体而言,BST
将用户行为序列(包括target item
和其它特征Other Features
)作为输入。其中Other Features
包括:用户画像特征、上下文特征、item
特征、以及交叉特征。
首先,这些输入特征被嵌入为低维向量。为了更好地捕获行为序列中 item
之间的关系,可以使用 transformer layer
来学习序列中每个 item
的更深层representation
。
然后,通过将Other Features
的 embedding
和 transformer layer
的输出进行拼接,并使用三层 MLP
来学习 hidden features
的交互作用。
最后,使用 sigmoid
函数生成最终输出。
注意:Positional Features
被合并到 Sequence Item Features
中。
BST
和 WDL
之间的主要区别在于:BST
添加了 transformer layer
,从而通过捕获底层的序列信号来学到用户点击item
的更好的 representation
。
接下来的内容我们将以自下而上的方式介绍 BST
的关键组件:embedding layer
、transformer layer
、MLP
。
第一个组件是 embedding layer
,它将所有输入特征嵌入到一个固定大小的低维向量中。
在我们的场景中有各种特征,如用户画像特征、item
特征、上下文特征、以及不同特征的组合(即交叉特征)。由于我们的工作聚焦于使用 transformer
对用户行为序列进行建模,因此为简单起见我们将所有这些特征都表示为 Other Features
,并在下表中给出了一些示例。
我们将 Other Features
拼接起来,将它们嵌入到低维向量中。对于这些特征,我们创建一个 embedding
矩阵 embedding
向量的维度,uniqe
特征数量。
此外,我们还获得了用户行为序列中每个 item
(包括目标item
)的 embedding
。我们使用两种类型的特征来表示一个 item
:Sequence Item Features
(红色)、Positional Features
(深蓝色)。
Sequence Item Features
包括 item id
和 category id
。
注意,一个 item
往往具有数百个特征,而在用户行为序列中选择item
的所有这些特征代价太大。正如我们先前的工作 《Billion-scale commodity embedding for e-commerce recommendation in alibaba》
所述,item id
和 category id
足以满足性能要求。因此我们选择这两个稀疏特征来表示嵌入用户行为序列中的每个 item
。
Positional Features
对应于下面的 positional embedding
。
对于每个 item
,我们将 Sequence Item Features
和 Positional Features
拼接起来,并创建一个 embedding
矩阵 embedding
向量的维度, item
数量。我们使用 item
的 embedding
。
positional embedding
:在 《Attention is all you need》
中,作者提出了一种 positional embedding
来捕获句子中的顺序信息(order information
)。同样地,顺序(order
)也存在于用户行为序列中。因此,我们添加 position
作为bottom layer
每个item
的输入特征,然后将其投影为低维向量。
注意,item
position value
计算为:
其中:
target item
, item
。
recommending time
),而 item
我们采用这种方法,因为在我们的场景中,它的性能优于 《Attention is all you need》
中的 sin
和 cos
函数。
这一部分,我们介绍了 Transformer layer
,它通过捕获行为序列中每个item
与其它item
的关系来学习item
的更深 deeper
的 representation
。
self-attention layer
:缩放的内积注意力(scaled dot-product attention
)定义为:
其中:query
, key
,value
。
在我们的场景中,self-attention
操作将item
的 embedding
作为输入,通过线性映射将其转换为三个矩阵,并将其馈入attention layer
。
遵从 《Attention is all you need》
,我们使用 multi-head attention
:
其中:
item
的 embedding
矩阵。
head
数量。
Point-wise Feed-Forward Network
:遵从 《Attention is all you need》
,我们添加一个 point-wise Feed-Forward Network:FFN
来进一步提升模型的非线性,它定义为:
为避免过拟合并且学习层次的有意义的特征,我们同时在 self-attention
和 FFN
中使用 dropout
和 LeakyReLU
。然后 self-attention layer
和 FFN layer
的总输出为:
其中:
normalization layer
。
Stacking the self-attention blocks
:在第一个 self-attention block
之后,它会聚合所有历史 item
的 embedding
。为了进一步建模底层 item
序列的复杂关系。我们堆叠了 self-attention building block
,其中第 block
定义为:
实践中我们观察到
我们将Other Features
的 embedding
和应用于 target item
的 Transformer layer
的输出进行拼接,然后使用三个全连接层来进一步学习这些 dense features
之间的交互。这是工业推荐系统的标准做法。
为了预测用户是否点击 target item
sigmoid
函数作为输出单元。
为了训练模型,我们使用交叉熵损失函数:
其中:
label
。
sigmoid
单元之后的输出,代表样本
数据集:数据集是根据 Taobao App
的日志来构建的。我们根据用户在八天内的行为来构建离线数据集,其中前七天用于训练集、第八天用于测试集。
数据集的统计信息如下表所示,可以看到该数据集非常大并且非常稀疏。
baseline
:为了显示 BST
的有效性,我们将它和其它两个模型进行比较:WDL
和 DIN
。
此外,我们通过将序列信息合并到 WDL
(称作 WDL(+Seq)
)中来创建 baseline
方法,该方法将历史点击item
的 embedding
进行均值聚合。
我们的框架是在 WDL
的基础上通过使用 Transformer
添加序列建模而构建的,而 DIN
是通过注意力机制来捕获目标 item
和历史点击item
之间的相似性。
评估指标:
对于离线结果,我们使用 AUC
得分来评估不同模型的性能。
对于在线 A/B test
,我们使用 CTR
和平均 RT
来评估所有模型。
RT
是响应时间(response time: RT
)的缩写,它是给定query
(即淘宝上来自用户的一个请求)生成推荐结果的时间成本。我们使用平均 RT
来衡量在线生产环境中各种效率的指标。
配置:我们的模型是使用 Python2.7
和 Tensorflow 1.4
实现的,并且选择了 Adagrad
作为优化器。
此外,我们在下表中给出了模型参数的详细信息。
实验结果如下表所示,其中 Online CTR Grain
是相对于控制组(control group
)(即 WDL
)。从结果中我们可以看到 BST
相比于 baseline
的优越性。具体而言:
离线 AUC
从 0.7734
(WDL
)和 0.7866
(DIN
) 提高到 0.7894
(BST
)。
比较 WDL
和 WDL(+Seq)
时,我们可以看到以简单的平均方式结合序列信息的有效性。这意味着BST
在 self-attention
的帮助下,具有强大的能力来捕获底层用户行为序列的序列信号。
注意:根据我们的实际经验,即使离线 AUC
的收益很小,也可以带来在线 CTR
的巨大收益。Google
的研究人员在 WDL
中报道了类似的现象。
此外,就效率而言,BST
的平均 RT
接近 WDL
和 DIN
的平均 RT
,这保证了在现实世界的大型推荐系统中部署诸如 Transformer
之类的复杂模型的可行性。
最后,我们还展示了堆叠 self-attention layer
的影响。可以看到 AUC
。
这可能是由于以下事实:用户行为序列中的序列依赖性并不像机器翻译任务中的句子那样复杂。因此,较少的 block
数量就足以获得良好的性能。在《Self-attentive sequential recommendation》
中报道了类似的观察结果。因此,我们选择 BST
,并且仅在下表中报告 CTR
增益。