【论文精读系列】( 2023'SIGIR)多行为自监督推荐算法

276 阅读11分钟

论文题目:Multi-behavior Self-supervised Learning for Recommendation

论文地址:arxiv.org/abs/2305.18…

代码地址:github.com/Scofield666…

概要

MBSSL(Multi-Behavior Self-Supervised Learning)由清华和快手联合出品,主要解决的问题是推荐系统中多行为的联合学习。

用户行为可以分为两类:目标行为(target behavior)和辅助行为(auxiliary behavior)。

目标行为是平台最为关注的行为,是推荐系统想要优化的终极目标。而辅助行为则是其他能隐式表达用户正反馈或负反馈的行为。

以抖音为例,目标行为是留存或GMV,辅助行为则可以是点赞、评论、完播、下单等等。

那么多行为的学习存在哪些挑战呢?

首先,目标行为往往是稀疏的。 以抖音的GMV目标为例,虽然每天使用抖音的人很多,但是真正付费成交、挥金如土的用户却相对较少。针对这个问题,前人提出了CML[1] (WSDM'2022 Best Paper Candidate),通过构造辅助行为和目标行为的样本对,进行对比学习,来解决目标行为的稀疏性。但是CML忽略了一个问题,那就是辅助行为是包含噪声的(比如一名用户疯狂点赞小姐姐和他愿意下单可能没有任何关系),而这必然会损害目标任务的学习。直接采用CML的对比学习,会加剧辅助行为的噪声对目标行为的负迁移。

其次,目标任务和辅助任务的学习面临优化不平衡的问题。 目标任务指的是目标行为的学习任务,辅助任务除了辅助行为的学习,也包括了对比学习等其他任务。在联合训练目标任务和辅助任务的过程中,忽略辅助任务对于优化目标任务的贡献容易导致辅助任务会主导模型的训练过程。而目前常见的多任务学习方法:GradNorm和PCGrad并不能很好的处理对比任务这样的自监督学习算法,

针对这两个问题,本文首先提出了一个全新的动作感知的自监督学习框架MBSSL来解决稀疏和噪声的问题,其次提出了一种新的优化算法来处理SSL任务和目标任务在并行学习时优化不平衡问题。

MBSSL

MBSSL主要由三部分构成:1)动作感知的GNN来捕捉行为间的上下文和依赖;2)行为间(inter-behavior)的自监督学习来进行任务迁移;3)行为内(intra-behavior)自监督学习来抵御噪声的交互

动作感知的图神经网络——网络结构

如下图2所示,MBSSL构建的图网络,节点包括用户(U)和候选(I)两种类型。边是用户和候选之间发生的交互动作,比如页面浏览、加车、购买等等。图的学习过程是:

  1. 按动作,分别抽取子图Gk\mathcal{G}_k,仅包含由动作k构建节点和边
  2. 动作表示。MBSLL为每个动作设定一个表示,第l+1层的表示由上一层得到:ek(l+1)=Wbek(l)e^{(l+1)}_k=W_b*e^{(l)}_k
  3. 节点表示。在第l层聚合时,子图共享一个动作表示ek(l)e^{(l)}_k,每一个节点的表示eu,k(l+1)e^{(l+1)}_{u,k}由其邻居节点Nu,kN_{u,k}和动作表示的元素积聚合而成

  1. 行为依赖。由于不同行为间的关联对于每个用户又是不一样的,那么如何捕捉行为间的关联呢?答案是self-attention。每个节点在每个动作k上有一个表示ei,k(l)e_{i,k}^{(l)},那么每个节点构成一个Kxd的表示euRK×de_u\in\mathbb{R}^{K\times d}。再通过每个动作独享的W1kW^k_1W2kW^k_2,经过softmax后转化成动作的聚合系数au,ka_{u,k},再乘上eue_u得到节点的最终表示。

  1. 多层聚合。GNN对节点和动作的聚合包含多层,由于不同层的聚合包含了不同的链接信息,本文选择对多层表示进行平均池化得到节点和动作的最终表示。

行为间自监督学习——知识迁移

