CIKM'21 推荐系统:CBML | 基于聚类的元学习序列推荐

178 阅读5分钟

title:CBML: A Cluster-based Meta-learning Model for Session-based Recommendation
link:dl.acm.org/doi/pdf/10.…
from:CIKM 2021

PS:喜欢的小伙伴记得三连哦,感谢支持
更多内容可以关注公众号:秋枫学习笔记

1. 导读

本文这主要是用于会话推荐的推荐方法,该方法主要针对冷启动方面,提出了对应的解决方式。主要包含两个方面,分别是基于自注意力转换模式学习和基于聚类的元学习。自注意力部分还是集中在挖掘序列之间的关系的部分,缓解冷启动问题还是在元学习部分。 考虑聚类,加入冷启动的商品被划分到了某一个聚类当中,那么我们就可以采用这个聚类中的信息来促进冷启动商品的预测,主要是这样的思想,具体见4.3。

2. 问题定义

去重后的商品集合为V={v1,...,vV}V=\{v_1,...,v_{|V|}\},匿名会话集合为U={u1,...,uU}U=\{u_1,...,u_{|U|}\},每个会话里包含了一组点击序列ui={x1,...,xm}u_i=\{x_1,...,x_m\},按时间排序,其中xtVx_t \in V表示t时间点击的商品。会话推荐就是基于序列uiu_i预测xm+1x_{m+1}可能的商品,从所有商品中,选出预测概率top-n的。

3. 元学习设置

把会话看成一个任务。将会话集合划分为训练集TtrainT^{train}和测试集TtestT^{test},对于每个序列ui={x1,...,xm}TtrainTtestu_i=\{x_1,...,x_m\} \in T^{train} \cup T^{test},生成m-2个子序列如下,这些作为支持集DutrainD^{train}_u,原序列作为查询集DutestD_u^{test}

({x1},x2),({x1,x2},x3),...,({x1,...,xm2},xm1)(\{x_1\},x_2),(\{x_1,x_2\},x_3),...,(\{x_1,...,x_{m-2}\},x_{m-1})

4. 方法

4.1 概览

image.png 如图所示为模型的整理流程,首先,IF-SAN集成了一个基于商品的自注意力块和一个基于特征的自注意力块来捕获在商品方面和特征方面的会话的转换模式,以获得用户更细粒度的顺序意图;针对冷启动,利用元学习为模型提供更好的初始参数。

4.2 序列推荐模型

本文所提的IF-SAN包含:商品级和特征级的embedding层,包含参数θe\theta^e;商品级自注意力块和特征级自注意力块,参数θs\theta^s,预测层,参数θpre\theta^{pre}

4.2.1 embedding层

用户序列u={x1,...,xn}u=\{x_1,...,x_n\},n是预先设置好的,如果序列长度小于n,则用0填充。然后look-up层将向量转换为embeddingexie_{x_i}。 对于商品的属性,采用同样的方式对得到属性的embedding,ai={vec(ri),vec(bi),vec(li)}a_i=\{vec(r_i),vec(b_i),vec(l_i)\},他们分别表示商品的类型,品牌和卖家的稠密表征。 由于不同属性对最终的决策用不同的影响,因此此处作者采用vanilla注意力机制,求其加权和,公式如下, αi=softmax(Wfai+bf)\alpha_i=softmax(W^fa_i+b^f) eai=αiaie_{a_i}=\alpha_ia_i

4.2.2基于特征/商品的自注意力层

image.png 用自注意力机制挖掘特征-特征/商品-商品的转换模式商品和特征的这两个模块计算方式是一样的,只是输入不一样,这里所说的特征就是商品的属性表征。如图所示为其计算流程,可以发现和transformer的编码层有点类似。具体这里不做过多介绍,看图就一目了然了。 为了捕获用户的长期兴趣和短期兴趣,将多层SAN后得到的输出FualF_{ua}^l和最后一个非0的特征表征eame_{a_m}(商品部分也一样)按比例结合得到最终的表征SualS_{ua}^l,其中w为可学习参数。 Sual=waFual+(1wa)eamS_{ua}^l=w_aF_{ua}^l+(1-w_a)e_{a_m}

4.2.3 预测层

将商品和特征得到的最后表征Suxl,SualS_{ux}^l,S_{ua}^l拼接得到SuR2dS_u \in \mathbf{R}^{2d},经过FC与需要判断的商品的embeddingevie_{v_i}做点积计算分数。 y^ui=FCθpre(Su)eviT\hat{y}_{ui}=FC_{\theta^{pre}}(S_u)e_{vi}^T

4.3 基于聚类的元学习优化

