3

推荐系统的Bias

 1 year ago
source link: https://juejin.cn/post/7169387280275079205
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

我们来自字节跳动飞书商业应用研发部(Lark Business Applications),目前我们在北京、深圳、上海、武汉、杭州、成都、广州、三亚都设立了办公区域。我们关注的产品领域主要在企业经验管理软件上,包括飞书 OKR、飞书绩效、飞书招聘、飞书人事等 HCM 领域系统,也包括飞书审批、OA、法务、财务、采购、差旅与报销等系统。欢迎各位加入我们。

本文作者:飞书商业应用研发部 黄兆龙

欢迎大家关注飞书技术,每周定期更新飞书技术团队技术干货内容,想看什么内容,欢迎大家评论区留言~


什么是推荐系统?

95c59cdd020d4468a920d646b3f9cfca~tplv-k3u1fbpfcp-zoom-in-crop-mark:4536:0:0:0.awebp

推荐系统的本质可以理解为是三个关键组件的反馈循环:User、Data、Model;

  • User→Data(Collection):表示从用户那里收集数据的阶段,这些数据包括user-item的交互行为,比如点击、停留、评分、转化等,以及一些 side info,比如用户画像,物品属性,上下文等等;
  • Data->Model(Learning):表示根据收集的数据学习推荐模型的阶段。其核心是从历史行为中获取用户偏好,并预测用户对于目标的物品是否喜欢的可能性;
  • Model→User(Serving):表示将推荐结果返回给用户的阶段,以此来满足用户的信息需求。这个阶段将影响用户未来的行为和决策。

通过这个循环,用户和推荐系统之间处于一个相互动态进化的过程,用户的个人兴趣和行为通过推荐系统不断的得到更新,而推荐系统可以通过不断更新的数据自我学习。

常见的Bias

What's Bias?

Bias这个词在推荐系统中很常见,可以翻译为「偏差」,定义为学习算法的期望预测与真实结果的偏离程度。上面说到推荐系统本质上是一个反馈循环,那么在这个反馈循环的链路中每个结点都会导致不同类型的偏差。

Bias in Data (User->Data)

第一类偏差是数据偏差,主要发生在user->data的阶段,那么为什么会发生这类偏差?

  • 理想中的数据:拿所有的物品去问每个人,拿到每个人对于每个物品的行为数据;
  • 实际中的数据:用户只能观测到部分物品,并且只对部分观测的物品有交互行为数据,同时用户的交互行为容易受到各种外界因素影响;

所以数据偏差的本质,就是训练数据集的分布和理想的测试集分布不一致;

b61e7f4299654b67a0e37bfafab262c1~tplv-k3u1fbpfcp-zoom-in-crop-mark:4536:0:0:0.awebp

蓝色线是训练的经验风险,红色线是理想的真实风险,

假设训练数据找到最优解f^T的时候,此时和理想的真实风险,仍然有△L的偏差;

Selection Bias 选择偏差

选择偏差主要发生在用户的显示反馈中,比如需要用户对物品进行数字打分的场景(图书的星级评分,电影的喜好打分等场景),因为用户可以自由选择要评分的项目,因此我们收集到的打分数据是稀疏的,并不是所有数据的代表性样本,这就是选择偏差的定义。

导致选择偏差的原因主要有两点:

  1. 用户倾向于选择和评价他们喜欢的物品;
  1. 用户更有可能对特别好或者特别差的物品进行打分;
1fc763508f0c4c8daa7f3b0916873a2b~tplv-k3u1fbpfcp-zoom-in-crop-mark:4536:0:0:0.awebp

Conformity Bias 一致性偏差

一致性偏差,同样也是发生在用户的显示反馈中,但同选择偏差不同的是,一致性偏差的原因并非是受观测到的数据所影响,更多是受人的“社会性”因素以及“从众效应”所影响,一致性偏差的定义如下:

一致性偏差发生在用户的行为往往趋于与“同组”的其他人相似,即使这样做违背了他们自己的判断,使得反馈并没有反映出用户的真实偏好。

  • 假设《阿甘正传》我看完心里觉得只值2星:

    • 如果我看不到别人的评价,也不知道别人对该影片的评价,可能就会打出2星;
    • 如果评价的时候看到了统计数据,发现大部分人都评价5星,我可能想自己是不是太苛刻了,或者我是不是没看懂,可能就会给个4星;
    • 如果评价的时候看到了具体打分的数据,里面有我的很多朋友都给出了5星的评价,那我可能为了融入大家,也同样打出个5星;

