一文读懂推荐系统中的debias

原创 精选
开发
我们说到的 bias,一般是指一种相对不公平、偏离客观公正的理想状态,或者在整体的各个方面上表现出 unbalanced issues 的现象。

作者 | 游戏算法-陈可

引言

我们说到的 bias,一般是指一种相对不公平、偏离客观公正的理想状态,或者在整体的各个方面上表现出 unbalanced issues 的现象。对于“客观公正的理想状态”,在各种场景中没有一个统一的定义,而是在各自场景的讨论中会产生一些达成共识的概念。然而,这个概念也是随着人们认知的加深而不断延展的。因此 bias 仍然是一个非常 open 的话题。

推荐系统是一个涉及到众多环节的复杂系统。在系统中,推荐模型基于发生过的用户行为进行学习,对用户进行 item(视频、文章、商品等)的展现,用户对展现出来的 item 产生反馈,反馈的用户行为数据继续被模型学习。在整个链路中,没有哪个环节是绝对意义上的“因”和“果”,它们是一个相互影响的关系。(见图 1)

图 1. 推荐系统中各个环节和 bias 产生的阶段(来自文献[1])

推荐系统的各个环节都依赖于用户与 item 的交互,交互是有限且需要花费成本的,在某些情况下不会是客观事实的充分反映。在此 bias 就会产生,并且对推荐系统的整个链路产生着影响。

一些比较公认的 bias 包括:

Position bias(位置偏差):

  • 概念解释:用户的精力是有限的,用户有更大概率与展现在靠前位置的 item 发生交互,产生正向行为,而与 item 是否符合用户偏好无关。
  • 负面影响:数据中的正负例 label 不一定客观反映用户偏好。
  • 典型场景:电商/文章 推荐中一个页面内有多个位置展现的点击行为。

Exposure Bias(曝光偏差):

注意:这里的 exposure 曝光,是指 item 真正被用户注意到,而不是 item 简单地在客户端展现。下文会使用曝光一词来代指用户真正注意到了 item,而使用展现一词来代指 item 在客户端展现的埋点上报,以此作为区别。

  • 概念解释:存在于基于隐式反馈(implicit feedback)建模的场景中(比如 CTR 场景),对于全量的 item,用户只会被曝光到其中的少数一部分,并与之产生显式正向行为。那些没有显式行为的 item,可能是用户不感兴趣,也可能是没有曝光给用户。如果简单地将它们都处理为负例用作训练模型,那么将会产生严重的偏差(一些论文将其称为 positive-unlabeled 问题)。另一方面,在推荐结果中,热度越高 item, 会更可能曝光给用户。对于用户来说,一个 item 是否会产生显式正向行为的记录,是非随机缺失的(missing not at random,很多论文中又简称为 MNAR)。这样会导致收集到的数据分布与真实的分布是不一致的。
  • 负面影响:没有正向行为的 item,并非都是真实的负例,简单粗暴处理会带来 false negative。在曝光偏差产生的场景中,有的是将未展现给用户的 item,进行随机负采样作为用户的负反馈;有的是将展现但未产生互动行为的 item 作为用户的负反馈,两者都会带来偏差。
  • 典型场景:使用隐式反馈的电商/视频等推荐。

Selection Bias(选择偏差):

  • 概念解释:存在于基于显式反馈(explicit feedback)建模的场景中(比如商品评分),用户倾向于对喜好的 item 进行评分,并且用户倾向于对非常好或非常坏的 item 进行评分。因此,所观察到的评分结果的数据分布,并不是真实的全量分布。
  • 负面影响:观测数据的分布是有偏的。
  • 典型场景:预测用户对电影的评分。

还有其他的 bias 比如 Conformity Bias(人在社会环境中意见与群体趋同导致的偏差),Popularity Bias(高热度 item 获得的流量远超过合理水平,造成马太效应),不在该文中做更多讨论。

上述 bias 的存在,给推荐系统的服务效果带来了负面影响。在笔者看来,Position bias 和 Exposure Bias 是推荐系统中最重要和常见的两类 bias。因此,下文针对这两类 bias,介绍学术界过去提出的一些主流 debias(消除偏差)的解决方案。

