前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SimpleX: 一个简单且有效的协同过滤框架

SimpleX: 一个简单且有效的协同过滤框架

作者头像
张小磊
发布2022-10-31 14:32:58
5430
发布2022-10-31 14:32:58
举报
文章被收录于专栏:机器学习与推荐算法

今天跟大家分享一篇发表在CIKM2021会议上的关于协同过滤框架的论文,该论文总结了一个简单且有效的CF框架,并探索了不同的损失函数以及负采样比率对最终推荐结果的影响。

论文:https://arxiv.org/abs/2109.12613 代码:https://github.com/xue-pai/TwinMatch/blob/master/deem/pytorch/models/SimpleX.py

众所周知,协同过滤(CF)已经成为了推荐系统领域中基础但非常重要的算法簇,以往的研究中侧重于设计全新的算法模块,比如结合多层感知机的NCF以及结合图神经网络的NGCF等。

本文中将协同过滤范式大致分为了三个组件,即交互编码器(Interaction encoder)、损失函数(Loss function)以及负采样(Negative sampling)组件,其中以往的研究侧重于开发和设计全新的交互编码器,而忽略了对于损失函数和负采样比率的研究,因此基于以上动机,本文提出了一个简单且强悍的交互编码器,在此基础上用实验分析了不同的损失函数和负采样比率对推荐结果的影响,并最终提出了一个有效的余弦对比损失。

根据何老师的教程可以大致将交互编码器模块分为表示模块(Representation learning)和匹配模块(Matching function)。其中表示学习模块主要负责学习用户和物品的特征表示,比如MF、Item2vec以及DSSM等,匹配模块主要用来学习两者之间的交互关系,从简单的内积、余弦相似度到复杂的MLP等机制。

其中,基于表示学习的协同过滤代表方法包括DeepMF、AutoRec、CDAE等模型;基于匹配学习的协同过滤代表方法包括NueMF、ConvNCF、TransRec、Wide&Deep以及DeepFM等。

模型结构

下图是本文总结的算法架构图(文中声明其并不novel,因为在多个工作中都有类似的结构,比如YoutubeNet,该文重点是在探索在这样简洁的框架下损失函数和负采样对实验结果的影响),可见其比较简单直白,用户表示方面主要是将用户的隐特征向量与历史交互物品的隐特征向量进行了加权求和,其中历史交互物品的隐特征向量通过多种聚合方式实现,然后通过将用户的特征表示与候选物品的特征表示求余弦相似度进行比较,最终利用余弦对比损失CCL进行模型优化。

其中关于聚合层的细节,本文主要介绍了三种聚合方式(比如average pooling、self-attention以及user-attention等)。假设用户

𝑢

的历史交互项集合为

\mathcal{H}_u

,我们将其最大值设置为

𝐾

。对于具有不同大小的交互数目的用户,可以相应地应用padding或chunking来进行统一。因此,针对于用户

u

所交互的物品集合的聚合向量

p_u

可以得到:

p_{u}=\sum_{k \in \mathcal{H}_{u}} I_{k} \cdot \alpha_{k} \boldsymbol{e}_{k}

其中

\boldsymbol{e}_{k}

表示物品

k

的隐特征向量,

I_k

为指示函数,

\alpha_k

表示聚合权重。根据聚合方式可以计算聚合权重:

对于

\beta_k

的计算,又可以根据self-attention和user-attention来进行区分:

\beta_{k}= \begin{cases}q^{T} \tanh \left(\boldsymbol{W}_{1} e_{k}+b_{1}\right), & \text { if self-attention } \\ e_{u}^{T} \tanh \left(\boldsymbol{W}_{2} \times e_{k}+b_{2}\right), & \text { if user-attention }\end{cases}

其中,

q

是一个全局的查询向量,

e_u

是一个针对用户

u

的查询向量。

\mathbf{W}_1

\mathbf{W}_2

b_1

b_2

表示可学习的参数。最终,用户

u

的隐特征向量

h_u

可以表示为用户隐特征向量

e_u

和用户的交互物品集合聚合向量

p_u

的加权形式:

h_{u}=g \cdot e_{u}+(1-g) \cdot V p_{u}

其中,

g

为加权稀疏,一般设为0.5。由于

p_u

可能因为average pooling操作导致的维度不对应,因此需要一个映射矩阵

V

来进行特征变换。个人感觉,在这里将用户隐向量与历史交互集合的物品隐向量进行融合,有些SVD++的思想在里边,只不过这里是用深度学习来进行建模,并且又添加了几种不同的聚合方式以及加权求和等操作。下图表示SVD++的预测函数,在括号内部的表示则为用户的隐特征向量,其中v表示用户向量,q表示物品隐向量。

最终,通过余弦相似度来计算用户

u

和物品

i

的相似度:

在本文的实验中,认为平均池化是一种健壮的聚合方法,另外两种通常需要更多的尝试来进行调参,在某些情况下只能带来微小的改进。

余弦对比损失(CCL)

本文提出了结合对比学习的余弦损失函数

\mathcal{L}_{CCL}

,给定一个正样本对(u,i)和一个负样本对集合

\mathcal{N}

,余弦对比损失可以表示为:

\mathcal{L}_{C C L}(u, i)=\left(1-\hat{y}_{u i}\right)+\frac{w}{|\mathcal{N}|} \sum_{j \in \mathcal{N}} \max \left(0, \hat{y}_{u j}-m\right)

其中,

w

为超参数用来控制正样本损失和负样本损失的比例,

m

为margin用来过滤负样本。当负样本的数量变大时,通常会存在许多冗余而无信息的样本。通过引入margin,它有助于自动识别余弦相似度大于𝑚的困难负样本,从而有利于更好地训练模型。直观地说,CCL用来最大化正样本对之间的相似性,而最小化margin小于𝑚以下的负样本对的相似性。

通过总结可以发现其与经典模型MF、YouTubeNet和GNN-based models的关系。其中,当g=1时可以退化为经典的MF;该框架可以看做没有使用side information的YouTubeNet,只不过YouTubeNet是将多个向量连接在一起,而不是直接加权求和;当聚合方式为user-attention时,可以类比于graph attention layer。而聚合方式为self-attention时,则可类比为NIA-GCN模型。

原文中强调,尽管SimpleX的设计很简单,而且在某种程度上并不novel,但它统一了现有CF模型中的几个关键组件。令人惊讶的是,这样一个简单的模型足以在很大程度上超越最先进的CF模型,这可以为未来的研究提供简单而有力的基线。

试验部分

本文对比了一些经典的损失函数以及余弦对比损失函数CCL,通过实验可以发现,其所提出的CCL损失在多个数据集上的优越性,紧随其后的为交叉熵损失函数。

另外,本文还对比了29个经典的协同过滤模型,其实验结果如下。

本文还分析了负样本数量对实验结果的影响。可以看到BPR损失随着数量的增加性能几乎没啥变化,而所提出的CCL损失则可以比较好的利用数量比较多时的负样本。

本文通过对协同过滤方法的分析,发现大多数研究都集中在交互编码器的设计上,而在很大程度上忽视了损失函数和负采样对协同过滤模型的影响。本文探索了它们的影响,并进一步提出了余弦对比损失,以及一个简单而强悍的CF基线。本文呼吁研究者们除了关注交互编码器的设计部分,还可以在损失函数以及负采样等方面进行更加深入的研究。

更多细节可查阅原文。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-06-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 机器学习与推荐算法 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 模型结构
  • 余弦对比损失(CCL)
  • 试验部分
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档