Exposure Bias 曝光偏差

  • 显示反馈:比如评分、评级等行为,表示用户明确对物品的态度,数据准确性较高,但比较稀疏;
  • 隐式反馈:主要反映在用户的自然行为中,比如查看、停留、点击、购买等等,数据量非常大,但准确性不足且包含噪声;
  • 曝光偏差,就是发生在用户的隐式反馈中,因为用户只能接触到一部分特定的物品,那么对于未观察到的交互,可能代表着用户不感兴趣,也可能是用户不知道但可能感兴趣,这种情况就带来了曝光偏差;
    •    曝光偏差通常有若干种情况:
    • 因为曝光的物品是受之前推荐系统的影响,它控制着哪些物品会曝光,因此曝光偏差也会称作“previous model bias”;
    • 用户通常会积极的搜索自己感兴趣的物品,也会更积极的与感兴趣的物品交互,使得高度相关的物品更可能被曝光,在这种情况下,曝光偏差也叫做“user-selection bias”;
    • 用户的背景也是影响曝光的因素,比如说社交关系,地理位置等,也会影响曝光的物品;
    • 用户更可能看到热门的物品,因此“popularity bias”也是某种意义上的曝光偏差;

Position Bias 位置偏差

位置偏差也是发生在用户的隐式反馈中:用户倾向于与推荐列表更高位置的物品进行交互,无论物品的实际相关性如何,所以导致交互的物品可能不会高度相关,位置偏差在推荐系统中非常常见,尤其是广告系统和搜索引擎中。

  • 有几种原因可能导致位置偏差:
    • 人眼的可视角度是有限的(120度左右),根据眼球追踪的研究来看,用户一般不太注意垂直列表中排名较低的物品,会更容易注意到列表的头部位置;
    • 用户通常会更信任列表中的Top结果,然后停止查看后面的结果,导致用户没有全面的评估整个列表(搜索引擎中很常见)

Bias in Model (Data->Model)

Inductive Bias 归纳偏差

归纳偏差是发生在数据到模型的训练阶段,是指为了让模型更好的学习目标函数以及泛化训练数据,我们不得不做出一些额外的假设而带来的偏差。

  • 机器学习的核心就是为了预测那些模型没有见过的数据,那么没有对数据或者模型的假设,就无法实现模型的泛化性,所以在构建推荐系统的时候需要对目标函数添加一些假设,有一些比较典型的例子:
    • 在矩阵分解算法里,会将用户和物品的交互估算成二者向量的内积,这就是一种假设;

    • 在负采样的过程中,会采样一些hard数据来提升模型学习能力,要么由此产生的损失函数与原始的就会有所区别;

    • 在label的选取上,用户对一个视频是否感兴趣,应该使用播放时长为目标,还是完播为目标,不同的目标都带来了不同的假设;

Bias and Unfairness in Results (Model→User)

Popularity Bias 流行度偏差

流行度偏差,简单来说热的更热,冷的更冷,受欢迎的物品被推荐的频率甚至比它们的受欢迎程度更频繁 ,为什么会出现这种偏差?

长尾效应在推荐系统中很常见,大多数情况下,一小部分流行的物品会占据大多数用户的交互,此类数据的训练将会导致热门物品的打分越来越高,推荐热门商品的频率甚至比数据集中显示的原始受欢迎程度还要频繁;

  • 流行度偏差会带来很多问题:
    • 会降低用户的个性化体验,由于不同用户的偏好各不相同,始终推荐热门商品会损害用户体验;
    • 会降低结果公平性,因为热门商品并不总是高质量,过度推荐高热会挤压其他优质内容;
    • 进一步增加了流行物品的曝光机会,导致未来收集的数据更加的不平衡,导致马太效应;

Unfairness 不公平偏见

关于公平的一种定义:没有基于个人或群体的内在或后天特征而对他们有任何偏见或偏袒

那么推荐系统中不公平偏见,即是系统不公平的歧视某些个人或群体,以利好其他人;