以笔者之见,从技术方案的实现角度而言,Position bias 和 Exposure Bias 的主流 debias 方案可以归类为曝光建模和样本调权两种思路。

  • 曝光建模: 在理论上假设,用户显式行为的发生可以解耦为“item 是否曝光给用户”和“item 是否符合用户偏好”两个事件。在算法设计中,显式地对“是否曝光”进行建模,从而使模型真正地从数据样本中,学习到 item 与用户相关性的客观规律。曝光建模思路的特点是,需要对“是否曝光”的依赖变量做一定假设,并且需要实际数据样本能反映出假设的规律,因此也需要样本量足够充分。
  • 样本调权: 根据业务场景的特性,对不同的样本赋予不同的权重,特别是对置信度较小的样本(例如隐式反馈场景中的负例)赋予较小的权重,使得样本层面上反映出的 bias 得到减轻。另外,根据业务场景中 bias 的产生机理,对于观测到的样本,重新定义损失函数,使其近似趋近于无偏的情况,也是一种 debias 的思路。由于重新定义损失函数的做法,本质上也是改变了不同样本的权重,本文将这一思路归类到样本调权的思路下。样本调权思路的特点是,需要较强的人工经验和业务理解。

需要注意的是,两种思路并没有绝对的区别。在某些方案中,建模了曝光概率,同时利用模型预估得到的曝光概率对样本进行调权。因为这类思路依赖于对曝光的建模,本文将其归类到曝光建模之下。

本文内容组织主要参考综述文献 Jiawei Chen, Hande Dong, Xiang Wang, Fuli Feng, Meng Wang, and Xiangnan He. Bias and Debias in Recommender System: A Survey and Future Directions [1].

本文后续内容安排如下:

  • 曝光建模: 介绍曝光建模思路分别在 position bias 和 exposure bias 场景对应的具体技术方案。在每个 bias 场景标题的开头,简要回顾了 bias 的含义和产生机理。
  • 样本调权: 介绍样本调权思路分别在 position bias 和 exposure bias 场景的方案。其中,在 exposure bias 标题下,将样本调权的方案分为“启发式调权”和“损失函数重定义”两个方向进行叙述。
  • 评估指标的 debias: 介绍在模型评估指标(即 metrics)中消除偏差的思路。

曝光建模

Position bias

位置偏差在 learning-to-rank 系统中是一种常见偏差,它的基本假设是展现在靠前位置的 item 有更大概率被用户点击,无论 item 是否符合用户偏好,在广告系统和搜索排序场景中都比较常见。

对 position bias 采用曝光建模来 debias,思路是,将用户点击行为发生的中间过程拆分出来,对中间的曝光事件进行建模,并利用这些中间过程的模型预测值进行消偏。如何去拆分点击的中间过程,就涉及到了不同的假设,对应着不同的具体方案。

其中一个比较有影响力的方案是PAL(Position-bias Aware Learning)模型 [2],该模型假设:

  • 用户(u)点击(C,click)事件的发生,是 item(i)被用户注意到(E,examined)且 item 有一定概率符合用户偏好(relevant)两者同时满足的结果;
  • 一旦 item 被用户注意到(E),那么用户点击(C)item 的概率,仅仅于 item 与用户本身有关,而与位置无关;
  • item 被用户注意到的概率(E),仅仅与 item 所在的 position(p)有关, 而与 item 是否符合用户偏好无关.

总结起来就是:

其中,r_ui 是用户与 item 是否符合的真正概率,h_q 是仅依赖于位置的 item 被用户注意到的概率。令模型分别建模这两个行为,然后只取 r_ui 作为线上服务时排序的依据。

具体来说,如下图所示,在深度学习模型中,使用位置相关的特征输入构建一个 tower,其他特征输入构建另一个 tower,两个 tower 的最终输出分别经过 sigmoid 之后,相乘到一起(pCTR * ProbSeen),作为一个用于计算 loss 的输出(bCTR)。当模型训练时,样本 label 与 bCTR 计算得到 loss,用于梯度的反向传播。而在线上预估服务时,仅使用 pCTR 的预估值,因为它是去除了 position 之后的消偏结果。

图 2. PAL 模型示意图(来自文献[2])

另一种思路类似的方案是采用级联模型(cascade model)[3]。该方案假设用户从靠前位置到靠后位置,按顺序逐个地浏览 item,那么是否点击某个位置上的 item,就与该位置以及之前所有位置上的 item 有关。令 E_q 和 C_q 分别代表 q 位置上 item 曝光和被点击的概率。级联模型描述用户行为的发生是如下的关系:

其中,第三个等式假设了用户一旦点击了处于 q 位置的 item,那么就会终止本次阅读的过程,不再往下浏览,否则用户还会继续往下浏览。该方案也假设了在每次浏览过程(session)中,最多只能有一次点击。

级联模型建模各个位置处的 E_q 和 C_q,同样使用消偏之后的 r_uq,i 来作为真实的排序依据。

曝光建模的思路有两个缺点,一是对点击行为中间过程的拆分需要大量的数据来支持模型学习,尤其是 user-item 之间的数据是较为稀疏的,在一些数据量偏少的场景中使用难度大;二是引入了人为假设,如果假设不正确,那么就会导致最终结果与预期的南辕北辙。

Exposure Bias

Exposure bias(曝光偏差)产生于需要利用用户的隐式反馈(implicit feedback)来建模的场景中。用户的显式行为(比如点击、评论、收藏)只会发生在极少数的 item 上,因为用户只会被到少量的 item 曝光到。因此,把未观察到互动行为的 item 都作为用户的负反馈,会造成偏差(positive-unlabelled问题)。另一方面,高热的 item 相对中长尾 item,获得了更多的曝光,更可能产生显式正向行为的样本。因此所观测数据中的正向行为,是非随机缺失的(Missing-not-at-Random,MNAR问题),与真实分布不一致。

因为 exposure bias 产生的直接原因是滥用了并非真实的负样本,在这些负样本中无法直接区分哪些是曝光了但用户不感兴趣了、哪些是没有实际上曝光的。那么,如果能对 item 是否曝光进行建模,然后削弱那些曝光概率低的负样本的权重,是会减轻 bias 的影响的。

具体地,训练模型学习一个 item 是否曝光给用户的概率,item 曝光的概率越高(对应地,item 在客户端展现的次数越多),那么说明 item 对应的隐式反馈样本的置信度也就越大。因此,可以将模型学习到的曝光概率赋值给损失函数里面样本的权重。

在早期朴素的 WMF 思路影响下,研究者考虑在矩阵分解的过程中,加入 item 是否曝光给用户的隐变量 O_ui, 通过模型学习到 O_ui,来更好地辅助损失函数里面的权重赋值[12],被称为ExMF(Exposure Matrix Factorization,含有曝光的矩阵分解)方法。具体地,考虑如下的概率生成过程:

其中 N 表示高斯分布,Bern 表示伯努利分布,μ_u,i 是 item i 曝光给用户 u 的概率,U,V 分别是储存用户向量和 item 向量的矩阵,

代表用户 u 对 item i 的偏好程度;

表示在用户 u 被 item i 曝光后,是否与 item 产生显式正向行为的变量;

都是表达高斯分布方差的超参数。

要确定用户和 item 矩阵 U,V 以及曝光矩阵 μ,就需要采用极大似然法最大化以下概率:

由于是否曝光{o_u,i}是隐变量,需要采用一个类似 EM 的算法来不断更新参数,最终,可以获得 E[Ou,i|Yu,i=0]的先验概率,来对损失函数中的样本置信度赋值。

样本调权

样本调权思路,从逻辑上说是直观的:在有 bias 的场景下,某些样本携带的信息可信度小,但是不能完全丢弃它们,因此赋予较小权重,使得它们对模型整体的影响减轻;或者,同样是展现给用户的 item,某些 item 有更高的曝光几率,它们的正反馈占比更高,因此它们的正样本权重应当被削弱,而另外一些 item 的正样本权重应该被增强。

Position bias

Propensity Score(倾向性打分,下文简称 PS)是修正位置偏差的一种通用方法[4],在计算每条样本的 loss 时,每条样本基于它所在的位置被重新赋予了权重。这个权重是和位置相关的,该方案里正样本对应的 loss 函数被修正为:

对应着在模型 f 下(u,i)这条样本的 loss;ρ(q)是倾向性打分(即 PS),仅仅与位置 q 有关,这也是倾向性打分这一方法中的一个重要假设。如果一个 item 展现的位置越靠前,它的 PS 就越高,那么这条样本对应的 loss 被降权得越厉害。同时,那么展现在靠后位置的 item,它们的 loss 将可能被加权。由于倾向性打分方法做了一个非常强的假设(倾向性打分仅仅与位置相关, 而与用户和 item 无关),因此估算各个位置上的 PS 就变得非常简单。一个很直接的做法是 result randomization(结果随机化):将模型排序的结果打乱,展现在用户面前,然后收集各个位置上的用户点击率。因为在各个位置上,item 与用户的相关性已经是均等的了,因此不同位置上的点击率就是各个位置上的倾向性打分的无偏估计。但是这种做法对自然推荐的结果进行了人为干预,有损用户体验,并不是一个最优的办法。除了这种简单粗暴的 result randomization 之外,人们也提出了一些基于模型的方法来学习各个位置上的倾向性得分。将 item 是否被用户注意到作为一个隐变量,设计了一个包含倾向性打分模型和推荐模型的 EM 算法来求解该问题。[5,6]

Exposure Bias

在利用隐式反馈的场景中,为了提取负反馈的信息,一般会将未观察到显式反馈的 item 一律作为负例,然后对每个负例赋予一定的置信度。对应的损失函数表达如下:

是推荐模型 r 预估的正向行为发生概率;W_ui 是表达置信度的权重;δ 是损失函数的具体表达式(比如交叉熵代价函数)。在模型训练中的 debias 相关思路,一般是围绕如何给隐式反馈的负例赋予恰当的权重来进行的。

启发式调权

对隐式反馈的负例进行调权,针对的更多是 positive-unlabeled 问题。一个早期的朴素思路是加权分解矩阵(weighted factorization matrix,简称 WMF)[8]。该思路采用:

的样本降权。这种做法背后的动机是,未观察到正向行为的样本,无法确定用户是否真的不喜欢,因此需要降低样本的置信度。

在此基础上利用更多的用户信息或 item 信息,提出的其他方案包括:利用用户的活跃度进行权重赋值:

因为有更多正向行为的用户,其对应的样本的置信度越大[9];利用 item 的热度进行权重赋值,因为越流行的 item,有更高的几率曝光,样本的置信度也应当越大[10];利用用户与 item 的特征相似度来确定权重[11]。

虽然方法众多,启发式调权仍然是一个有较大难度的方案,其一是用户与 item 之间隐式反馈样本的置信度的确定,需要大量数据与计算资源;其二是权重的设定,也引入了人为的经验与假设,如果人为的经验就是带有偏差的,那么会加重偏差。

损失函数重定义

在 exposure-based model 方案中,曝光概率越高的 item,对应的样本的置信度越高。但是它没有处理另一个问题,那就是隐式反馈建模中的非随机缺失(missing not at random)问题。

高曝光概率 item,一般也是高热度的 item。通过调大它们的样本的权重,模型将会偏向于对高热度的 item 学习更准,而在中长尾的 item 上的学习变差。

因此,将是否曝光与曝光后是否发生显式反馈这两个变量进行进一步的解耦,并重新定义损失函数,使之完全依赖于客观的 user-item 相关性,是一种更进一步的思路[13]。

基于以上的动机,研究者将显式反馈的发生解耦为“曝光”(O_u,i = 1)与“item 符合用户偏好”(R_u,i = 1)同时发生。

分别表示 item i 曝光给用户 u 的概率,和 item i 符合用户 u 的偏好的概率(又称 item 与用户的相关性)。

如果把模型的评估指标,从拟合 click 数据:

其中 δ(·)为具体的损失函数(比如交叉熵代价函数);

为模型预估的用户 u 与 item i 的相关性;

括号里的两项分别代表 item 与用户有相关性,或没有相关性的预估损失。

可以证明的是,以上两种方法(Heuristic Weighting 和 Exposure-based model)定义的损失函数,都不是上述理想损失函数的无偏估计。

实际上,可以证明,理想损失函数的无偏估计的表达式为:

那么,问题就转移到了,如何去估计 item i 对用户 u 的曝光概率,这是一个倾向性打分的估计问题。最简单的做法是,使用 item 的相对热度来估算倾向性打分,即:

其中分母是正向行为次数最多的 item 对应的总次数,分子是当前 item 的正向行为次数。ŋ≤1 作为一个超参数来调节曝光概率的大小,因为相对于统计得到的后验点击率,曝光概率应当大于后验点击率。需要注意到,这个估算是对用户无差别的,存在一定局限性。(文献[13]中的做法)更多地倾向性打分的估算思路,可以参考上文“启发式调权”。

评估指标的 debias

在样本层面就包含了 bias 的场景中,人们把所有样本一视同仁地加入到模型的评估指标中,也会造成评估指标的 bias,所以需要矫正评估指标当中的偏差。

一个比较直接的办法是利用 inverse propensity score(倾向性打分的倒数,下文简称 IPS)来矫正评估指标中的偏差[7]。从直观上去理解 IPS 方法,即对那些频繁出现的 item 降权,而对那些较少出现的 item 做加权。

对于推荐系统而言,理想情况下的评估指标都可以表达成如下的形式:

U 是用户 u 的集合,c(·)是待评估指标的具体表达式,与指标定义有关,比如对于 AUC 来说,它的表达式为:

表示用户对曝光的 item 发生了正向行为的 item 集合;指标的下角标 AOA 表示 Average-over-all。可以发现,在实际的评估指标中,指标也受曝光变量 O 的影响。

曝光变量 O_ui 即 item i 是否曝光给用户 u,并不是无偏的,往往高热 item 更可能曝光给用户。具体来说,会导致

该指标被证明了在数据量 n 极大的情况下,将会收敛到

在该框架下,问题即转换成为了如何去估计 IPS,则成为一个较为开放的问题,有相关的各种解决方案。(参考上文“启发式调权”)

参考文献

[1] Jiawei Chen, Hande Dong, Xiang Wang, Fuli Feng, Meng Wang, and Xiangnan He. 2020. Bias and Debias in Recommender System: A Survey and Future Directions.

[2] Huifeng Guo, Jinkai Yu, Qing Liu, Ruiming Tang, Yuzhou Zhang. 2019. PAL: A Position-bias Aware Learning Framework for CTR Prediction in Live Recommender Systems.

[3] Nick Craswell, Onno Zoeter, Michael Taylor, and Bill Ramsey. 2008. An experimental comparison of click position-bias models.

[4] Aman Agarwal, Kenta Takatsu, Ivan Zaitsev, and Thorsten Joachims. 2019. A general framework for counterfactual learning-to-rank.

[5] Qingyao Ai, Keping Bi, Cheng Luo, Jiafeng Guo, and W Bruce Croft. 2018. Unbiased learning to rank with unbiased propensity estimation.

[6] Thorsten Joachims, Adith Swaminathan, and Tobias Schnabel. 2017. Unbiased learning-to-rank with biased feedback.

[7] LongqiYang, YinCui, YuanXuan, ChenyangWang, SergeBelongie, and DeborahEstrin. 2018. Unbiased offline recommender evaluation for missing-not-at-random implicit feedback.

[8] Yifan Hu, Yehuda Koren, and Chris Volinsky. 2008. Collaborative filtering for implicit feedback datasets.

[9] Rong Pan and Martin Scholz. 2009. Mind the gaps: weighting the unknown in large-scale one-class collaborative filtering.

[10] Xiangnan He, Hanwang Zhang, Min-Yen Kan, and Tat-Seng Chua. 2016. Fast matrix factorization for online recommendation with implicit feedback.

[11] Yanen Li, Jia Hu, ChengXiang Zhai, and Ye Chen. 2010. Improving one-class collaborative filtering by incorporating rich user information.

[12] Dawen Liang, Laurent Charlin, James McInerney, and David M Blei. 2016. Modeling user exposure in recommendation.

[13] Yuta Saito. 2020. Unbiased Pairwise Learning from Biased Implicit Feedback.

责任编辑:未丽燕 来源: 字节跳动技术团队
相关推荐

2017-03-07 15:13:28

Scala偏函数函数

2023-06-19 13:57:00

数据系统

2021-08-04 16:06:45

DataOps智领云

2023-12-22 19:59:15

2016-10-25 14:35:05

分布式系统 存储

2018-09-28 14:06:25

前端缓存后端

2022-09-22 09:00:46

CSS单位

2022-11-06 21:14:02

数据驱动架构数据

2019-12-17 08:16:04

JavaScriptthis编程

2021-09-04 19:04:14

配置LogbackJava

2020-12-21 10:38:07

大数据大数据组件大数据生态

2018-10-18 11:00:50

人工智能机器学习模型偏差

2023-11-21 09:41:00

缓存策略存储

2022-10-20 08:01:23

2021-12-29 18:00:19

无损网络网络通信网络

2022-07-26 00:00:03

语言模型人工智能

2023-05-20 17:58:31

低代码软件

2023-11-27 17:35:48

ComponentWeb外层

2022-07-05 06:30:54

云网络网络云原生

2022-12-01 17:23:45

点赞
收藏

51CTO技术栈公众号