self-supervised learning for large-scale item recommendations

解决的问题

长尾item的用户反馈数据稀疏是推荐系统中长期存在的一个问题。近期受到CV和NLP领域在自监督学习任务上进展的启发,我们提出了一个针对大规模item推荐的自监督学习(SSL)框架。框架主要通过更好地学习item特征之间的潜在联系来解决label稀疏的问题。特别地,SSL既优化了item表征,又优化了线上服务,从而提升了模型的泛化能力。除此之外,我们还在框架中提出一种新颖的利用特征交互来进行数据增强的方法。我们通过两个真实的数据集和一个线上真实的app-to-app推荐场景来评估我们的模型,实验结果表明我们的框架确实对模型性能有所提升。

本文的方法

模型框架


受到CV中SimCLR模型的启发,我们使用了相似的对比学习算法。基本思想分为两步:首先,我们对于相同的训练样本使用不同的数据增强方法来学习它们的表示。然后使用对比损失函数来使得相同训练样本的表示互相接近。对比损失也会用来双塔DNN的训练中,在双塔DNN中它的目的变成了让整样本的item与它相关的query接近。
Loss 我们考虑一个batch的样本 x 1 , . . . , x N x_1, ..., x_N x1,...,xN,其中 x i ∈ X x_i \in X xiX表示第i个样本的特征集。在推荐系统中,一个样本可能是一个query,一个item或一个query-item对。假设我们有一对变换函数 h , g : X → X h, g: X \rightarrow X h,g:XX,能够分别将 x i x_i xi变换成 y i , y i ′ y_i, y_i' yi,yi,
y i ← h ( x i ) , y i ′ ← g ( x i ) y_i \leftarrow h(x_i), y_i'\leftarrow g(x_i) yih(xi),yig(xi)那么对比学习的loss就是要最小化 y i , y i ′ y_i, y_i' yi,yi之间的差别。而同时,对于不同的样本i和j,对比学习的loss就要最大化他们之间的差别。令 z i , z i ′ z_i, z_i' zi,zi表示 y i , y i ′ y_i, y_i' yi,yi经过网络 H , G H, G H,G变换后生成的embedding,我们将 ( z i , z i ′ ) (z_i, z_i') (zi,zi)视为正样本对,而 ( z i , z j ′ ) (z_i, z_j') (zi,zj)视为负样本对,令 s ( z i , z j ′ ) s(z_i, z_j') s(zi,zj) z i , z j ′ z_i, z_j' zi,zj的cosine距离,我们定义一个有N个样本的batch的loss如下:
L s e l f ( { x i } ; H , G ) : = − 1 N ∑ i ∈ [ N ] l o g e x p ( s ( z i , z i ′ ) / τ ) ∑ j ∈ [ N ] e x p ( s ( z i , z j ′ ) / τ ) L_{self}(\{x_i\};H, G) := -\frac{1}{N}\sum_{i \in [N]}log\frac{exp(s(z_i, z_i')/\tau)}{\sum_{j\in [N]}exp(s(z_i, z_j')/\tau)} Lself({xi};H,G):=N1i[N]logj[N]exp(s(zi,zj)/τ)exp(s(zi,zi)/τ) 其中 τ \tau τ是softmax temperature,上面的loss函数能够习得稳定的embedding空间,在这个embedding空间中相似的item距离相近,而随机样本相距很远。上图就是整个的framework。
encoder框架 我们的 H , G H, G H,G由一个输入层和一个MLP组成,输入层由归一化后的稠密特征和稀疏特征embedding组成,embedding在H和G中是共享的,而基于不同的数据增强技术,MLP的参数在H和G中也是部分共享的。
与spread-out regularization的联系 在特殊情况下,h和g是相同的变换,而H和G是完全相同的MLP网络,上面的loss就会坍缩成 − N − 1 ∑ i l o g e x p ( 1 / τ ) e x p ( 1 / τ ) + ∑ i ≠ j e x p ( s ( z i , z j ′ ) / τ ) -N^{-1}\sum_ilog \frac{exp(1/\tau)}{exp(1/\tau) + \sum_{i \neq j}exp(s(z_i, z_j')/\tau)} N1ilogexp(1/τ)+i=jexp(s(zi,zj)/τ)exp(1/τ) 这个公式的目的就是让不同样本的表达有较小的cosine相似度。这一loss很像spread-out regularization,除了softmax部分原本是平方损失。spread-out regularization已经被证明在大规模召回模型中能有效增强泛化能力。在后文中我们会提出一种基于SSL的正则,相比于spread-out regularization,基于SSL的正则能进一步提升模型性能。

两步数据增强

我们在上面的图中引入了数据增强,它的主要思想是给出一个item特征集,通过将特征中的部分信息mask掉来产生两个新样本。一个好的数据增强方法应该做出尽可能少的假设,从而能够被广泛利用在大部分数据集和模型上。我们的mask思想源自于BERT的mask方法,与序列token不同的是,我们的特征之间不存在顺序关系。我们提出了Correlated Feature Masking (CFM)方法,通过挖掘特征之间的关联来设计masking pattern。
如果不采用数据增强,那么我们的模型输入是将所有特征拼接起来。我们的两步骤数据增强包括:

  • masking:我们使用一个默认embedding来替代在输入层被我们mask掉的特征
  • dropout:对于多值特征,我们按概率来丢掉每个value,这一做法能够进一步减少输入信息,增加SSL任务的难度
    接下来介绍masking阶段的策略。我们将Random Feature Masking (RFM)作为baseline,这种方法就是随机将一个样本的特征集分为两个不相交的特征子集,用两个特征子集生成两个样本。我们实际使用的方法是Correlated Feature Masking (CFM)。这种方法会根据两个特征的交互信息来度量特征的关联,在根据特征关联来进行特征的分割。计算方法如下: M I ( V i , V j ) = ∑ v i ∈ V i , v j ∈ V j P ( v i , v j ) l o g P ( v i , v j ) P ( v i ) P ( v j ) MI(V_i, V_j) = \sum_{v_i \in V_i, v_j \in V_j} P(v_i, v_j)log \frac{P(v_i, v_j)}{P(v_i)P(v_j)} MI(Vi,Vj)=viVi,vjVjP(vi,vj)logP(vi)P(vj)P(vi,vj) 其中 V i , V j V_i, V_j Vi,Vj表示词表,所有特征的交互信息都可以提前计算出来。
    有了提前计算好的特征交互信息,对于被mask的特征 F m F_m Fm,我们会把关联度高的特征一起mask掉:首先从特征集中均匀采样一个种子特征 f s e e d f_{seed} fseed,然后选择与它最相关的top N个特征,最终的特征是由种子和与它关联的特征组成的,即 F m = { f s e e d , f c 1 , . . . , f c n } F_m = \{f_{seed}, f_{c1}, ..., f_{cn}\} Fm={fseed,fc1,...,fcn},我们选择 n = k / 2 n = k/2 n=k/2,使得mask掉的特征和保留的特征数量能近似相等。我们每个batch变换种子特征,以使SSL任务学习到多种mask pattern。
多任务学习

为将SSL学到的表达用到推荐的分类或回归任务中,我们利用一个多任务训练策略,对我们的主要任务和辅助的SSL任务一并进行训练。举例来说,令 { ( q i , x i ) } \{(q_i, x_i)\} {(qi,xi)}为一个从训练集分布 D t r a i n D_{train} Dtrain中采样出来的query-item对的batch,令 { x i } \{x_i\} {xi}为一个从item分布 D i t e m D_{item} Ditem中batch的item,那么联合loss如下所示: L = L m a i n ( { ( q i , x i ) } ) + α ⋅ L s e l f ( { x i } ) L = L_{main}(\{(q_i, x_i)\}) + \alpha \cdot L_{self}(\{x_i\}) L=Lmain({(qi,xi)})+αLself({xi})
异构的样本分布 D t r a i n D_{train} Dtrain中采样出来的样本的边缘item分布基本服从幂律分布,如果用 D t r a i n D_{train} Dtrain来采样计算 L s e l f L_{self} Lself会使得学到的特征关联与头部item有出入。于是我们从 D i t e m D_{item} Ditem中采样item来计算 L s e l f L_{self} Lself。我们在实践中发现两个任务分别采样对于SSL提升监督任务的性能是至关重要的。
主任务的loss我们利用batch softmax loss作为主任务的loss。

评估

评估结果显示,SSL方法对于baseline方法,对于长尾item的推荐效果有更大的提升。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
自我监督学习是一种机器学习方法,通过对数据进行合理的预测任务,从中获得有用的表示。与传统的监督学习不同,自我监督学习不需要人工标注的标签来指导训练,而是利用数据自身的信息进行训练。 自我监督学习的基本思想是从未标记的数据中构造有意义的标签,然后将这些标签用作训练数据,以学习有用的特征表示。通过对输入数据进行某种形式的变换或遮挡,可以生成一对相关的样本。其中一个样本称为正样本,另一个则被视为负样本。例如,在图像领域中,可以通过将图像进行旋转、裁剪或遮挡等变换来生成正负样本对。模型的目标是通过学习从一个样本到另一个样本的映射,从而使得正样本对之间的相似度更高,负样本对之间的相似度更低。 自我监督学习在许多任务中都取得了很好的效果。例如,在自然语言处理任务中,可以通过遮挡句子中的某些单词或短语来生成正负样本对,然后通过学习从一个句子到另一个句子的映射来进行训练。在计算机视觉任务中,可以通过图像的旋转、裁剪、遮挡或色彩变换等方式来生成正负样本对。 自我监督学习的优点是不需要人工标注的标签,可以利用大量的未标记数据来进行训练,从而扩大训练数据的规模。此外,自我监督学习还可以通过学习到的特征表示来提高其他任务的性能,如分类、目标检测和语义分割等。 总之,自我监督学习是一种有效的无监督学习方法,通过构造有意义的预测任务,从未标记的数据中学习有用的特征表示。它在各种任务中都有广泛的应用,并具有很高的潜力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值