今天跟大家分享一篇发表在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等)。假设用户