今天给大家介绍的论文是:《SDM: Sequential Deep Matching Model for Online Large-scale Recommender System》
论文下载地址:
https://arxiv.org/abs/1909.00385v1
像淘宝这样的大规模的推荐系统,需要快速和准确的响应用户当前的需求。淘宝推荐系统一般采用两阶段的方式。首先在召回阶段召回可能的候选集,然后在排序阶段进行精准排序推荐。
目前在淘宝的召回模型中,基本上采用的模型的基础是基于物品的协同过滤模型。但是协同过滤模型只能考虑用户的静态兴趣,而不能捕获用户的动态兴趣。这些兴趣主要通过用户的行为来体现。
在淘宝的场景中,用户的行为主要分为两种,第一个是当前的浏览session,用户在一个session中,需求往往是十分明确的,比如你想买球鞋,往往只会关注球鞋类的商品。另一个是之前的记录,一个用户虽然可能不是每次都来买球鞋,但是也可能提供一定的有用信息,比如用户只买阿迪的鞋子或者只买帆布鞋等等。因此分别建模这两种行为序列来刻画用户的兴趣,是十分有用的。
接下来,我们就来学习下如何分别刻画用户的两种行为序列,以及如何将二者融合,并最后进行物品召回的。
用户集合U和物品集合I就不说啦,然后我们主要看看对用户行为序列的划分,按照session进行划分的规则如下:
1)日志中标记了同样的session ID2)虽然session ID不相同,但是相邻的行为间隔小于10min3)最长的session长度为50,超过50的划分到前一个session(我猜测是从后往前划分session 的吧)
基于上述规则,用户最近一个session的行为被认为是短期行为,表示如下:
m是序列的长度,而与Su相隔一周以内的行为认为是用户的长期行为Lu。
根据如上定义,整个的匹配框架如下:
基于用户的短期行为,通过模型计算得到向量表示su,基于用户的长期行为,得到向量表示pu,二者在进行融合,最终得到用户的行为表示ou。通过ou和每个物品对应的向量vi计算匹配分数,并根据分数高低进行召回:
在淘宝的推荐中,用户不仅仅关注物品本身,一些属性如品牌、店铺、价格等都是用户关注的属性。因此,我们使用不同的属性来刻画物品,如物品ID、叶子结点分类、一级分类、品牌、店铺等等,并将不同属性对应的embedding进行拼接得到物品的embedding表示:
同样的,用户也有对应的属性,如年龄区间、性别、蜂窝(学生/白领等等)。用户的embedding如下:
短期行为建模的整体过程如下:
对于短期行为,即用户最近的一个session里的行为。在将物品转换为embedding后,首先通过LSTM来进行建模:
这样,每一个物品又一个对应的hidden state的输出h。接下来,是最近经常被使用的multi-head attention,主要有两点原因:
1)用户的行为中存在一些误点击行为,通过self-attention来降低这种影响;2)用户可能对不同物品的关注点不同。
个人感觉前面的LSTM有点多余,可以在multi-head attention中加入序列信息的吧,这样性能可能好一点。而multi-head attention的过程咱们就不多说了,可以参考我之前的文章通俗易懂!使用Excel和TF实现Transformer!。经过multi-head attention,对应的序列输出为:
随后又是一层attention,这一次主要的关注点是用户可能对不同的物品偏好程度不同:
这样,用户的短期行为我们就通过一个向量su表示了。
对于长期行为,咱们不像刚才那么搞,主要是性能撑不住啊,还像短期行为那么搞的话,有点像之前介绍的DSIN模型,参数有点多。我们主要关注的点在于通过长期行为来从不同角度来刻画用户的兴趣,比如用户经常逛某种类型的店铺、经常复购同一类型的商品等等。因此把长期行为中的所有物品对应的属性集合划分为不同的set,如物品IDset、物品店铺set、物品品类set等等。下图展示了长期行为的建模过程:
对于不同的set,都经过一个attention层进行建模,如用户可能对不同的店铺偏好程度不同,对不同的品类偏好程度不同:
这样每一个set可以得到一个对应的向量,进行拼接后再经过一层全连接层得到用户的长期行为表示:
接下来的过程就很巧妙了,并非将长短期兴趣向量直接拼接,而是借鉴了LSTM或GRU中的门的概念,对短期兴趣向量和长期兴趣向量进行一个加权,过程如下:
具体的计算过程如下:
这样我们就得到了用户的兴趣表示ou。
得到了用户的兴趣表示ou之后,根据日志我们可以得到用户下一个交互的物品,作为正例,接下来,采样K-1个负例物品。将K个物品对应的embedding,分别于用户兴趣表示计算内积,作为每个物品的得分。并最终通过softmax和交叉熵来计算损失,并进行模型训练:
最后再来看一下整个模型的结构:
本文的实验的代码和数据地址在:https://github. com/alicogintel/SDM.
数据集选择的是淘宝和京东的两个数据集。离线实验的评价指标包括HITRatio、精确率、召回率、F1值:
而线上模型的评价指标主要有三个CTR、GMV和Discovery:
离线效果如下:
除了基准的模型外,SDM模型有许多变体,这里也简单介绍一下:
在线效果对比如下,pCTR、pGMV和discovery分别提升了7.04%, 4.50% and 24.37%: