推荐系统中的常用算法——序列深度匹配SDM

1. 概述

推荐系统中的算法通过用户的历史行为数据挖掘用户的偏好,实现对用户偏好的建模,从而达到为用户推荐用户感兴趣的item。用户的兴趣偏好通常是多变的,而且是多样的。然而传统的基于item的协同过滤模型只能考虑用户的静态兴趣,而不能捕获用户的兴趣偏好的动态变化。

序列深度匹配(Sequential Deep Match,SDM)模型是在特定场景下提出的用于对用户动态兴趣偏好建模的算法。SDM模型应用于淘宝的场景中,在淘宝的场景中,用户的行为主要分为两种,第一个是当前的浏览Session,用户在一个Session中,需求往往是十分明确的。另一个是之前的历史行为,一个用户虽然可能不是每次都来买球鞋,但是也可能提供一定的有用信息。因此需要分别对这两种行为序列建模,从而刻画用户的兴趣。

综上,序列深度匹配SDM通过组合用户短期Session和长期行为捕获用户的动态兴趣偏好,实现对用户兴趣的建模。

2. 算法原理

序列深度匹配SDM的模型结构如下图所示:
在这里插入图片描述

其中,对于用户 u u u,通过对长期行为 L u L^u Lu,得到向量 p u \boldsymbol{p^u} pu,对短期行为 S u S^u Su建模得到向量 s t u \boldsymbol{s_t^u} stu,并通过fusion gate策略将两部分组合在一起,从而得到向量 o t u ∈ R d × 1 \boldsymbol{o_t^u}\in \mathbb{R}^{d\times 1} otuRd×1,该向量便是用户的兴趣向量。

假设 V ∈ R d × ∣ I ∣ \boldsymbol{V}\in \mathbb{R}^{d\times \left | I \right |} VRd×I为item的embedding向量,其中 ∣ I ∣ \left | I \right | I为item的总数, d d d为embedding的维数。目标是在 t + 1 t+1 t+1时刻预测top N的候选集,候选集是基于 o t u \boldsymbol{o_t^u} otu和每个物品对应的向量 v i \boldsymbol{v}_i vi计算匹配分数,并根据分数高低进行召回,分数的计算方法为:

z i = s c o r e ( o t u , v i ) = o t u T v i z_i=score\left ( \boldsymbol{o_t^u},\boldsymbol{v}_i\right )={\boldsymbol{o}_t^u}^T\boldsymbol{v}_i zi=score(otu,vi)=otuTvi

2.1. 长短期Session的划分

对于用户行为序列的划分,文章中给出了按照session的划分规则:

  • 具有同样的Session ID的记录为同一个Session;
  • Session ID不同,但是相邻的行为间隔小于10min,算同一个Session;
  • Session的最大长度为50,超过50的划分到新的Session。

基于上述的Session划分规则,用户 u u u最近一个Session的行为被认为是短期行为,表示为:

S u = [ i 1 u , ⋯   , i t u , ⋯   , i m u ] S^u=\left [ i_1^u,\cdots ,i_t^u,\cdots ,i_m^u \right ] Su=[i1u,,itu,,imu]

其中, m m m为序列的长度,而用户的长期行为序列为 S u S^u Su之前的7天的行为,记为 L u L^u Lu

2.2. item和user的Embedding表示

在构建item的embedding时,不仅考虑到ID特征,同时还包括了leaf category,first level category,brand和shop等side information,最终item的向量表示为

e i t u = c o n c a t ( { e i f ∣ f ∈ F } ) \boldsymbol{e}_{i_t^u}=concat\left ( \left \{ \boldsymbol{e}_i^f\mid f\in \mathcal{F} \right \} \right ) eitu=concat({eiffF})

同样的,用户也有对应的属性,如age,gender,life stage。最终user的向量表示为

e u = c o n c a t ( { e u p ∣ p ∈ P } ) \boldsymbol{e}_u=concat\left ( \left \{ \boldsymbol{e}_u^p\mid p\in \mathcal{P} \right \} \right ) eu=concat({euppP})

2.3. 短期行为建模

短期行为建模的整体过程如下图所示:

在这里插入图片描述

短期行为是用户在最近的一个Session里的行为。短期行为建模分为三个部分,分别为LSTM建模,Multi-head Self-Attention建模和User Attention。

2.3.1. LSTM

在将物品转换为Embedding向量后,首先通过LSTM来进行建模,LSTM的建模过程如下图所示:
在这里插入图片描述
对于给定的的用户短期行为序列 [ e i 1 u , ⋯   , e i t u ] \left [ \boldsymbol{e}_{i_1^u},\cdots , \boldsymbol{e}_{i_t^u} \right ] [ei1u,,eitu],通过LSTM建模的结果为:

在这里插入图片描述

