用户行为序列是推荐系统中最重要的一类特征,比如用户的点击序列、观看序列等等。
一、行为序列信息构成
序列中每个元素的embedding由多个部分拼接而成,以下为两个主要部分:
1、物料ID的embedding。
2、时间差信息。即物料消费的时间与当前时间的时间差值。
3、其他信息,比如观看视频的一些元信息(比如作者、来源、分类等)还有动作程度(比如观看时长、观看次数等)。
二、简单pooling
要将用户行为序列压缩成一个embedding,最简单的方式是按位操作(element-wise)。
1、Sum pooling:
2、Average Pooling:
3、Weighted-sum Pooling:,权重由时间差或者动作程度等来决定。
简单pooling得到的用户兴趣是固定的,因此在召回和粗排中仍是最常见的选择,而对于精排就稍显不足。
三、用户建模要千物千面
(一)简单pooling存在的问题
①简单pooling得到的用户兴趣是固定的。
②将所有元素一视同仁,然而不同的历史行为对当下的决策影响程度是不一样的。比如说当前展示的商品是泳镜,那么更多依赖于用户曾经购买泳衣的历史记录。比如当前展示商品是蓝牙耳机,更多依赖于用户曾经购买手机的历史记录。
(二)阿里巴巴DIN模型:Deep Interest Network
DIN提取用户兴趣的结构如下所示:
![](https://i-blog.csdnimg.cn/direct/8f662794440b41ef99c188dab6572550.png)
1、DIN的核心思想
- 其中UE表示user emebdding,下标u和t表示用户兴趣向量取决于用户u和候选物料t。
- h_j是用户行为历史序列中第j个物料的embedding。
- w_j是第j个物料的权重,由h_j和当前候选物料t共同决定。A(·)是生成w_j的函数。
2、DIN的attention
实际上就是拿当前候选物料t当做query,对用户历史行为序列(h_1,...,h_N)做attention,最终可以压缩得到一个表示用户对当前物料兴趣的embedding向量。
也可以拿用户行为序列中最后一个交互的item作为query对整个序列进行attention操作,因为最后交互的item能够反映用户最近的兴趣,可以用来衡量序列中其他物料的重要性。
四、建模序列内的依赖关系
虽然DIN可以实现用户兴趣的千物千面,但是给出的用户兴趣向量只体现了用户序列和候选物料的信息交叉,没有挖掘用户序列内部信息。比如用户曾购入平板电脑和手机,这两个历史行为的交叉组合是很有用的。
目前对用户行为序列建模较为常见的方法是:双层attention,结构如下所示:
![](https://i-blog.csdnimg.cn/direct/bb96a9a99da04689a489c1dd9fac337b.png)
双层attention对用户行为序列建模主要分为以下两步:
1、用multi-head self-attention对用户行为序列内部依赖建模。输入是用户行为序列中各物料的原始特征向量,输出是融合了用户行为序列中各物料的交叉信息。
2、而后将self-attention的输出喂给DIN得到最终的用户兴趣结果。
代码简述:第一个attention操作中,Q\K\V都是用户行为序列;第二个attention中Q是候选物料,K\V是第一步得到的结果。
五、建模长序列
由于推荐系统对于用户行为长期行为序列有需求,因此用户提取兴趣向量的时机,可以分为动态在线和静态离线两种。
(一)在线提取用户兴趣
1、SIM模型结构
在线派的代表是阿里巴巴的SIM模型(Search-based Interest Model,基于搜索的兴趣模型),结构如下所示:
![](https://i-blog.csdnimg.cn/direct/b28ef6d706a64854a38df1c1654cce04.png)
其中DIN是通过候选物料和用户历史行为序列的信息交叉提取到的用户兴趣。在DIN中,与候选物料相似的历史物料的权重值会高些,通过这种方式来进行软过滤。然而由于DIN对长历史序列进行attention操作的代价过高,因此引入GSU(General Search Unit,通用搜索单元)对长历史序列进行硬过滤得到与候选物料相似的子用户行为序列SBS(subuser behaviour sequence)。而后将候选物料和SBS喂入DIN,得到最终的用户兴趣表达,这个模块被称为ESU(Exact search unit,精确搜索单元)。
而在GSU进行的搜索包含两种类型,硬搜索和软搜索。
2、硬搜索Hard Search
①硬搜索的作用
举个简单的例子,比如候选物料的属性标签为衣服,那么硬搜索能做到的就是在用户长期行为序列中找出属性标签同样为衣服的物料组成SBS。
②基于UBT的硬搜索
在SIM模型中,硬搜索主要借助于UBT(User Behaviour Tree,用户行为树)来实现,实际上是通过两层hash来检索。第一层hash的key是userid,第二层hash的key是某个属性,第二层的value就是符合相应属性的SBS。
![](https://i-blog.csdnimg.cn/direct/6b1f1325f6a54192906a4093cbca1020.png)
3、软搜索Soft Search
①软搜索的实现
硬搜索是借助于物料标签进行精确搜索,而软搜索则借助于候选物料的embedding进行模糊搜索。通过ANN(Approximate Nearest Neighbour,近似最近邻)搜索算法实现,来在长序列搜索得到与候选物料相似的SBS。
②软搜索的问题
- 软搜索的关键在于如何获取候选物料的embedding。
- 短序列的item embedding不能复用于长序列行为建模。
③加速软搜索的技术
得到item embedding以后,喂给Faiss这样的向量数据库,离线建立好索引,便于加速在线预测和训练时的soft search。
注:
①SIM模型的动态在线体现在,对于不同的候选物料,GSU筛选出来的SBS不同,获得的兴趣向量也是不同的,从而实现千物千面。
②硬搜索和软搜索都需要维护一套离线索引,来加速搜索的过程。
![](https://i-blog.csdnimg.cn/direct/04ae1aead5204a15938bd264216b8337.png)
(二)离线预训练用户兴趣
可以将用户长期兴趣离线挖掘好,缓存起来以供在线训练时使用。
有两种常见方式被采用:人工统计长期兴趣和离线预训练模型来提取用户长期兴趣。
1、人工统计长期兴趣
对某些标签、属性进行统计其CTR、动作程度等,来获取其长期兴趣。
2、离线预训练模型来提取用户长期兴趣
①离线预训练模型描述
- 离线预训练一个模型,输入用户长期行为序列,输出为表示用户长期兴趣的embedding向量。
- 当用户行为序列超过一定的长度以后,喂给离线预训练模型提取出用户长期兴趣向量,再保存到Redis等K-V数据中,key是UserID,value就是其长期兴趣向量,等到在线训练的时候再提取。
- 对于用户长期兴趣向量和离线预训练模型不需要频繁更新,而短期发生的交互行为可以使用双层attention、DIN等。
- 美团对于长期兴趣提取就是采用这种方式。
②离线预训练模型的构建:双塔
- 输入是三元组(用户a的长期行为序列,用户a的短期行为序列,用户b的短期行为序列)。
- 将用户a的长期行为序列喂入左塔得到用户a的长期兴趣向量,用户a的短期行为序列和用户b的短期行为序列喂给右塔得到用户a和b的短期兴趣向量。
- 建模目标是,同一个用户的长期和短期兴趣尽可能相似(同个用户的长短期兴趣向量的余弦尽可能大),不同用户的长短期兴趣尽可能不同(不同用户的长短期兴趣向量的余弦尽可能小)。
![](https://i-blog.csdnimg.cn/direct/0a53b7d3ba304b4b981908c284242b54.png)
③离线预训练模型的优缺点
- 优点:不会增长线上耗时,实现简单。
- 缺点:提取出来的用户长期兴趣向量是固定的,没有与候选item交叉。