Contrastive Learning for Debiased Candidate Generation in Large-Scale Recommender Systems

解决的问题

解决推荐系统中的召回问题,标准的方法就是通过采样进行极大似然估计。然而真实的推荐系统通常存在严重的曝光偏差,而极大似然估计从长期来讲会加重曝光偏差,而不合适的采样和特征选取会使得item表示学习效果打折扣。本文提出了CLRec,一种对比学习范式,来解决召回阶段的曝光偏差。

问题形式化

推荐系统的召回阶段范式为学习一个用户行为encoder f θ ( x ) ∈ R d f_\theta(x) \in R^d fθ(x)Rd和一个item encoder g θ ( y ) ∈ R d g_\theta(y) \in R^d gθ(y)Rd,每个encoder的参数是 θ \theta θ的自己。然后我们会用item encoder搭建一个k最近邻搜索服务,例如faiss。然后在线上服务中,给出任意用户行为序列 x x x,我们就可以召回相关的top k个item。多数实现中都会用内积或cosine距离作为度量相似度的分数。这种召回范式在训练阶段通常令极大似然估计来拟合数据:
arg min ⁡ θ 1 ∣ D ∣ ∑ ( x , y ) ∈ D − l o g p θ ( y ∣ x ) \argmin_\theta\frac{1}{|D|}\sum_{(x, y)\in D}-logp_\theta(y|x) θargminD1(x,y)Dlogpθ(yx)
其中 p θ ( y ∣ x ) = e ϕ θ ( x , y ) ∑ y ′ ∈ Y e ϕ θ ( x , y ′ ) p_\theta(y|x) = \frac{e^{\phi_\theta(x, y)}}{\sum_{y'\in Y}e^{\phi_\theta(x, y')}} pθ(yx)=yYeϕθ(x,y)eϕθ(x,y)
p θ ( y ∣ x ) p_\theta(y|x) pθ(yx)将所有可能取值的item对进行求和,这在实际场景中是很难实现的,因此需要通过采样来进行近似,于是训练样本就会出现曝光偏差,以至于通过MLE训练出来的模型对点击较少的item不友好。
目前为减轻这种曝光偏差有以下几种方法,我们称之为逆向加权(inverse propensity weighting):
sampled softmax sampled softmax有很多种变体,其中最常用的tensorflow的实现:
arg min ⁡ θ 1 ∣ D ∣ ∑ ( x , y ) ∈ D − l o g e x p ( ϕ θ ( x , y ) − l o g p n ( y ∣ x ) ) e x p ( ϕ θ ( x , y ) − l o g q ( y ∣ x ) ) + ∑ i = 1 L e x p ( ϕ θ ( x , y i ) − l o g p n ( y i ∣ x ) ) ( 2 ) \argmin_\theta \frac{1}{|D|} \sum_{(x, y) \in D} -log \frac{exp(\phi_\theta(x, y)-logp_n(y|x))}{exp(\phi_\theta(x, y)-logq(y|x))+ \sum^L_{i=1}exp(\phi_\theta(x, y_i) - logp_n(y_i|x))} (2) θargminD1(x,y)Dlogexp(ϕθ(x,y)logq(yx))+i=1Lexp(ϕθ(x,yi)logpn(yix))exp(ϕθ(x,y)logpn(yx))(2)
其中 { y i } i = 1 L \{y_i\}^L_{i=1} {yi}i=1L是从先验分布 p n ( y ∣ x ) p_n(y|x) pn(yx)中采样的L个负样本,减去 l o g p n ( y ∣ x ) logp_n(y|x) logpn(yx)是必要的,可以让上式与原loss收敛到一处。绝大多数实现都假设 p n ( y ∣ x ) = p n ( y ) p_n(y|x) = p_n(y) pn(yx)=pn(y),并将 p n ( y ) p_n(y) pn(y)设置为与item的热度成比例。在实际场景中我们会为一个正样本采样上千个负样本。sampled softmax在样本item数很多的时候通常有比NCE和负采样更好的效果。