不公平问题一直在推荐系统中很常见。特别是根据种族、性别、年龄、教育水平或财富等属性,不同的用户群体在数据中的代表性通常不平等。在对此类不平衡数据进行训练时,这些模型极有可能了解这些代表性过高的群体,在排名结果中强化他们,并可能导致系统性歧视并降低弱势群体的可见度;

    • 在简历推荐领域,优秀学历的人更容易排序在前面;
    • 在书籍推荐领域,推荐男性作者的书籍会让推荐表现更好;

Feedback Loop Amplifies Biases

推荐系统本质上就是一个循环,那么当循环的每个路径过程中都会发生偏差的情况下,就会变成恶性循环不断的放大Bias。

常见的Debias方法

上面系统介绍了学术界常见的7种Bias,本文针对其中工业界最常见的3种bias总结了一些解决的方法。

Methods for Exposure Bias

Debiasing in evaluation

第一类方式主要从模型评估的角度出发,引入IPS来纠偏

Inverse Propensity Score

理想中的评估方式:

R(Z^)=1∣U∣∑u∈U1∣Gu∣∑i∈Guc(Z^ui)R(\hat{Z})=\frac{1}{|\mathcal{U}|} \sum_{u \in \mathcal{U}} \frac{1}{\left|\mathcal{G}_{u}\right|} \sum_{i \in \mathcal{G}_{u}} c\left(\hat{Z}_{u i}\right) R(Z^)=∣U∣1​∑u∈U​∣Gu​∣1​∑i∈Gu​​c(Z^ui​)

  • Z^ui\hat{Z}_{u i} Z^ui​是推荐系统返回的关于user和item的打分,函数c是我们的衡量指标(auc,ndcg等)
  • Gu\mathcal{G}_{u} Gu​代表了和user相关的所有item的集合

但是由于曝光偏差,用户只观察到部分项目,因此模型通常根据有偏见的隐式反馈进行评估:

R^AOA(Z^)=1∣U∣∑u∈U1∣Gu∗∣∑i∈Gu∗c(Z^ui)\begin{aligned} \hat{R}_{\mathrm{AOA}}(\hat{Z}) &=\frac{1}{|\mathcal{U}|} \sum_{u \in \mathcal{U}} \frac{1}{\left|\mathcal{G}_{u}^{*}\right|} \sum_{i \in \mathcal{G}_{u}^{*}} c\left(\hat{Z}_{u i}\right) \\ \end{aligned} R^AOA​(Z^)​=∣U∣1​u∈U∑​∣Gu∗​∣1​i∈Gu∗​∑​c(Z^ui​)​

  • Gu∗\mathcal{G}_{u}^{*} Gu∗​代表了那些被曝光给用户的物品集合;

为了解决这个问题,我们可以给每一条隐式反馈的数据增加一个反向的倾向分ρui\rho_{u i} ρui​。直觉的做法就是降低曝光数据的权重,同时提升未曝光数据的权重。因此,基于IPS的无偏评估的定义如下:

R^IPS(Z^∣ρ)=1∣U∣∑u∈U1∣Gu∣∑i∈Gu∗c(Z^ui)ρui=1∣U∣∑u∈U1∣Gu∣∑i∈Guc(Z^ui)ρui⋅sui\begin{aligned} \hat{R}_{\mathrm{IPS}}(\hat{Z} \mid \rho) &=\frac{1}{|\mathcal{U}|} \sum_{u \in \mathcal{U}} \frac{1}{\left|\mathcal{G}_{u}\right|} \sum_{i \in G_{u}^{*}} \frac{c\left(\hat{Z}_{u i}\right)}{\rho_{u i}} \\ &=\frac{1}{|\mathcal{U}|} \sum_{u \in \mathcal{U}} \frac{1}{\left|\mathcal{G}_{u}\right|} \sum_{i \in \mathcal{G}_{u}} \frac{c\left(\hat{Z}_{u i}\right)}{\rho_{u i}} \cdot s_{u i} \end{aligned} R^IPS​(Z^∣ρ)​=∣U∣1​u∈U∑​∣Gu​∣1​i∈Gu∗​∑​ρui​c(Z^ui​)​=∣U∣1​u∈U∑​∣Gu​∣1​i∈Gu​∑​ρui​c(Z^ui​)​⋅sui​​

在实际应用中,该方法是否有效主要取决于IPS的设计,如果设计不好,可能会引入更大的人为偏差;

Debiasing in Model Training

第二类方式主要是在模型训练中修正bias的方式,为了可以从隐式反馈提取负例的数据,一种直观的策略是把所有未曝光的数据都当做负例,但是每条数据需要赋予一个置信度的权重。