由于目标行为的稀疏性,我们希望能从辅助行为中获得有助于目标行为的知识。

用辅助行为k表示,来自集合{1, 2, ..., K-1}。目标行为用大写的K表示。

本文采用了一种自监督学习方法,将同一节点在不同动作的表示作为正样本对,(euK,eukuU)(e_u^K,e_u^k|u\in \mathcal{U})

自然得,负样本对可以用不同节点的不同动作表示(euK,evku,vU,uv)(e_u^K,e_v^k|u,v\in \mathcal{U}, u\neq v)。但是可能就存在一个问题,比如两个偏好相近的用户或者属性相同的候选,直接作为负样本对可能会存在假负例的问题(False Negative,后简称FN)。本文针对潜在的FN的问题,提出基于Swing的思想来计算节点间的相似度寻找潜在假负例。

具体得,对于一个子图的两个节点u和v,他们的相似度由其交叉邻居节点的二阶交叉邻居数决定。基本思想就是如果两个用户的交叉节点,有非常重合的交叉用户,那么他们的相似度反而更小。

基于该相似度,我们可以为每个节点寻找相似度top-N的节点作为FN,并在负样本对构造中,过滤这些FN样本。对于辅助行为k的损失函数如下表示。最终的损失函数则由用户节点和候选节点,所有的辅助行为共同构成。

行为内自监督学习——抵御噪声

由于辅助行为对于目标行为,可能包含了大量的噪声。为了缓解噪声导致的负迁移,MBSSL采用了一种行为内自监督学习。简单来说,步骤如下:

  1. 针对目标行为图GK\mathcal{G}_K,通过随机去掉一定比例的边,生成两个新的目标行为子图GK1\mathcal{G}_K^1GK2\mathcal{G}_K^2
  2. 通过两个子图可以得到每个节点的表示eu,k1e_{u,k}^1eu,k2e_{u,k}^2。并据此构造相同节点的两个子图表示为正样本对({(eu,K1,eu,K2)u  U}\{(e_{u,K}^1, e_{u,K}^2)|u \in \mathcal{U}\}),不同节点的不同子图表示为负样本对({(eu,K1,ev,K2)u,vU,uv}\{(e_{u,K}^1, e_{v,K}^2)|u,v \in \mathcal{U}, u \neq v\})。
  3. 构造如下损失函数

  1. 分用户节点和候选节点,分别得到Lssl2,user\mathcal{L}_{ssl_2,user}Lssl2,item\mathcal{L}_{ssl_2,item},汇总后得到最终的行为内自监督损失函数

Lssl2=Lssl2,user+Lssl2,item\mathcal{L}_{ssl_2}=\mathcal{L}_{ssl_2,user}+\mathcal{L}_{ssl_2,item}

自适应多行为优化

每个动作的目标函数借鉴了论文[2],采用了一种无采样的损失函数。对于一个user batch (B\mathcal{B})和候选集合(I\mathcal{I})来说,在动作k上的损失函数如下所示。

将k个动作聚合后可得到Lrec\mathcal{L}_{rec},与行为间/行为内自监督任务的损失函数共同构成如下目标函数。

至此,MBSSL总体可以分为两类任务:主线任务——以用户行为作为标注的监督学习任务,副本任务——用于知识迁移和抵御噪声的自监督学习任务。引入自监督辅助任务存在两个挑战:

  1. 梯度更新时可能会干扰主线任务的学习,导致算法对基本的行为拟合都不够。以下图为例,左图中可以看到辅助任务和主线任务的冲突占比很高,并且在训练后期,辅助任务的梯度大小也远大于主线任务。

  1. 用超参来控制辅助任务的更新权重,不仅调参麻烦,而且并不能动态地适配所有学习batch。

针对这两个问题,本文分别从大小和方向两个方面对辅助任务的梯度更新进行了动态得调整。

实验分析

方法对比

MBSSL在五个数据集上均达到SOTA

与同为SSL方法的SOTA方法相比,MBSSL主要有如下区别:

  • VS CML:SSL方法将不同用户的节点表示作为负样本对,但是不同用户可能存在相似的偏好,从而可能引入较多false negative。本文引入Swing方法,挑选负例时,剔除了表示相近的节点。
  • VS S-MBRec:S-MBRec还使用目标行为上相似的用户作为正例。但是目标行为一般比较稀疏,基于此计算得到的相似度可靠性偏低。而本文认可用户相似度信号的价值,但只在负例挑选时,作为过滤项使用。

大部分SSL方法仅利用了行为间自监督,但是没有考虑到负迁移可能为目标任务带来的噪声问题。本文提出的行为内自监督任务缓解噪声的同时,强化了对目标行为的利用。

模块消融

  • CDM: 基于self-attention的动作表示聚合
  • SSLinterSSL_{inter}:行为间自监督,知识迁移
  • SSLintraSSL_{intra}:行为内自监督,缓解噪声
  • HMG:自适应梯度修正算法

稀疏与噪声是否改善?

  1. 稀疏性

论文依据用户在目标行为上的次数,进行活跃度分层。

  • x轴表示用户的目标行为次数区间,这里目标行为用的是购买行为
  • 左侧y轴表示用户数,灰色的条形图表示对应活跃度的用户数
  • 右侧y轴表示NDCG@50

上图可以看出:MBSSL在低活跃度人群上的提升明显,但是在beibei数据集中的中高活跃度用户上甚至低于GHCF/CML,一个主要的原因是高活人群的辅助行为相对较少(来了直接买的那种),所以MBSSL得提升相对就小。

  1. 噪声

作者手动在辅助任务中引入10%、20%、30%的噪声,观察各个方法的劣化。

可以观察到:1)引入噪声会带来性能的下降,且噪声越多,下降越明显;2)MBSSL在各噪声程度下,下降幅度均最低,体现其对噪声的抗干扰的作用;3)SSL方法,如CML、S-MBRec,对噪声的敏感程度显著更高,原因就是仅仅使用行为间(inter-behavior)自监督容易带来负迁移,而行为内(intra-behavior)自监督可以改善该问题。

大小和方向上的梯度操作是否work?

梯度动态调整有3个关键点:方向、大小和前提。

修正方向调整大小调整前提:辅助任务梯度须大于目标任务
Strategy AYes--
Strategy B-Yes-
Strategy CYesYes-
MBSSLYesYesYes

结果如下。

可以看到梯度的大小修正相比方向修正更加重要。另外梯度调整的前提:辅助任务梯度须大于目标任务,可以带来有效提升泛化性,缓解模型过拟合。

超参是否敏感?

文章对关键的四个超参数进行了精调:

  1. 前向传播的层数$$$$:节点表示聚合层数,影响节点表示。
  2. 温度系数τ\tau:影响行为间自监督损失函数。
  3. 缩放系数$$$$:影响辅助任务的梯度大小调节。
  4. 负例逃逸Top-N:影响行为间自监督损失函数。

简单总结一下

本文针对不同行为间的知识迁移和噪声干扰的问题,提出了行为间和行为内的自监督学习任务,并在引入自监督任务后,如何平衡目标任务和辅助任务的梯度更新上提出了一种方向、大小和前提相结合的梯度调整算法。

从创新性来说,本文提出的自监督算法主要创新性在于提出了行为内自监督算法来缓解迁移带来的噪声,在负例选择方面,借鉴swing的方法,挑选负例时过滤掉相似节点可以缓解false negative的引入,而梯度调整算法除了集成已有的大小和方向调节算法,还测试了辅助任务大于目标任务可作为调节的前提。除此之外,本文还提出了基于self-attention的动作依赖捕捉模块,对于性能也有很大的提升。

最后,还想讨论一个问题,基于MBSSL得到不同用户/候选在不同动作上的表示后,是否可以应用在推荐系统的即时反馈上呢?比如当用户u与候选i发生动作k后,如果要立即推荐一个候选I,使得用户发生目标行为K的概率最大,该如何实现呢?

Reference

[1] Contrastive Meta Learning with Behavior Multiplicity for Recommendation. WSDM'2022 Best Paper Candidate.

[2] Efficient heterogeneous collaborative filtering without negative sampling for recommendation. AAAI'2020.