Contrastive Loss如下所示:
arg min ⁡ θ 1 ∣ D ∣ ∑ ( x , y ) ∈ D − l o g e x p ( ϕ θ ( x , y ) ) e x p ( ϕ θ ( x , y ) ) + ∑ i = 1 L e x p ( ϕ θ ( x , y i ) ) ( 3 ) \argmin_\theta \frac{1}{|D|} \sum_{(x, y)\in D}-log\frac{exp(\phi_\theta(x, y))}{exp(\phi_\theta(x, y)) + \sum^L_{i=1}exp(\phi_\theta(x, y_i))} (3) θargminD1(x,y)Dlogexp(ϕθ(x,y))+i=1Lexp(ϕθ(x,yi))exp(ϕθ(x,y))(3)
其中 { y i } i = 1 L \{y_i\}^L_{i=1} {yi}i=1L依旧是从 p n ( y ∣ x ) p_n(y|x) pn(yx)中采样得到的。这个公式与上式相比是没有校正由采样带来的偏差的。很多研究都是基于本公式来探索一个合适的分布 p n ( y ∣ x ) p_n(y|x) pn(yx),InfoNCE论证了如果我们设定分布p_n服从数据集中y的真实分布,那么这个loss就能够拟合x和y之间交互信息下界的极大似然。

减掉了曝光偏差的Contrastive Learning最近对上式的优化取得了突破性进展,我们首先回顾一下,contrastive loss是一种基于采样的对于逆倾向加权(inverse propensity weighted, IPW) loss的近似。IPW loss如下所示:
arg min ⁡ θ 1 ∣ D ∣ ∑ ( x , y ) ∈ D − 1 q ( y ∣ x ) l o g p θ ( y ∣ x ) ( 4 ) \argmin_\theta \frac{1}{|D|} \sum_{(x, y)\in D} - \frac{1}{q(y|x)} log p_\theta(y|x) (4) θargminD1(x,y)Dq(yx)1logpθ(yx)(4)
其中 q ( y ∣ x ) q(y|x) q(yx)是propensity score function,也就是我们在构建数据集时y被推荐给x的概率(即曝光分布)。IPW的思想就是要通过propensity score来建模非随机缺失值,从而校正曝光偏差。一个标准IPW loss的实现包含两步:第一步是利用一个单独的模型来建模 q ( y ∣ x ) q(y|x) q(yx),然后通过极大似然拟合曝光历史来对模型进行优化;第二步就是通过上面的公式来优化 p θ ( y ∣ x ) p_\theta(y|x) pθ(yx),然而IPW的两阶段求解以及由 1 q ( y ∣ x ) \frac{1}{q(y|x)} q(yx)1带来的数值的不稳定性给真实场景中IPW loss的应用带来的挑战。
幸运的是我们能够证明(3)和(4)理论上是一致的。并且我们会在下面一节提出一种方法,不需要通过两步就可以计算出IPW loss。证明过程参考原论文。

基于队列的contrastive learning实现

我们在本节提出两种方法来在实际生产环境中实现contrastive loss。首先我们会对CLRec进行说明,它会利用非个性化的propensity score q ( y ) q(y) q(y)构建一个队列,然后从中选择负样本。然后我们会对Multi-CLRec进行说明,它会利用表征用户不同意图的多个独立队列来生成样本。我们的方法与IPW不同的是,它不需要用一个辅助的模型来得到propensity score q ( y ∣ x ) q(y|x) q(yx),省去了训练这个模型的时间。

CLRec: 基于队列的能够减小马太效应的对比学习

propensity score q ( y ∣ x ) q(y|x) q(yx)的精确值是很难得到的,因为真实推荐系统中包含很多模块并且数据稀疏。因此CLRec用 q ( y ) q(y) q(y)来代替 q ( y ∣ x ) q(y|x) q(yx)(也就是用item被推荐的概率来代替系统把y推荐给x的概率),然后 q ( y ) q(y) q(y)又与 p d a t a ( y ) p_{data}(y) pdata(y)有高度关联,因为如果一个推荐系统已经被深度优化过了,那么它就会倾向于把有高点击率的item推荐出去。于是,我们进一步把propensity score用item的点击分布(也就是它在数据集中的分布)替换。
然而用item的点击分布来替换propensity score依旧会带来额外的开销。例如分布式系统中的通信开销,并且采样也不能保证数据集中的所有item都被采样到。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值