深入理解推荐系统:十大序列化推荐算法梳理

为什么进行序列化推荐?

传统的推荐系统,例如基于内容和协同过滤的推荐系统,以一种静态的方式建模用户和商品的交互并且只可以捕获用户广义的喜好。然而现实生活中,用户的行为前后都存在极强的关联性甚至因果性。能够将用户和商品的交互建模为一个动态的序列并且利用序列的依赖性来活捉当前和最近用户的喜好。

序列化推荐模型目录:

  1. SASRec

  2. DIN

  3. DIEN

  4. BERT4Rec

  5. BST

  6. MIND

  7. DSIN

  8. SIM

  9. DMT

  10. ComiRec

SASRec(2018年)

论文:Self-Attentive Sequential Recommendation

本文于2018年发表在ICDM上的论文,是较早基于self-attention机制来做序列化推荐的模型,也是目前大多数序列化推荐算法非常重要的Baseline。作者受到Transformer启发,采用self-attention来对用户的历史行为信息建模,提取更为有价值的信息。最后将得到的信息分别与所有的物品embedding内容做内积,根据相关性的大小排序、筛选,得到Topk个推荐。

模型整个结构分为三个部分,分别是Embedding层、Self-Attention层和预测层。当然,核心部分为self-attendtion层,这部分与Transformer的Encoder层大体上是一致的,是由多个自注意力机制 +(残差连接、LayerNormalization、Dropout)+ 前馈网络组成。

Self-Attention Layer

Point-Wise Feed-Forward Network

尽管self-attention能将之前item的emebdding使用自适应的权重进行集成,但仍然是一个先线性模型,为了加入非线性能力,本文与Transformer一样,self-attentionz之后,使用两层的前馈网络:

Stacking Self-Attention Blocks

这里与Transformer的思想类似,认为「叠加多个自注意力机制层能够学习更复杂的特征转换」。第个自注意力block定义为:

然而网络层数越深会存在一些问题,如模型更容易过拟合、训练过程不稳定等,与Transformer一样,加入残差链接、Layer Normalization和Dropout来抑制模型的过拟合。

DIN(2018年)

论文:Deep Interest Network for Click-Through Rate Prediction

文章首先介绍了现有的点击率 (CTR) 预估模型大都满足相同的模式: 先将大量的稀疏类别特征 (Categorical Features) 通过 Embedding 技术映射到低维空间,再将这些特征的低维表达按照特征的类别进行组合与变换 (文中采用 in a group-wise manner 来描述),以形成固定长度的向量 (比如常用的 sum pooling / mean pooling),最后将这些向量 concatenate 起来输入到一个 MLP (Multi-Layer Perceptron) 中, 从而学习这些特征间的非线性关系。

然而这个模式存在一个问题,举个例子,在电商场景下,用户兴趣可以使用用户的历史行为来描述 (比如用户访问过的商品,店铺或者类目),然而如果按照现有的处理模式,对于不同的候选广告,用户的兴趣始终被映射为同一个固定长度的向量来表示,这极大的限制了模型的表达能力,毕竟用户的兴趣是多样的。

为了解决这个问题,本文提出了 DIN 网络,对于不同的候选广告,考虑该广告和用户历史行为的相关性,以便自适应地学习用户兴趣的特征表达。具体来说,文章介绍了 local activation unit 模块,其基于 Attention 机制,对用户历史行为进行加权来表示用户兴趣, 其中权重参数是通过候选广告和历史行为交互来进行学习的。

另外,本文还介绍了 Mini-batch Aware Regularization 与 Dice 激活函数两种技术,以帮助训练大型的网络。

DIN引入了新设计和局部激活单元(local activation unit),其它的结构完全相同。特别的,activation units可以应用到用户行为特征上,它会执行一个加权求和平均(weighted sum pooling)来自适应地计算:在给定一个候选广告A时的用户表示(user representation)

在下表的所有这些特征中,用户行为特征十分重要,它在电商应用场景中对于建模用户兴趣时扮演重要角色。

DIEN(阿里,2018年)

论文:Deep Interest Evolution Network for Click-Through Rate Prediction

DIN引入了一个attention机制来为给定目标item激活局部的历史行为,可以成功捕获用户兴趣的多性化特性。然而,DIN在捕获序列行为间的依赖关系上很弱,基本不能捕获到兴趣的动态进化性,另外通过用户的显式的行为来表达用户隐含的兴趣,这一准确性无法得到保证。