我们的目标函数通常可以这么表示:

L^W=1∣U∣∣I∣∑u∈U,i∈IWuiδ(r^ui,sui)\hat{L}_{W}=\frac{1}{|\mathcal{U}||\mathcal{I}|} \sum_{u \in \mathcal{U}, i \in \mathcal{I}} W_{u i} \delta\left(\hat{r}_{u i}, s_{u i}\right) L^W​=∣U∣∣I∣1​∑u∈U,i∈I​Wui​δ(r^ui​,sui​)

  • suis_{ui} sui​表示user和item是否有真正的交互行为;
  • WuiW_{ui} Wui​表示置信度权重,控制(u,i)(u,i) (u,i)有可能存在交互行为的概率

那么问题的核心就变成了置信度的权重该如何设计,通常有如下几种常见的方式:

Heuristic

核心思路:

  • sui=1s_{ui}=1 sui​=1的时候,Wui=1W_{ui} = 1  Wui​ =1 
  • sui=0s_{ui}=0 sui​=0的时候,Wui=c(0<c<1)W_{ui} = c (0< c <1) Wui​ =c (0<c<1)

    • 权重和user相关:Wui=cu,cu∝∑isuiW_{u i}=c_{u}, c_{u} \propto \textstyle\sum_{i} s_{u i} Wui​=cu​,cu​∝∑i​sui​用户交互的item越多,用户的权重就越高(意味着这些用户有更大的可能性触达未曝光的物品)
    • 权重和item相关:item被曝光的次数越高,权重越大(意味着曝光越多的物品越有可能性触达给没看过的用户)
    • 权重可以和user-item之间的特征相似性有关,特征越相似则权重越高
  1. 不同的user-item组合权重可能是不一样的,需要依赖丰富的人工知识+大计算资源来网格搜索;
  1. 没法办法手动指定百万级以上数据的权重,粗粒度的权重可能引入更多的人为偏差;

Sampling

核心思路:通过采样的方式来控制哪些数据可以进行模型训练以及这些数据的训练频次,假设采样概率为puip_{ui} pui​,那么损失函数等价于:

E(u,i)∼p[δ(r^ui,sui)]=∑u∈U,i∈Ipuiδ(r^ui,sui)\mathbb{E}_{(u, i) \sim p}\left[\delta\left(\hat{r}_{u i}, s_{u i}\right)\right]=\sum_{u \in \mathcal{U}, i \in \mathcal{I}} p_{u i} \delta\left(\hat{r}_{u i}, s_{u i}\right) E(u,i)∼p​[δ(r^ui​,sui​)]=∑u∈U,i∈I​pui​δ(r^ui​,sui​)

那么采样分布其实就等价于我们的置信度权重;

  • 最常见的方式就是随机负采样,对于流行的负样本可以过采样,因为更可能被曝光;
  • 利用更多的side info在补充采样策略,比如利用曝光未点击的数据,利用社交网络的信息,利用item-based的知识图谱

Methods for Position Bias

关于位置偏差的消偏方式,主要有两大类方法:

Click Models

第一类方法是在模型中引入position的信息,在模型训练中进行消偏;

  1. position作为特征(Airbnb的做法):

    1. 直接在模型特征中加入position特征,让模型自己学习,在预测的时候将特征置为0,这样处理会比较容易导致结果下降(训练时过度依赖位置信息,预测时位置信息丢失,导致变差)
    2. 为了减少相关性计算对position feature的依赖,可以在训练阶段对position feature进行Dropout,能够一定程度减少模型对位置特征的依赖
  1. position作为模块(shallow tower)(YouTube的做法)

如果不去除position bias,那么用户对一个item的ctr是由user engagement(用户偏好)和position bias共同造成的。如果能够将user engagement和position bias独立开来,将有助于提升模型的推荐质量。

YouTube提出的做法类似wide&deep,即添加一个浅层网络(shallow tower),输入position feature, device info(原因是在不同的设备上会观察到不同的位置偏差), 以及其他能够带来位置偏差的特征,输出为position bias分量。这就将user engagement和position bias 独立开来了。

在主模型的输出层的sigmoid激活函数之前,加上浅层网络的bias分量。训练的时候,随机丢掉10%的位置特征,防止模型过度依赖位置特征。预测的时候,直接丢掉浅层网络。

  1. position作为模块(PAL)(Huawei的做法)