其中, i n t u \boldsymbol{in}_t^u intu f t u \boldsymbol{f}_t^u ftu o t u \boldsymbol{o}_t^u otu分别表示输入门,遗忘门和输出门。 h t u ∈ R d × 1 \boldsymbol{h}_t^u\in \mathbb{R}^{d\times 1} htuRd×1表示的是LSTM在 t t t时刻隐藏层的输出。

2.3.2. Multi-head Self-Attention

在经过LSTM对短期行为序列建模后,得到所有隐含层的输出 X u = [ h 1 u , ⋯   , h t u ] \boldsymbol{X}^u=\left [ \boldsymbol{h}_1^u,\cdots ,\boldsymbol{h}_t^u \right ] Xu=[h1u,,htu]。接下来,使用Multi-head Self-Attention对此行为序列建模,目的是能够捕获到用户多种类型的兴趣。Multi-head Self-Attention的建模过程如下所示:

在这里插入图片描述

假设Multi-head Self-Attention建模后的结果为 X ^ u = [ h ^ 1 u , ⋯   , h ^ t u ] \boldsymbol{\hat{X}}^u=\left [ \boldsymbol{\hat{h}}_1^u,\cdots ,\boldsymbol{\hat{h}}_t^u \right ] X^u=[h^1u,,h^tu],则 X ^ u \boldsymbol{\hat{X}}^u X^u可以表示为:

X ^ u = M u l t i H e a d ( X u ) = W O c o n c a t ( h e a d 1 u , ⋯   , h e a d h u ) \boldsymbol{\hat{X}}^u=MultiHead(\boldsymbol{X}^u)=\boldsymbol{W}^Oconcat\left ( \boldsymbol{head}_1^u,\cdots ,\boldsymbol{head}_h^u \right ) X^u=MultiHead(Xu)=WOconcat(head1u,,headhu)

其中, W O ∈ R d × h d k \boldsymbol{W}^O\in \mathbb{R}^{d\times hd_k} WORd×hdk h h h表示head的个数, d k = 1 h d d_k=\frac{1}{h}d dk=h1d。对于每一个 h e a d i u ∈ R d k × t \boldsymbol{head_i^u}\in \mathbb{R}^{d_k\times t} headiuRdk×t表示
每一个兴趣,其计算方法为:

h e a d i u = A t t e n t i o n ( W i Q X u , W i K X u , W i V X u ) \boldsymbol{head_i^u}=Attention\left ( \boldsymbol{W}_i^Q\boldsymbol{X}^u,\boldsymbol{W}_i^K\boldsymbol{X}^u,\boldsymbol{W}_i^V\boldsymbol{X}^u \right ) headiu=Attention(WiQXu,WiKXu,WiVXu)

其中, W i Q X u \boldsymbol{W}_i^Q\boldsymbol{X}^u WiQXu W i K X u \boldsymbol{W}_i^K\boldsymbol{X}^u WiKXu W i V X u \boldsymbol{W}_i^V\boldsymbol{X}^u WiVXu分别表示上图中的Q,K,V。令 Q i u = W i Q X u \boldsymbol{Q}_i^u=\boldsymbol{W}_i^Q\boldsymbol{X}^u Qiu=WiQXu K i u = W i K X u \boldsymbol{K}_i^u=\boldsymbol{W}_i^K\boldsymbol{X}^u Kiu=WiKXu V i u = W i V X u \boldsymbol{V}_i^u=\boldsymbol{W}_i^V\boldsymbol{X}^u Viu=WiVXu,则 h e a d i u \boldsymbol{head_i^u} headiu为:

h e a d i u = V i u A i u T \boldsymbol{head_i^u}=\boldsymbol{V_i^u}{\boldsymbol{A}_i^u}^T headiu=ViuAiuT

其中, A i u = s o f t m a x ( Q i u T K i u ) \boldsymbol{A_i^u}=softmax\left ( {\boldsymbol{Q}_i^u}^T\boldsymbol{K}_i^u \right ) Aiu=softmax(QiuTKiu)

2.3.3. User Attention

对于不同的用户,即使短期的行为序列是一样的,也可能会存在不同的兴趣偏好,为了能够更精准的挖掘用户偏好,使用Attention机制计算不同用户兴趣的偏好,Attention机制如下图所示:

在这里插入图片描述

对于用户的多种兴趣 X ^ u = [ h ^ 1 u , ⋯   , h ^ t u ] \boldsymbol{\hat{X}}^u=\left [ \boldsymbol{\hat{h}}_1^u,\cdots ,\boldsymbol{\hat{h}}_t^u \right ] X^u=[h^1u,,h^tu],通过与用户向量 e u \boldsymbol{e}_u eu计算 t t t时刻的兴趣偏好向量 s t u \boldsymbol{s_t^u} stu

s t u = ∑ k = 1 t α k h ^ k u \boldsymbol{s_t^u}=\sum_{k=1}^{t}\alpha _k\boldsymbol{\hat{h}}_k^u stu=k=1tαkh^ku