为了解决这个问题,阿里提出了深度兴趣演化网络DIEN来CTR预估的性能,DIEN可以很好的捕获用户兴趣,并建模兴趣演化过程。另外,DIEN设计了兴趣抽取层和兴趣进化层,在兴趣抽取层会基于行为序列抽取兴趣序列,并通过计算一个辅助loss,来提升兴趣表达的准确性;兴趣进化层会建模与target item相关的兴趣演化过程。

Interest Extractor Layer:在电商系统中,用户行为是隐兴趣的携带者,在用户发生该行为后兴趣会发生变更。在该interest extractor layer上,会从序列形用户行为上抽到一系列表兴趣状态。具体采用GRU来建模行为间的依赖,其中GRU的输入可以通过它们的出现时间顺序排列的行为。

Interest Evolving Layer:Interest evloving module可以为最终的interest表示提供更多的相关历史信息,根据兴趣演进趋势来预测target item的CTR更好。

注意,在演化期间兴趣有两个特性:

  1. 由于兴趣多样性,兴趣会漂移。在行为上的兴趣漂移的效果是用户可能在一段时间内对许多书(books)感兴趣,在另一段时间内可能又需要衣服(clothes)。

  2. 尽管兴趣可以相互影响,每个兴趣都具有它自己的evolving process,例如:books和clothes的evolving process几乎独立。我们只关注那些与target item相关的evloving process。

此处增加一层GRU的变种,并加上attention机制以找到与target AD相关的interest。attention的计算方式如下:

BERT4Rec(2019年)

论文:Sequential Recommendation with Bidirectional Encoder Representations from Transformer

从历史行为中建模用户的动态偏好,对于推荐系统来说是个挑战。之前的方法采用序列神经网络以从左到右的方式将用户历史交互编码成隐表示,来生成推荐。尽管它们是有效的,这种从左到右的单向模型是次优的,因为有以下的限制:

  1. 单向结构限制了在用户行为序列中的隐表示的能力(power)

  2. 通常这样的一个严格排序的序列,并不总是实际可行的

为了解决这样的限制,提出了一个序列推荐模型BERT4Rec,它采用deep bidirectional self-attention机制来建模用户行为序列。为了避免信息泄漏,以及对双向模型的有效训练,模型采用了Cloze objective到序列推荐中,通过联合条件(从左到右的context)预测在序列中随机的masked items。这种方式下,通过允许在用户历史行为中的每个item以及融合从左到右的信息,我们学习了一个bidirectional表示模型来做出推荐。

BERT4Rec通过L个双向Transformer layers进行stack组成。 每个layer上,它会通过使用Transformer layer并行地跨之前层的所有positions交换信息,来迭代式地修正每个position的表示。 通过如图d的方式,以step-by-step的RNN-based的方式来前向传播相关信息进行学习,self-attention机制会赋予BERT4Rec直接捕获任意距离间的依赖。 该机制会产生一个全局的receptive field,而CNN-based方法(比如: Caser)通常有一个受限的receptive field。 另外,对比RNN-based方法,self-attention更容易并行化。

对比图b, c, d,大多数显著的不同之处是,SASRec和RNN-based方法都是从左到右的单向结构,而BERT4Rec使用双向self-attention来建模用户的行为序列。这种方式下,我们提出的模型可以获取关于用户行为序列的更强大表示,来提升推荐效果。

Transformer Layer

如图1b所示,给定一个长度为的输入序列,我们在每一层l的每个position上同时使用transformer layer来迭代式地计算隐表示h^l_i。如图1a所示,Transformer layer Trm包含了两个sub-layers:一个Multi-head self-attention sub-layer以及一个position-wise feed-forward network(这与我们之前介绍的transformer中的encoder部分基本一致)。

Embedding Layer

由于不使用任何recurrence或convolution模块,Transformer layer Trm不会意识到输入序列的顺序。为了利用输入的顺序信息,在Transformer layer stacks的底部,将position embeddings引入到input item embeddings中。对于一个给定的item,它的输入表示通过对相应的item embedding和positinal embedding进行求和来构成:

Output layer

在L layers后,会跨之前层上的所有positions来层次化交换信息,对于input序列的所有items,会获得最终的output。假设我们将item在timestep上进行mask,接着基于图1b的来预测masked items。特别的,会应用一个两层的feed-forward网络,并使用GELU activation来生成一个在target items上的output分布:   

模型学习层

在BERT4Rec中,由于是双向模型,每一个item的最终输出表示都包含了要预测物品的信息,这样就造成了一定程度的信息泄漏。因此采用Cloze taske,也就是将输入序列中的%的物品进行masked,然后根据上下文信息预测masked的物品。

