前言
之前两篇讲过稠密特征和多值类别特征加入CTR预估模型的常用处理方法,这篇介绍一下针对序列特征采用的最基本的注意力机制方法。
我们都知道用户在使用APP或网站的时候,用户会产生一些针对物品的行为,比如点击感兴趣的物品,收藏或购买物品等,而这些行为往往代表着用户对这些物品是感兴趣的,而将这些交互过的物品放在时间轴来看,就形成了用户感兴趣的物品序列,如下图所示:
那么如何利用这些用户感兴趣的物品序列来提取到用户的兴趣特征呢?从另一个层面上讲也就是怎样在这些用户感兴趣的物品序列当中提炼出一些共有的属性,而这些属性就能反映出用户当时的兴趣。
方法
(1)分析数据对象
我们要处理的数据对象是用户感兴趣的物品序列,而在用户感兴趣的物品序列中有两方面的信息可以提取,一方面是物品本身的特征信息,另一方面是物品的序列特征信息。可以理解为比如有同样的三个物品,不同的顺序排列代表着他们的序列特征信息不同,但是物品本身的特征信息相同。
(2)模型方法
如图 1 所示,举一个最基本的采用MLP模型的方法来实现的在推荐系统中的排序模型,在这个具体任务中模型的输入是用户的最近 N-1 次行为的数据,包括物品序列和物品本身的特征,模型的输出是一个固定长度的特征向量,用来表示用户的兴趣。因此可以通过计算用户的兴趣特征与候选物品特征的相似性来得到对每个候选物品的打分,从而进行对物品的排序。同样的,在训练阶段如果知道用户下一个交互的物品,可以采用二分类问题进行损失计算从而对网络进行训练。
从图中可以看出,在对物品序列和物品特征序列处理的时候,不是直接采用sum/max/mean pooling进行融合,而是对每个物品和每个物品特征分别进行了加权融合。因为考虑到这样一种情况,比如当前用户要书,那么在用户的历史购买行为中,我们应该去多关注该用户之前都买什么样的书,而该用户在其他方面的购买记录就相对显得没有那么重要。因此基于此想法,权重的计算就是根据当前物品和历史物品序列中每个物品的相似度得到。具体做法是对当前物品的embedding和历史物品序列中每个物品embedding进行点乘,然后再对这些得到的结果进行softmax归一化,得到的结果即为对应每个物品的权重,同理物品特征的权重计算也一样。
上面的介绍中提到了两次相似度计算,一次是计算用户兴趣特征与物品特征的相似度,一次是计算当前物品和历史物品序列中每个物品的相似度,因此在这对相似性的计算方式总结一下,拿第一次为例,其中用户兴趣特征表示为 U,物品特征表示为I:
- inner product :
- bi-linear product :
- consine similarity :
- fully-connected layer :
总结
在对序列特征处理的时候,最简单最便捷的方法是直接对序列进行sum/max/mean pooling操作,而相对复杂有效一些的就是采用注意力机制,对序列进行加权融合,除此之外,还有一些其他有效的方法,比如采用TextCNN,还有RNN以及transformer等,后面有时间一一进行介绍,感兴趣的可以关注一下公众号~
参考文献
[1] Deep learning sequential recommendation systems