一、BST [2019]

《Behavior Sequence Transformer for E-commerce Recommendation in Alibaba》

  1. 在过去的十年中,推荐系统已经成为业界最流行的 application 。并且在过去的五年中,基于深度学习的方法已经广泛应用于工业推荐系统中。在中国最大的电商平台阿里巴巴上,推荐系统一直是 Gross Merchandise Volume: GMV 和收入的主要引擎,并且在丰富的电商场景中已经部署了各种基于深度学习的推荐方法。

    阿里巴巴的推荐系统分为两个阶段:matchrank

    • match 阶段,根据和用户交互的item 选择一组相似的item

    • 然后在rank 阶段,我们学习一个经过微调(fine-tuned)的预测模型,从而预测用户点击给定候选 item 集合的可能性。

    在论文 《Behavior Sequence Transformer for E-commerce Recommendation in Alibaba》 中,我们重点关注阿里巴巴旗下淘宝(中国最大的 Consumer-to-Consumer: C2C 平台)的 rank 阶段。在这个阶段,我们有数百万的候选item,并且需要在给定用户历史行为的情况下预测用户点击候选 item 的概率。

    在深度学习时代,embeddingMLP 已经成为工业推荐系统的标准范式:大量原始特征作为向量被嵌入到低维空间中,然后馈入称作多层感知机(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)。

    因此,在这项工作中,为解决 WDLDIN 面临的上述问题,我们尝试将用户行为序列的序列信号融合到淘宝的推荐系统中。

    受到 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 阶段,每天为数亿消费者提供推荐服务。

  2. 相关工作:自从 WDL 提出以来,人们已经提出了一系列基于深度学习的方法来提高 CTR 预估的工作,如 DeepFMXDeepFMDeep and Cross 等。然而,所有这些先前的工作都集中在神经网络的特征组合或不同架构上,而忽略了现实世界推荐场景中用户行为序列的顺序特性(sequential nature)。

    最近, DIN 通过注意力机制来处理用户的行为序列。我们的模型和 DIN 之间的主要区别在于,我们提出使用 Transformer 来学习用户行为序列中每个 item 的更 deeperrepresentation ,而 DIN 试图捕获历史点击 item 和目标 item 的相似性。换句话讲,我们的 transformer 模型更适合捕获序列信号。

    《Self-attentive sequential recommendation》《BERT4Rec: Sequential Recommendation with Bidirectional Encoder Representations from Transformer》 中,他们使用 Transformer 模型来以 sequence-to-sequence 的方式解决序列推荐问题,而我们的 CTR 预估模型与他们的架构不同。

1.1 模型

  1. rank 阶段,我们将推荐任务建模为点击率(Click-Through Rate: CTR)预估问题,其定义如下:给定用户 u 点击item 构成的用户行为序列 S(u)={v1,,vn} ,我们需要学习一个函数 F 来预测 u 点击目标item vt (即候选 item ) 的概率。

  2. 我们在 WDL 的基础上构建了 BST,整体架构如下图所示。从图中可以看到 BST 遵循流行的 Embedding&MLP 范式,其中历史点击item 和相关的特征首先被嵌入到低维向量中,然后被馈送到 MLP

    具体而言,BST 将用户行为序列(包括target item 和其它特征Other Features)作为输入。其中Other Features 包括:用户画像特征、上下文特征、item 特征、以及交叉特征。

    • 首先,这些输入特征被嵌入为低维向量。为了更好地捕获行为序列中 item 之间的关系,可以使用 transformer layer 来学习序列中每个 item 的更深层representation

    • 然后,通过将Other Featuresembeddingtransformer layer 的输出进行拼接,并使用三层 MLP 来学习 hidden features 的交互作用。

    • 最后,使用 sigmoid 函数生成最终输出。

    注意:Positional Features 被合并到 Sequence Item Features 中。

    BSTWDL 之间的主要区别在于:BST 添加了 transformer layer ,从而通过捕获底层的序列信号来学到用户点击item 的更好的 representation

    接下来的内容我们将以自下而上的方式介绍 BST 的关键组件:embedding layertransformer layerMLP

1.1.1 Embedding Layer

  1. 第一个组件是 embedding layer,它将所有输入特征嵌入到一个固定大小的低维向量中。

    • 在我们的场景中有各种特征,如用户画像特征、item 特征、上下文特征、以及不同特征的组合(即交叉特征)。由于我们的工作聚焦于使用 transformer 对用户行为序列进行建模,因此为简单起见我们将所有这些特征都表示为 Other Features,并在下表中给出了一些示例。

      我们将 Other Features 拼接起来,将它们嵌入到低维向量中。对于这些特征,我们创建一个 embedding 矩阵 WoR|F|×do 。其中: doembedding 向量的维度,|F|uniqe 特征数量。

    • 此外,我们还获得了用户行为序列中每个 item (包括目标item)的 embedding 。我们使用两种类型的特征来表示一个 itemSequence Item Features(红色)、Positional Features(深蓝色)。

      • Sequence Item Features 包括 item idcategory id

        注意,一个 item 往往具有数百个特征,而在用户行为序列中选择item的所有这些特征代价太大。正如我们先前的工作 《Billion-scale commodity embedding for e-commerce recommendation in alibaba》 所述,item idcategory id 足以满足性能要求。因此我们选择这两个稀疏特征来表示嵌入用户行为序列中的每个 item

      • Positional Features 对应于下面的 positional embedding

      对于每个 item,我们将 Sequence Item FeaturesPositional Features 拼接起来,并创建一个 embedding 矩阵 WVR|V|×dV 。其中: dVembedding 向量的维度, |V|item 数量。我们使用 eiRdV 来表示给定行为序列中第 iitemembedding

  2. positional embedding :在 《Attention is all you need》 中,作者提出了一种 positional embedding 来捕获句子中的顺序信息(order information)。同样地,顺序(order)也存在于用户行为序列中。因此,我们添加 position 作为bottom layer 每个item 的输入特征,然后将其投影为低维向量。

    注意,item viposition value 计算为:

    pos(vi)=t(vt)t(vi)

    其中:

    • vttarget itemvi 为用户行为序列中第 iitem

    • t(vt) 表示推荐时间(recommending time),而 t(vi) 表示用户点击 item vi 的时间戳。

    我们采用这种方法,因为在我们的场景中,它的性能优于 《Attention is all you need》 中的 sincos 函数。

1.1.2 Transformer Layer

  1. 这一部分,我们介绍了 Transformer layer,它通过捕获行为序列中每个item 与其它item 的关系来学习item 的更深 deeperrepresentation

  2. self-attention layer:缩放的内积注意力(scaled dot-product attention)定义为:

    Attention(Q,K,V)=softmax(QKd)V

    其中:Q 代表 queryK 代表 keyV 代表 value

    在我们的场景中,self-attention 操作将itemembedding 作为输入,通过线性映射将其转换为三个矩阵,并将其馈入attention layer

    遵从 《Attention is all you need》,我们使用 multi-head attention

    S=MH(E)=Concat(head1,,headh)W(H)headi=Attention(EW(Q),EW(K),EW(V))

    其中:

    • W(Q),W(K),W(V)Rd×d 为映射矩阵。

    • ES(u) 中所有 itemembedding 矩阵。

    • hhead 数量。

  3. Point-wise Feed-Forward Network:遵从 《Attention is all you need》,我们添加一个 point-wise Feed-Forward Network:FFN 来进一步提升模型的非线性,它定义为:

    F=FFN(S)

    为避免过拟合并且学习层次的有意义的特征,我们同时在 self-attentionFFN 中使用 dropoutLeakyReLU 。然后 self-attention layerFFN layer 的总输出为:

    S=LayerNorm(S+Dropout(S))F=LayerNorm(S+Dropout(LeakyReLU(SW(1)+b(1))W(2)+b(2)))

    其中:

    • W(1),W(2),b(1),b(2) 为可学习的参数。

    • LayerNorm 为标准的 normalization layer

  4. Stacking the self-attention blocks:在第一个 self-attention block 之后,它会聚合所有历史 itemembedding。为了进一步建模底层 item 序列的复杂关系。我们堆叠了 K self-attention building block,其中第 kblock 定义为:

    S(k)=MH(F(k1))F(k)=FFN(S(k))

    实践中我们观察到 K=1 可以获得比 K=2,3 更好的性能。为了提高效率,我们并未尝试更大的 K ,并把这个留给以后的工作。

1.1.3 MLP Layer & Loss Function

  1. 我们将Other Featuresembedding 和应用于 target itemTransformer layer 的输出进行拼接,然后使用三个全连接层来进一步学习这些 dense features 之间的交互。这是工业推荐系统的标准做法。

    为了预测用户是否点击 target item vt,我们将其建模为一个二类分类问题,因此使用 sigmoid 函数作为输出单元。

    为了训练模型,我们使用交叉熵损失函数:

    L=1|D|(x,y)D[ylogp(x)+(1y)log(1p(x))]

    其中:

    • D 代表所有样本的训练集。

    • y{0,1} 代表是否点击的 label

    • p(x) 为网络经过 sigmoid 单元之后的输出,代表样本 x 被点击的概率。

1.2 实验

  1. 数据集:数据集是根据 Taobao App 的日志来构建的。我们根据用户在八天内的行为来构建离线数据集,其中前七天用于训练集、第八天用于测试集。

    数据集的统计信息如下表所示,可以看到该数据集非常大并且非常稀疏。

  2. baseline:为了显示 BST 的有效性,我们将它和其它两个模型进行比较:WDLDIN

    此外,我们通过将序列信息合并到 WDL (称作 WDL(+Seq))中来创建 baseline 方法,该方法将历史点击itemembedding 进行均值聚合。

    我们的框架是在 WDL 的基础上通过使用 Transformer 添加序列建模而构建的,而 DIN 是通过注意力机制来捕获目标 item 和历史点击item 之间的相似性。

  3. 评估指标:

    • 对于离线结果,我们使用 AUC 得分来评估不同模型的性能。

    • 对于在线 A/B test ,我们使用 CTR 和平均 RT 来评估所有模型。

      RT 是响应时间(response time: RT)的缩写,它是给定query (即淘宝上来自用户的一个请求)生成推荐结果的时间成本。我们使用平均 RT 来衡量在线生产环境中各种效率的指标。

  4. 配置:我们的模型是使用 Python2.7Tensorflow 1.4 实现的,并且选择了 Adagrad 作为优化器。

    此外,我们在下表中给出了模型参数的详细信息。

  5. 实验结果如下表所示,其中 Online CTR Grain 是相对于控制组(control group)(即 WDL )。从结果中我们可以看到 BST 相比于 baseline 的优越性。具体而言:

    • 离线 AUC0.7734WDL)和 0.7866 (DIN) 提高到 0.7894BST)。

    • 比较 WDLWDL(+Seq) 时,我们可以看到以简单的平均方式结合序列信息的有效性。这意味着BSTself-attention 的帮助下,具有强大的能力来捕获底层用户行为序列的序列信号。

      注意:根据我们的实际经验,即使离线 AUC 的收益很小,也可以带来在线 CTR 的巨大收益。Google 的研究人员在 WDL 中报道了类似的现象。

    • 此外,就效率而言,BST 的平均 RT 接近 WDLDIN 的平均 RT,这保证了在现实世界的大型推荐系统中部署诸如 Transformer 之类的复杂模型的可行性。

    • 最后,我们还展示了堆叠 self-attention layer 的影响。可以看到 b=1 获得最佳的离线 AUC

      这可能是由于以下事实:用户行为序列中的序列依赖性并不像机器翻译任务中的句子那样复杂。因此,较少的 block 数量就足以获得良好的性能。在《Self-attentive sequential recommendation》中报道了类似的观察结果。因此,我们选择 b=1 在生产环境中部署 BST,并且仅在下表中报告 b=1 的在线 CTR 增益。