这部分主要是用元学习和参数ϕ\phi(这里包括后续的g,w等)来缓解冷启动问题,主要包含两部分:任务聚类和聚类感知的参数门。

  • 前者利用软聚类方法在训练会话中生成簇,由于相似的用户具有相似的偏好,表明了密切相关会话之间的泛化,每个会话都可以获得一个聚类增强表示,其中包含会话被归类到的集群的共享特征
  • 后者将全局共享参数的初始化引导到每个聚类,使得初始化可以为属于该集群的所有会话服务。

4.3.1 任务聚类

尽管已经存在针对推荐问题的元学习方法和聚类方法,但没有人将这两种方法的优点结合起来。会话中的冷用户没有足够的记录来获得足够的偏好。而聚类方法可以帮助在相似的会话之间迁移共享知识,而元学习方法可以通过多个会话学习通用知识,这些知识可以快速适应新会话。因此,适合将聚类方法与元学习方法结合来解决冷启动问题。 首先,为每个会话分配聚类,对上面拼接得到的SuS_u经过FC得到查询向量quq_u,公式如下,其中w为可学习参数,WqR2d×dW_q \in \mathbf{R}^{2d \times d}

qu=WqSu+bqq_u=W_qS_u+b_q

然后,通过下式计算软分配概率pukp_u^k,其中g为每个聚类的中心,K是设置好的超参数,表示聚类数量。

puk=exp(qu,gk)k=1Kexp(qu,gk)p_{u}^{k}=\frac{\exp \left(\left\langle q_{u}, g_{k}\right\rangle\right)}{\sum_{k=1}^{K} \exp \left(\left\langle q_{u}, g_{k}\right\rangle\right)}

最后,会话u的聚类增强表征计算公式如下,其中\cdot是惩罚。

Cu=k=1KpukgkC_u=\sum_{k=1}^K{p_u^k\cdot g_k}

4.3.2 聚类感知的参数门

由于不同的会话源自不同的分布(表示不同的偏好或爱好),因此使用单个全局共享参数来推荐所有会话是不合理的。因此作者在采用上述两种表征的同时,设计了一个聚类感知参数门来引导全局共享的初始参数为每个会话提供合适的初始参数以实现更好的性能。参数门计算公式如下,其中\oplus表示拼接,FCσFC^{\sigma}表示用sigmoid函数做激活函数的全连接层。

ou=FCσ(SuCu)o_u=FC^{\sigma}(S_u \oplus C_u)

参数变为:

θueθe,θusθs,θupreθpreou\theta^e_u \leftarrow \theta^e, \theta^s_u \leftarrow \theta^s, \theta^{pre}_u \leftarrow \theta^{pre} \cdot o_u

因此最后的预测为下式:

y^ui=FCθupre(SuCu)eviT\hat{y}_{ui}=FC_{\theta^{pre}_{u}}(S_u \oplus C_u) \cdot e_{v_i}^T

4.3.3 局部更新

在元学习中,我们的目标是通过基于单个会话的支持集最小化推荐的预测损失来更新每个会话的局部参数。在聚类感知参数门中引导会话的全局共享初始参数后,我们可以在局部更新推荐器参数以最小化会话 𝑢 的预测损失。参数θ={θue,θus,θupre}\theta^*=\{\theta_u^e,\theta_u^s,\theta_u^{pre}\}更新方式如下,其中β为学习率,L为支持集上的损失函数。

θ^uθuβθuLu(ϕ,θu)\hat{\theta}_{u}^{*} \leftarrow \theta_{u}^{*}-\beta \cdot \nabla_{\theta_{u}^{*}} \mathcal{L}_{u}\left(\phi, \theta_{u}^{*}\right)

4.3.4 全局更新

通过一步梯度下降更新全局参数θ={θe,θs,θpre}\theta^*=\{\theta^e,\theta^s,\theta^{pre}\}ϕ\phi。公式如下,其中损失函数是在查询集上计算的损失,γ为学习率。

θθγuTtrain θLu(ϕ,θ^u)ϕϕγuTtrain ϕLu(ϕ,θ^u)\begin{array}{c} \theta^{*} \leftarrow \theta^{*}-\gamma \sum_{u \in T^{\text {train }}} \nabla_{\theta^{*}} \mathcal{L}_{u}^{\prime}\left(\phi, \hat{\theta}_{u}^{*}\right) \\ \phi \leftarrow \phi-\gamma \sum_{u \in T^{\text {train }}} \nabla_{\phi} \mathcal{L}_{u}^{\prime}\left(\phi, \hat{\theta}_{u}^{*}\right) \end{array}

5. 结果

image.png