其中 α k = e x p ( h ^ k u T e u ) ∑ k = 1 t e x p ( h ^ k u T e u ) \alpha _k=\frac{exp\left ( {\boldsymbol{\hat{h}}_k^u}^T\boldsymbol{e}_u \right )}{\sum_{k=1}^{t}exp\left ( {\boldsymbol{\hat{h}}_k^u}^T\boldsymbol{e}_u \right )} αk=k=1texp(h^kuTeu)exp(h^kuTeu)

2.4. 长期行为建模

对于长期行为序列,文章中提出从不同角度来刻画用户的兴趣,比如品牌,类别等。因此把长期行为中的所有物品对应的属性集合 L u = { L f u ∣ f ∈ F } \mathcal{L}^u=\left \{ \mathcal{L}^u_f\mid f\in \mathcal{F} \right \} Lu={LfufF}划分为不同的子集合,如ID子集合 L i d u \mathcal{L}^u_{id} Lidu、leaf category子集合 L l e a f u \mathcal{L}^u_{leaf} Lleafu,first level category子集合 L c a t e u \mathcal{L}^u_{cate} Lcateu,shop子集合 L s h o p u \mathcal{L}^u_{shop} Lshopu、brand子集合 L b r a n d u \mathcal{L}^u_{brand} Lbrandu。下图展示了长期行为的建模过程:

在这里插入图片描述
通过AttnNet计算在每个子集合上的向量 z f u z_f^u zfu

z f u = ∑ k = 1 ∣ L f u ∣ α k g k u z_f^u=\sum^{\left | \mathcal{L}^u_f \right |}_{k=1}\alpha _k\boldsymbol{g_k^u} zfu=k=1Lfuαkgku

其中, g k u = W f f k u ∈ R d × 1 \boldsymbol{g_k^u}=W^ff_k^u\in \mathbb{R}^{d\times 1} gku=WffkuRd×1 α k = e x p ( g k u T e u ) ∑ k = 1 ∣ L f u ∣ e x p ( g k u T e u ) \alpha _k=\frac{exp\left ( {\boldsymbol{g_k^u}}^T\boldsymbol{e}_u \right )}{\sum_{k=1}^{\left | \mathcal{L}^u_f \right |}exp\left ( {\boldsymbol{g_k^u}}^T\boldsymbol{e}_u \right )} αk=k=1Lfuexp(gkuTeu)exp(gkuTeu)

最终,将 z f u z_f^u zfuconcat在一起输入到全连接网络中,得到长期兴趣 p u = t a n h ( W p z u + b ) \boldsymbol{p^u}=tanh\left ( \boldsymbol{W}^pz^u+b \right ) pu=tanh(Wpzu+b),其中 z u = c o n c a t ( { z f u ∣ f ∈ F } ) z^u=concat\left ( \left \{ z_f^u\mid f\in \mathcal{F} \right \} \right ) zu=concat({zfufF})

2.5. 兴趣融合

为了将长短期兴趣向量组合在一起,文中借鉴了LSTM中的门的概念,对短期兴趣向量和长期兴趣向量进行一个加权,过程如下:

G t u = s i g m o i d ( W 1 e u + W 2 s t u + W 3 p u + b ) \boldsymbol{G}_t^u=sigmoid\left ( \boldsymbol{W}^1\boldsymbol{e}_u+\boldsymbol{W}^2\boldsymbol{s}_t^u+\boldsymbol{W}^3\boldsymbol{p}^u+b \right ) Gtu=sigmoid(W1eu+W2stu+W3pu+b)

o t u = ( 1 − G t u ) ⊙ p u + G t u ⊙ s t u \boldsymbol{o}_t^u=\left ( 1-\boldsymbol{G}_t^u \right )\odot \boldsymbol{p}^u + \boldsymbol{G}_t^u\odot \boldsymbol{s}_t^u otu=(1Gtu)pu+Gtustu

2.6. 总结

序列深度匹配SDM通过组合用户短期Session和长期行为捕获用户的动态兴趣偏好,实现对用户兴趣的建模,完整的模型结构如下图所示:

在这里插入图片描述
在短期兴趣建模过程中,使用LSTM,Multi-head Self-attention和User Attention建模,在长期兴趣建模过程中,使用User Attention对子集合建模,最终通过gate函数融合长短期兴趣。

3. 疑问

在本文中短期兴趣建模的过程中,作者先用LSTM建模,作者给出的理由是在之前的基于Session的推荐中,效果较好;后面使用Multi-head Self-attention建模,是为了构建用户的多个兴趣维度。这里Multi-head Self-attention也可以直接对序列建模,不知道为什么需要在这里同时使用LSTM+Multi-head Self-attention。这一点在文中并没有给出具体解释。

参考文献

©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页