大家好,我是对白。
最近在做行为序列相关的工作,在这里对看过的论文做个总结。行为序列数据蕴含着用户的兴趣偏好,对该信息的挖掘可以提高推荐结果的准确性。对行为序列的建模可以归纳为两方面,特征工程和模型结构。特征是对某个行为过程的抽象表达,特征工程旨在更精确地刻画行为过程,需要对具体的业务场景有一定理解。构建完特征后,还需要运用合适的技术有效地挖掘数据中的信息,所以特征和模型两者缺一不可。学术界的一些工作往往更侧重模型结构上的排列组合,但是在实际场景中仅仅靠魔改模型结构是很难取得效果的,行为序列相关的工作则很好地兼顾了特征和模型。
一方面,很多技术包括行为序列建模在搜广推领域是通用的,但是应该注意到不同的场景下会有相应的变化。搜索场景中用户的意图是主动明确的,目标是让用户更快找到需要的物品;而推荐场景中用户的意图是被动模糊的,目标是尽可能增加用户的使用时长。场景的差异要求我们在使用某一技术时因地制宜。例如,在搜索场景,由于Prefix或Query的限制,召回的物品得满足相关性,一些向量召回方法就不易发挥用处。另一方面,推荐系统不同阶段的特点对特征和模型也有所限制,例如,召回阶段面对的是海量的候选集,只能上简单的特征和模型粗略选出用户可能会感兴趣的物品,而排序阶段的候选集的规模较小,可以上复杂的特征和模型更精确地预估用户对物品的感兴趣程度。
本文从特征工程与模型结构两方面总结行为序列相关的工作,同时会对搜索推荐场景以及召回排序阶段加以区分。
1. 特征工程
- 1.1 行为类型:点击,收藏,成交等可以分别表示用户的短期,中期,长期兴趣,既可以组织为一个混合序列通过类别特征区分[1],也可以直接组织为多个种类的序列分别建模[2]。用户对近期点击过的商品大概率仍然感兴趣,但对于近期购买过的商品一般短期内不再感兴趣(需求已被满足)。
- 1.2 行为时间
- 该行为距离当前请求的时间差。一般来说,用户当前的兴趣与近期行为过的物品更相关。
- 该行为与下一次行为的时间差[3]。一般来说,时间上越接近的行为过的物品更相关,类似一个Session内行为过的物品更相关。
- 在当前物品上的停留时间。例如,用户在购买某一商品时在详情页的停留时间,停留时间越长一般越感兴趣。
- 1.3 行为场景:对一个商品的点击可以发生在首页推荐,搜索推荐和广告推荐[1],同一种行为在不同场景下含有不同的意义。
- 1.4 物品种类:行为序列中的物品可以是Query,Item,Review[4],Music,Movie,Book,Food等,视业务场景而定。
- 1.5 物品属性:如果只使用物品ID特征,长尾物品在样本和序列中占比都很低,其ID Embedding不容易学好,因此可以加入类目,品牌,店铺等泛化特征[1],同时模型也能学习到更泛化的偏好,例如某一用户更喜欢购买阿迪达斯品牌的商品。
- 1.6 序列划分
- 多种兴趣:用序列模型抽取行为序列信息得到用户的兴趣向量,考虑到序列内物品的异构性,单一的兴趣向量难以精确地表征用户的兴趣偏好[5],例如,某个用户的行为序列内既有服饰类商品又有电子类商品,将对不同类目商品的兴趣融合到一个向量内容易导致“四不像”。一个典型的例子是推荐场景的召回阶段,单一的兴趣向量召回的商品往往比较杂甚至不相关[5]。因此,我们可以对行为序列进行划分,一方面,可以根据某个准则手动划分,例如,根据类目特征将商品分类[3],根据时间窗口划分Session[6](同一Session内的物品更相关);另一方面,也可以使用胶囊网络[6],记忆单元[7]等动态学习兴趣划分。事实上,Multi-head Attention也能学习到这样的多种兴趣[8,9],将学习到的Attention分布可视化就能发现,某个Head下的Attention和时间差强相关,某个Head下的Attention和类目强相关等等,说明模型学习到了用户对商品的多种兴趣偏好。
- 长短兴趣:根据时间跨度可以将序列划分为短期序列和长期序列,分别用来表征用户的短期兴趣和长期兴趣(相对稳定)。一方面,可以设置一个时间窗口划分长短期序列分别学习再做融合[9,10],另一方面,也可以用记忆网络来学习长期兴趣[11]。一般来说,用户当前的行为主要受短期兴趣的影响。
- 1.7 超长序列:加长序列可以引入更丰富的用户历史行为,但是序列模型在处理时计算量大且RT高。因此,一方面,可以根据某个规则快速筛选出超长序列中与Target相关的物品,例如,同一类目下的物品,Embedding接近的物品(LSH)等[12],另一方面,可以合理设计网络结构并利用记忆网络学习,将兴趣向量的更新与候选物品的打分解耦[7]。
2. 模型结构
- 对序列数据的处理非常自然,忽略序列的位置信息可以使用简单的Mean Pooling [13,14],但是位置(时间)信息是刻画用户行为过程的重要特征,因此可以使用CNN/RNN/Transformer等模型处理。目前主流的方法是各种改进的RNN和Attention模型。
- 2.1 RNN:可以分为基础的LSTM,GRU和改进的Attention-RNN,如DIEN[15],DUPN[1]等。RNN可以建模用户的兴趣进化过程,并促进序列中相邻物品的特征交互,但是RNN的计算是串行的容易造成RT高,并且部分场景中用户的兴趣可能是跳跃的,例如,用户购买了Switch后又购买了便携屏,投影仪,塞尔达,前后行为是相关的;但是,也有用户购买了手机后又购买了衣服,零食,前后行为并不相关。
- 2.2 Attention:Attention模型从全局抽取序列信息,缓解了RNN的长程依赖问题,但是Attention本身并不建模位置信息,需要合理设计位置特征Embedding。根据Query的类型,可以分为Self Attention,Target Attention和User Attention;根据Attention计算的方式,可以分为点积模型,双线性模型,加性模型,门控模型,其中门控模型是指运用RNN中计算门控的方式计算Attention向量(区别标量),从而在更细粒度的范围建模重要性差异。
- Self Attention使用序列中每个物品自身作为Query计算Attention,可以建模序列内部物品之间的依赖关系,并且相比RNN是两两物品之间的特征交互,但是Self Attention的计算量大,在部分场景也没什么效果,例如手淘搜索,之前看过一篇美团的博客[16],其中Self Attention离线在线都有效,可能的原因是:在手淘场景中,一是行为序列中的物品非常异构,二是用户的前后行为存在跳跃的现象,不太适合用Self Attention建模。
- Target Attention[14]使用待预测的物品作为Query计算Attention,相当于一种Soft Search,筛选出序列中更符合用户当前意图的信息。例如,一个用户近20天购买了手机,衣服,零食,现在系统需要给用户推荐零食商品(可能是首页推荐,可能是主动搜索),与零食商品不相关的对手机和衣服商品的行为信息就不需要保留在兴趣向量中。但是从特征交互的角度来看,Target Attention缺少了序列内部物品的交互。
- User Attention使用User Embedding作为Query计算Attention,一方面考虑到了用户自身特点对偏好的影响,另一方面加强了用户和物品的特征交互。
- 2.3 胶囊网络:上文提到行为序列中包含了多种兴趣,使用单一的兴趣向量表示存在缺陷,胶囊网络中的动态路由算法可以自动学习这样的兴趣划分,相当于对行为序列进行了自动软聚类。
- 2.4 记忆网络:记忆网络利用外部存储单元来贮存长期信息,同时每个记忆单元又可以看做一个兴趣向量,既可以用来建模多兴趣也可以用来建模长期兴趣。
3. 论文介绍
下面会简单介绍涉及到的论文,虽然文中的实验效果都很漂亮,但是在应用时得结合业务场景具体问题具体分析。
3.1 RecSys’16, YouTube | Deep Neural Networks for YouTube Recommendations [13]
- 问题背景:区别于GBDT+LR等机器学习方法,尝试将深度学习应用于推荐系统
- 业务场景:视频推荐的召回和排序阶段
- 数据处理:对每个用户采样了等量的训练样本,防止活跃的头部用户对模型产生过大的影响。
- 召回阶段
召回模型
- 对序列特征采用简单的mean pooling。
- Example Age是样本产生的时间(线上用户发生点击)距当前训练时刻的间隔,刻画了用户更偏向于浏览新视频的Bias(个人觉得是近期样本更能反映流行趋势)。在线上预测时,该特征置为0。之所以不用视频产生的时间距当前训练时刻的间隔,可能是考虑到该特征的分布太分散了(包含几年前的视频)。这里还对时间特征进行了开方平方,显示地增强模型的非线性能力。
- 离线训练时将得到的User Embedding和View Embedding存储起来,线上服务时通过局部敏感哈希等方法快速召回。
- 相比word2vec预训练的方式(将行为序列视为句子,任务为用中心词重构上下文),这里根据目标任务直接端到端训练,具体的目标任务抽象为预测下一个观看视频。
- 排序阶段
排序模型
- 排序阶段的模型结构和召回阶段基本一致,主要不同点在于特征和目标。
- 特征方面,加入了更多细粒度的特征刻画用户,视频和行为。例如“time since last watch”,自上次观看同频道视频的时间,刻画了用户往往会观看最近同频道的视频。
- 目标方面,广告是YouTube的主要盈利方式,如果仅仅使用CTR预估作为目标任务,会倾向于推荐标题党视频给用户,我们期望可以增加用户观看视频的时长,这样才能在视频中插入广告。具体而言,在训练时采用加权的损失函数,权重与样本的观看时长相关;在线上打分时,使用近似期望观看时长作为打分。
3.2 KDD’18 阿里 | Deep Interest Network for Click-Through Rate Prediction [14]
- 问题背景:Mean pooling的方式忽略了行为序列中的物品相对待打分物品的重要性差异
- 业务场景:广告推荐排序阶段
- 模型结构:对序列数据进行Attention Pooling,Attention的计算方式是Concat+MLP,属于Target Attention,并且还对Q和K进行外积操作,从而增强两者的特征交互。
DIN
- Mini-batch Aware Regularization:个人理解是将对Embedding的L2 Norm Loss限制到了Mini Batch
- Data Adaptive Activation Function:和LReLU函数的不同点在于,一方面将Hard分段方式改为了Soft,另一方面对特征进行了平滑。
Data Adaptive Activation Function
3.3 AAAI’18 阿里 | Deep Interest Evolution Network for Click-Through Rate Prediction [15]
- 问题背景:Attention Pooling忽略了位置(时间)信息,不能建模用户的兴趣进化过程。
- 业务场景:广告推荐排序阶段
DIEN
- Interest Extractor Layer
GRU
- 兴趣抽取层,用GRU抽取序列信息。
- 引入了一个辅助Loss,这里主要是考虑到,行为序列下CTR预估相当于已知1-T次行为,预测T+1次行为,只用T+1次行为作为监督信号更多会作用到第T次行为,对第1-T-1次行为则没那么明显,所以可以人为地将第t+1次的行为作为第t次行为的监督信号。从另一个角度来看,这也促进了行为序列中元素之间的交互(GRU只是单向的)。
- Interest Involving Layer
- 兴趣进化层,将Target Attention引入GRU,过滤掉与待排序的广告不相关的信息。
- 需要注意的是,这里是先用序列中Item的隐状态和待排序的广告Embedding计算一个Attention标量,再将该标量乘以更新门控向量。最终隐藏状态和候选状态,以及每一个维度的重要性,由当前Item隐状态,待排序广告,前一Item隐状态,当前Item原特征(后两者用于计算更新门)共同决定。
3.4 KDD’18, 阿里 | Perceive Your Users in Depth: Learning Universal User Representations from Multiple E-commerce Tasks [1]
- 问题背景:已有工作大多单独优化一个任务,缺少对多个任务的统一建模。多任务可以利用更多样本,对样本稀疏的任务较友好,同时学习到的Embedding泛化性更好。
- 业务场景:商品搜索排序阶段
DUPN
- The Input & Behavior Embedding
- 单个序列数据中混合了多种行为,包括点击,收藏,成交等,通过类别特征进行区分。
- 包含了行为属性特征:行为种类,行为场景(行为发生在搜索,推荐还是广告),行为时间(时间间隔)等。
- ○ 除了Item ID特征(个性化特征),还包含了shop ID,category,tags等特征(泛化性特征),对于长尾Item而言,泛化性特征更重要(样本不充分,ID特征学不好)
- Property Gated LSTM:行为属性特征只参与门控向量的计算,而没有融入最终的隐状态Embedding中。
Property Gated LSTM
- Attention Net:行为属性特征同样只用于Attention的计算,Value是不包含这个特征的。这里是Target Attention+User Attention,q是用户搜索的Query,没有直接用待排序的Item是考虑到计算量的问题,u是User Profile特征。
Attention Net
- Multi-tasks:这里只是简单地共享底层Embedding,对于比较相近的任务容易取得效果,实际上可以用MoME这种更高级的方式。具体而言,多个任务包括:Click Through Rate Prediction,Learning to Rank,Price Preference Prediction,Fashion Icon Following Prediction,Shop Preference Prediction。
- 实验效果
- 行为属性特征对LSTM和Attention的学习都非常重要。
- 在End-to-end Re-training with Single task (RS),End-to-end Re-training with All tasks (RA),Representation Transfer (RT),Network Fine Tuning (FT)中,迁移表征后做Fine-Tune效果最好。个人觉得,这应该和目标场景有关,对于小场景少样本这种类似预训练的方式确实有效,但是对于样本已经很丰富的场景迁移+Fine-Tune的方式不一定有效。