在训练阶段,为了提升模型的泛化能力,让模型训练到更多的东西,同时也能够创造更多的样本,借鉴了BERT中的Masked Language Model的训练方式,随机的把输入序列的一部分掩盖(即变为[mask]标记),让模型来预测这部分盖住地方对应的物品:

与“[mask]”相对应的最终隐藏向量被输入到商品集上的输出softmax中,就像在传统的顺序推荐中一样。最终,我们定义每个masked掉的输入作为masked的目标的negative log-likelihood:

如上所述,在训练过程和最终的序列预测推荐任务之间是不匹配的。因为Cloze task的目的是预测当前被masked的物品,而序列预测推荐的目的是预测未来。为了解决这个问题,在预测阶段我们将masked附加到用户行为序列的末尾,然后根据该masked的最终隐藏表示来预测下一项。为了更好地匹配序列推荐任务(即,预测最后一项),在训练过程中我们还生成了只mask输入序列中最后一项的样本。这个工作就像对序列推荐的微调一样,可以进一步提高推荐性能。

BST(2019年)

论文:Behavior Sequence Transformer for E-commerce Recommendation in Alibaba

在深度兴趣网络(DIN)模型中,通过引入Attention 机制计算用户历史行为序列与当前Item 的相关程度,来刻画用户多样的兴趣分布。但是仅考虑了行为之间的相关性,没有考虑用户历史行为序列的前后顺序。比如,用户是否点击连衣裙,受近期连衣裙相关商品的行为影响较大,而半个月用户买过鞋子影响就微弱了。受Transformer在自然语言处理中取得巨大的效果启发,本文将应用Transformer 用于提取用户行为序列背后的隐藏信息,同时考虑序列的前后顺序,能够更好的表达用户兴趣。

 

Behavior Sequence Transformer Model ( BST) 输入层与其他网络类似,主要输入特征有Item Feature、用户画像、上下文特征、交叉特征经过Embedding 层后concat 在一起。 用户行为序列包含Item ID类特征及对应的position 信息,进行Embedding 处理后输入到Transformer 层捕获用户历史行为与Target Item 之间的相互关系得到用户行为兴趣表达,与其他特征embedding 向量concat 在一起,经过三层MLP层计算得到预测的点击率。

Transformer Layer

Tra nsformer Encoder主要由Multi-Head Attention(多头注意力层)和Feed Forward(全连接层)组成,每部分都包含残差连接、Add&Norm数据归一化。

Multi-Head Attention

其中为对应的参数矩阵,为输入行为序列中每个Item 的embedding 向量。

FFN

在工业界应用中,训练语料都是大规模上亿级数据,为了避免过拟合这里使用dropout 和LeakyReLU作为激活函数:

其中W,b 为可学习的参数,LayerNorm 为标准的数据归一化层。

MIND(2019)

论文:Multi-Interest Network with Dynamic Routing for Recommendation at Tmall

在大规模推荐系统中,无论是在召回阶段还是在Rank阶段,对于用户兴趣的建模是很有必要的。搜索、推荐和广告最为核心的就是精准的捕捉用户的兴趣,为用户推荐他们真正感兴趣的内容(广告也是同理,需要将最优质的广告内容推荐给真正对其感兴趣的目标群体)。从用户历史的一些行为兴趣当中能够有效的获取用户的兴趣,而如何对用户行为兴趣进行有效的建模是非常值得思考的。本文对于单个用户采用多个向量表征其行为特征(label-aware attention);在召回阶段提出MIND模型来捕捉用户不同方面的兴趣(capsule routing)。

主要贡献

  1. 为了捕获用户行为的多样化兴趣,作者设计了multi-interest extractor layer,它可以利用dyniamic routing来自适应地将用户历史行为聚合成用户表示向量。

  2. 通过使用由multi-interest extractor layer和一个新提出的label-aware attention layer生成的用户表示向量(vectors),作者构建一个DNN来做个性化推荐。对比已存在的方法,MIND在多个公开数据集上和天猫上的效果要好一些。

  3. 为了在tmall上部署MIND,作者构建了一个系统来实现整个pipline,包括:data collecting、model training和online serving。部署的系统可以极大提升Tmall APP的ctr。

MIND会使用用户行为、用户profile特征作为输入,输出用户表示向量(vectors)以便在matching stage时做item检索。input layer的ID特征通过embedding layer被转换成embeddings,每个item的embeddings(item_id, cat_id, brand_id都会有embedding)会进一步通过一个pooling layer进行平均。用户行为embeddings被feed给 multi-interest extractor layer ,它会生成interest capsules。通过将interest capsules与user profile embedding进行拼接,并通过一些ReLU layers将concatenated capsules进行转换,可以获得用户表示向量(vectors)。在训练期间,一个额外的 label-aware attention layer 被引入到指导训练过程。在serving时,多个用户表示向量通过一个ANN查询方式被用于检索items。

Multi-Interest Extractor Layer

多兴趣提取层的核心是动态路由算法,这是一种capsules表征学习方式,假设有两层capsules,将第一层看成是low-level capsules,将第二层的capsules看成是high-level capsules。dynamic routing的目标是,给定low-level capsules,以迭代方式计算high-level capsules的值。

Label-aware Attention Layer

通过多兴趣抽取层(multi-interest extractor layer),从用户的行为embeddings可以生成许多的interest capsules。不同的interest capsules表示用户兴趣的不同方面,相关的interest capsule被用于评估在指定items上的用户偏好。因而,在训练期间,MIND设计了一个label-aware attention layer,它基于缩放点积注意力(scaled dot-product attention)机制,可以让target item选择要使用哪个interest capsule。特别的,对于一个target item,将会计算每个interest capsule和target item embedding间的兼容性(compatibilities),并计算一个关于interest capsules的加权求和来作为该target item的用户表示向量,其中,一个interest capsule的权重由相应的兼容性(compatibility)所决定。

DSIN(2019)

论文:Deep Session Interest Network for Click-Through Rate Prediction

大多数已经存在的研究会忽略序列内在的结构:序列由sessions组成,其中sessions是发生时间内独立的用户行为。可以观察到:在每个session中的用户行为是同度同质的,不同sessions间差异很大。基于此观察,提出了新的CTR模型:DSIN,它可以利用在行为序列中的用户多个历史sessions。首先使用self-attention机制以及bias encoding来抽取每个sessions的用户兴趣。接着,应用Bi-LSTM来建模:用户兴趣是如何在sessions间演化和交互的。最后,使用local activation unit来自适应学习多个session interests对target item的影响。实验表明:DSIN效果要好于state-of-the-art模型。

在推荐系统中,用户行为序列包含了多个历史sessions。用户在不同sessions上兴趣不同。另外,用户的session interests相互间有顺序关联。DSIN提出了在每个session上抽取用户的session interest,并捕获session interests间的顺序关系。

DSIN在MLP前包含了两部分。一部分是从User Profile和Item Profile转向后的embedding vectors。另一部分是对User Behavior进行建模,自顶向上具有4个layers:

  1. session division layer,会将用户行为序列划分为sessions

  2. session interest extractor layer:会抽取用户的session interests

  3. session interest interacting layer:会捕获session interests间的顺序关系

  4. session interest activating layer:会对与target item有关的session interests使用local activation unit

Session Division Layer

为了抽取更精准的用户的session interests,我们将用户行为序列S划分成sessions Q。

session interest extractor layer

在相同session中的行为,相互之间强相关。另外,用户在session中的偶然行为会使得该session interest偏离它的原始表示(original expression)。为了捕获在相同session中的行为间的内在关系,并减少这些不相关行为的效果,我们在每个session中使用multi-head self-attention机制。我们也对self-attention机制做了一些改进来更好地达到我们的目的。

session interest interacting layer

用户的session interests会持有带上下文的顺序关系。建模动态变化会增强session interests的表示。Bi-LSTM在捕获顺序关系是很优秀的(此处有疑问?? self-attention也能捕获顺序关系,感觉有些多此一举),很天然地可应用于在DSIN中建模session interest的交互。

Session Interest Activating Layer

与target item更相关的用户的session interests,对于用户是否点击该target item的影响更大。用户的session interests的weights需要根据target item进行重新分配。Attention机制(再做一次attention)会使用在source和target间的soft alignment,被证明是一个很有效的weight allocation机制。

SIM(2020)

论文:Search-based User Interest Modeling with Lifelong Sequential Behavior Data for Click-Through Rate Prediction

本文借鉴了DIN的思想,也就是用与候选item相关的用户行为建模用户对当前预估目标item相关的兴趣。同时又考虑到线上,候选的item直接对全序列进行搜索性能肯定是扛不住的,所以就把整个搜索过程分成了两个阶段,即General Search Unit和Exact Search Unit。General Search Unit是将长度上千的用户行为数据缩减至几百,其中的大部分计算可以离线完成,Exact Search Unit是将缩减后的用户行为进一步进行信息提取,建模出用户对于候选item的兴趣。

General Search Unit的两种实现思路:

  1. Hard Search,无参的方式。直接选出与候选item同类目的用户行为。这样做的原因是电商场景下,item天然具有层级结构,所以直接选出同类目的行为也是合理的。

  2. Soft Search,用参数化的方式,对用户行为和候选item进行向量化,然后用向量检索的方式检索出Top_K个相关的行为(实现方法有Maximum Inner Product Search (MIPS)的方法ALSH)。文中提到因为长期用户行为的分布和短期用户行为的分布不一致,直接使用ctr模型中,短期行为学习到的embedding矩阵,会造成一定的误导,所以对于Soft Search中需要用到的embedding矩阵要单独搭建模型,进行训练。训练数据为超长的用户行为序列,作为ctr的一个辅助任务联合训练,如果行为过长,需要随机采样。

DMT(2020)

论文:Deep Multifaceted Transformers for Multi-objective Ranking in Large-Scale E-commerce Recommender Systems

现有的推荐算法通常基于用户的历史点击序列,通过优化单个任务,来学习商品的排序得分,但很少同时建模用户的多种行为,或多种目标,例如点击率和转化率。推荐算法需要基于用户的多种行为提取用户的不同兴趣,并且在多个目标中同时进行多任务学习。本文提出Deep Multifaceted Transformers(DMT)算法,使用多个Transformers同时建模用户多种行为序列,利用MMoE优化多个目标。另外,探索了消偏学习来减轻训练数据的选择偏差。

DMT包含3部分:

  1. Deep Multifaceted Transformers:为了捕捉用户的多种兴趣,使用独立的Deep Interest Transformers,建模用户的点击序列、购物车序列和购买序列来学习用户相应的短期、中期和长期的兴趣向量。对于每个行为序列,使用Deep Interest Transformer建模用户实时兴趣,将其表示为兴趣向量。encoder建模序列中商品的关系,decoder学习用户关于目标商品的兴趣向量。

  2. Multi-gate Mixture-ofExperts (MMoE) layers:在电商推荐系统中,通常有不同的学习目标,例如CTR、CVR和GMV。排序系统应该能够预估这些不同目标,结合这些目标得到一个最终的排序分数。为了刻画多任务的关系,使用MMoE来进行多目标排序。DMT在Deep Multifaceted Transformers层的输出后添加MMoE

  3. Bias Deep Neural Network:由于曝光的商品来源于之前的排序系统,并且用户会有选择偏差,排序模型使用隐式反馈数据进行训练会是有偏的。本文主要研究了电商系统中的两种选择偏差:Position bias 和Neighboring bias。Position bias是指用户倾向于点击排在靠前的商品。Neighboring bias是指商品被点击的概率受其附近的商品所影响。DMT使用Bias Deep Neural Network建模选择偏差。网络输入是bias特征。

ComiRec(2020)

论文:Controllable Multi-Interest Framework for Recommendation

该论文是阿里在2020年发表在KDD的论文,解决的是序列化推荐的问题,用user以往的行为序列去推荐user接下来最感兴趣的item。这篇论文,认为之前很多序列化推荐方法都最终产生一个user emb去item emb空间中检索出最相关的item,而user在一段时间内,是有多种兴趣的,应该要映射到多个emb去检索。

模型分为多元兴趣模块(multi-interest module)和聚合模块(aggregation module)。多元兴趣模块从用户行为序列中捕捉多种兴趣,可以在大规模的物品池中检索候选的物品集。然后将这些物品输入到聚合模块以获得总体Top-K推荐。并且聚合模块利用可控因素(controllable factor)来平衡推荐的准确性和多样性。

Multi-Interest Extraction模块

作者主要使用两种方法:动态路由法(dynamic routing method)和自注意力机制法(self-attentive method)来作为兴趣提取方法,分别对应的模型称为ComiRec-DR和ComiRec-SA。

Dynamic Routing Method

使用动态路由方法作为用户行为序列的多兴趣提取模块。将用户行为序列的物品embedding列表看作是最初的胶囊(primary capsules),多元用户兴趣看作是兴趣胶囊(interest capsules)。

Self-Attentive Method

这个方法相对于动态路由方法,就特别容易理解了。用了self-attention的机制,给定一个矩阵,表示用户序列的长度,表示每个item的纬度,我们用下式计算attention值来获得权重向量。

是的矩阵,是的矩阵,我们知道最终是的矩阵,最后通过attention矩阵聚合用户序列,计算出:

是的矩阵,表示个兴趣,每个兴趣是维向量。