首先有这样的假设:如果用户点击了某个物品,那么一定是“看到了”该物品,并且对该物品感兴趣,那么用户对于物品i在位置p点击的概率可以表示为:

P(C=1∣u,i,p)=P(C=1∣u,i,E=1)⏟rui⋅P(E=1∣p)⏟hp\begin{aligned} &P(C=1 \mid u, i, p) \\ &=\underbrace{P(C=1 \mid u, i, E=1)}_{r_{u i}} \cdot \underbrace{P(E=1 \mid p)}_{h_{p}} \end{aligned} ​P(C=1∣u,i,p)=rui​P(C=1∣u,i,E=1)​​⋅hp​P(E=1∣p)​​​

  • 如果用户点击了物品,则该物品必须被人眼看到了;
  • 如果用户看到了该物品,那么点击概率仅取决于其相关性;
  • 用户是否看到该物品仅取决于位置

基于该假设,就可以分开建模:

其中:ProbSeen部分是预估广告被用户看到的概率,pCTR部分是用户看到广告后,点击广告的概率,然后loss是两者的结合:

L(θps,θpCTR)=1N∑i=1Nl(yi,bCTRi)=1N∑i=1Nl(yi,ProbSeen⁡i×pCTRi)L \left(\theta_{p s}, \theta_{pCTR}\right) =\frac{1}{N} \sum_{i=1}^{N} l\left(y_{i}, bCTR_{i}\right)=\frac{1}{N} \sum_{i=1}^{N} l\left(y_{i}, \operatorname{ProbSeen}_{i} \times p C T R_{i}\right) L (θps​,θpCTR​) =N1​∑i=1N​l(yi​,bCTRi​)=N1​∑i=1N​l(yi​,ProbSeeni​×pCTRi​)

线上servering的时候,直接预估pCTR即可(ProbSeen都看作是1);

PAL的设计其实和ESMM非常类似,都是将事件拆解为两个概率事件的连乘,只不过PAL的假设过强,某些场景下这样的假设并不合适。

PAL和shallow tower的区别在于PAL是连乘概率,而shallow tower是类似wide&deep的相加。

IPS/IPW

第二类方法是用通用的IPS方法来解决,引入和位置相关的倾向分,来对训练loss进行调权,

LIPS(f)=∑u∈U,i∈I1ρ(q)suiλ(u,i∣f)L_{\mathrm{IPS}}(f)=\sum_{u \in \mathcal{U}, i \in I} \frac{1}{\rho(q)} s_{u i} \lambda(u, i \mid f) LIPS​(f)=∑u∈U,i∈I​ρ(q)1​sui​λ(u,i∣f)

我们引入和位置q相关的ρ(q)\rho(q) ρ(q)来作为每个instance的loss的权重,这个模型背后的直觉是,那些用户更难看见的物品(比如排序更靠后的物品)应该赋予更大的权重,以此来弥补偿位置偏差的影响。

Methods for Popularity Bias

关于流行度偏差的消偏方式,主要有几种方法:

Adversarial Learning

利用对抗学习的思路,设计一个判别器D来抵消这种偏差,提升长尾数据的曝光机会;

判别器D的输入有两个,

一个是生成的“流行-长尾”pair对(i~p,i~n∣u)\left(\tilde{i}^{p}, \tilde{i}^{n}\mid u\right) (i~p,i~n∣u),通过推荐系统的结果生成;

一个是真实的“流行-长尾”paire对(ip,in)\left(i^{p}, i^{n}\right) (ip,in),通过全局的共现采样中得出;

通过推荐模型G和判别器D的对抗训练,可以让判别器D学出流行物品与长尾的潜在联系,同时让推荐模型G能够学到和用户历史相关的长尾物品。从而为用户推荐各种长尾物品。

Causal Graphs

因果图是反事实推理的有力工具,假设用户的点击取决于兴趣和流行度,那么可构建如图a的因果图:

在实际应用过程中如图b,可以将用户和物品的Emebdding解耦为兴趣Embedding和流行度Embedding,利用多任务的框架训练,让兴趣Embedding和流行度Embedding尽可能独立,空间足够远,最终在线上应用的时候,可以只用兴趣的Embedding,以此来消除流行度偏差。


加入我们

扫码发现职位&投递简历

官网投递:job.toutiao.com/s/FyL7DRg


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK