本文主要在于精读该论文,提取一些信息,一方面帮助掌握和深入理解模型构建的结构,另一方面大家要结合自己做项目的需求进行总结和拓展,以保模型运用恰当和线上效果。
一、论文和模型整体简介
推荐系统不仅需要获取用户的长期兴趣,还要对用户当前需求做出理解,而用户的长期行为会对最近的点击行为造成影响。目前针对于session的推荐,文中提到要解决的是:①在用户的一个session中,可能存在多种兴趣。②对用户,尤其是活跃用户,其行为丰富,兴趣广泛。那么对这两个问题,提出的解决方法是:用multi-head self-attention去抓取用户多类兴趣,用long-short term gated 融合模型取获取用户长期偏好。之后,对用户推荐商品。
所以针对短期session和长期session进行结合,短期session就是用户最新的兴趣偏好,针对短期sesssion,RNN模型以及RNN+attention结合模型的效果以及得到较好验证,加入attention之后,主要是避免用户的随机行为而导致的兴趣震荡。但是,他们忽略了一个这些兴趣的多方面描述,比如种类、品牌、颜色、店铺评价等,这也就描述了一个用户的决策过程,所以使用multi-head。
在SDM模型中,最终采用采用multi-head self attention 来抓取用户短期session的多方面的偏好,并结合gating机制来将长期偏好结合起来。使用一个gated fusion 模块去将长期和短期偏好结合起来。和一般的标量化的attention不同,用gate vector对复杂的神经网络来说,更有代表能力,其效果也好于层次attention结构。
二、模型详细说明
对SDM结构有了大概的了解后,下面看论文中的模型结构。
我们将两张图结合来看,从而理解SDM模型结构:
① 短期行为: 上下图中蓝框部分,用户最近(latest)的session为short-term behavior,这部分构成Su,这部分通过多输出的LSTM,再通过multi-head attention,关于attention机制,大家可以看下这篇blog,
(https://cloud.tencent.com/developer/article/1153079),再使用用户embedding vector eu 作为attention的query,最后得到用户短期vector s,attention network是累积多种向量到一个整体的表示,其实就是对每一种向量设置不同的权重,文中公式如下:
② 长期行为:上下图中绿框部分,用户过去7天的session为long-term behavior,文中使用用户浏览的商铺id,品牌id等,构成各自的set集,再使用用户embedding vector eu 作为attention的query,最后得到用户长期vector pu,文中公式如下:
③ 用户向量:将长期和短期数据经过gated神经网络结合起来。
④ 训练目标:目标为预测t+1时刻用户对每一个商品的分数。
⑤ 商品向量:商品向量为随机初始化,或者提前训练好,作为输入向量v。
⑥ 联合训练:将用户向量o和商品向量v,通过softmax层,再通过神经网络的feedback即可。
文中产生session的方法为:
①用session id来进行不同session的标记和划分
②间隔小于十分钟的,划分为同一个session
③一个session中最大长度为50,大于50的就重造下一个session
训练集构造:
① 样本:t时刻的正样本就是下一时刻用户点击的商品,注意训练数据的选取很重要,需要剔除一些用户和商品。
② 负样本:从所有商品池进行的log-uniform采样,而不是每个batch下
③ loss函数:softmax层后进行交叉熵,注意这里y=softmax(score)
④ 模型评价就是一般二分类用的查准率,查全率,F1,线上用pCTR,pGMV,和discovery。
三、其他说明
文章中的一些其他说明:
① 对于商品序列,采用平均polling层,会忽视商品内在的联系,从而使得推荐效果下降,所以使用weighted sum pooling。
② 使用user vector来进行attention部分的query,是因为不同用户对商品的侧重点不同,即利于推荐的千人千面。