概述
推荐系统主的Bias系列(一)—position bais
背景:
推荐系统中bias有很多,position bias 算是非常常见的一种,很容易被大家感知到。在信息流或者淘宝等推荐场景中,用户一刷可能会出现多个推荐内容,一版来说是根据排序的结果排列显示给用户。但是,用户对不同位置上的内容注意力是不一样的(单纯地说按照用户观察到的概率其实不太准确),导致用户对于每个位置的内容倾向性有差异,从而就会产生一个偏差。复杂点说就是我们的训练样本中都是基于每个位置的样本(消费数据中其实就已经有了位置数据了),推理中我们事先根本不知道该内容会处于哪个位置。我们可以做一个直观的统计,是可以发现每个位置上内容的平均CTR有明显差异的。
关于position bais的一些解决方法,下面我主要介绍两大类:
一:基于特征的一些方法
1:直接将位置信息作为特征
很简单的思路,训练的直接将位置信息作为特征。在线推理的时候由于无法获得位置特征,可以直接取默认值。将位置信息作为特征,模型可以很好地学习到不同位置对用户消费的影响,然后在推理的时候,所有的内容都是一样的位置信息,可以直接进行比较。
注:一版来说,可以将位置特征放置于浅层的地方,比如在DNN的最后一层再讲embedding后的位置特征加入进去。 还有,位置信息类的特征别和其余特征做交叉。
2:位置信息作为模块
这种方法以(Recommending What Video to Watch Next: A Multitask Ranking System—YouTube)为例。
该方法将位置类的信息作为一个shallow tower。这种方法利用更多的位置信息,其中还包含设备信息(不同设备即使是同一个位置对用户感知还是有差异的),并且位置信息之间会有交叉操作。训练的时候将交叉后的位置信息输入到一个MLP中(10%的dropout),输出一个logit,与排序的logit直接相加。
与上面的将位置信息直接作为特征相比,这种方法利用了更多的信息,并且将这些信息整合后放在了排序的DNN更后面的地方,有点类似于DeepFM的操作。
3:PAL(PAL: A Position-bias Aware Learning Framework for CTR Prediction in Live Recommender Systems—华为)
用户点击可以拆解为用户查看和用户查看后点击,因此
p ( y = 1 ∣ x , p o s ) = p ( s e e n ∣ p o s ) p ( y = 1 ∣ x , s e e n ) p(y=1|x,pos)=p(seen|pos)p(y=1|x,seen) p(y=1∣x,pos)=p(seen∣pos)p(y=1∣x,seen)
和YouTube的shallow tower特别相似,只是把最后的加号变成乘号。
关于将点击拆分成观看和观看后点击的操作,其实还有在负样本采集的时候过滤掉用户未能查看到的内容。(一般信息流一刷8条的话,很多情况下一个全页面只能显示3-4条,用户不往下拉的根本不能看到下面,这时候用户没有看到的内容不应该作为负样本)
在我看来,训练一个ProSeen来与pCTR进行相乘得到最后的bCTR是可行的,但是将ProSeen理解为用户看到该位置内容的概率是不合理的,因为一般来说,前面2-3条只要用户刷新肯定是可以看见的,那么他们的ProSeen概率应该是一样的,但是明显那几个位置的上的点击率有明显差异。因此我更倾向于将ProSeen理解为用户对于该位置的倾向性,或者用户对于该位置的注意力系数。
二:基于IPW的一些方法
上面的方法都是基于position特征的方法,通过各种方法再训练阶段添加position特征,然后推荐阶段不使用该特征。在我看来上面的方法简单实用,如果让我position debias的话,我会选择上面的方法。但是既然是科普,我也就给大家普及一下基于IPW的方法了。这类方法在近期还是有一些人研究的。
介绍这种方法之前可能还有一些普及的知识。(这类的方法其实更多的是用于搜索推荐中,和上面的方法可能会有点割裂感)
IPW的相关介绍
1:Learning to Rank
根据机器学习对用户的反馈信息进行学习,然后对一组候选内容进行打分(简单地说就是排序)。
2:bias in Learning to Rank
用户的点击数据是我们进行训练的来源,但是用户是否点击还受到其余的影响,文章与用户的匹配性(也就是我们常规rank的得分),是否被观察到,其余因素。我们可将后面的统称为倾向。位置倾向是其中很重要的一点,与其说我们下文中的debias是去除位置偏差,不如说是去除所有倾向。
3:IPW(参考论文[])
同样的我们可以将用户点击分为两步:
p ( c i = 1 ) = p ( o i = 1 ) ⋅ p ( r i = 1 ) p(c_i=1)=p(o_i=1)cdot p(r_i=1) p(ci=1)=p(oi=1)⋅p(ri=1)
用户点击的概率等于用户偏向概率乘以该内容与用户的匹配度。我们模型需要学习的是用户和内容之前的匹配度也就是
r
i
=
1
r_i=1
ri=1,但是倾向的存在导致我们训练样本中只能拿到点击行为作为训练数据
c
i
=
1
c_i=1
ci=1。因此我们要去倾向的影响。令:
l
(
S
,
q
)
=
∑
x
i
∈
π
q
,
r
i
=
1
Δ
(
x
i
,
r
i
∣
π
q
)
P
(
o
i
=
1
∣
π
q
)
l(S,q)=sum_{x_i in pi_q,r_i=1} frac{Delta(x_i,r_i|pi_q)}{P(o_i=1|pi_q)}
l(S,q)=xi∈πq,ri=1∑P(oi=1∣πq)Δ(xi,ri∣πq)
则:
l
I
P
W
(
S
,
q
)
=
∑
x
i
∈
π
q
,
c
i
=
1
Δ
(
x
i
,
c
i
∣
π
q
)
P
(
o
i
=
1
∣
π
q
)
l_{IPW}(S,q)=sum_{x_i in pi_q,c_i=1} frac{Delta(x_i,c_i|pi_q)}{P(o_i=1|pi_q)}
lIPW(S,q)=xi∈πq,ci=1∑P(oi=1∣πq)Δ(xi,ci∣πq)
注:
π
q
pi_q
πq是某一次请求的rank list,
l
(
S
,
q
)
,
l
I
P
W
(
S
,
q
)
l(S,q),l_{IPW}(S,q)
l(S,q),lIPW(S,q)表示的是loss,
Δ
(
x
i
,
c
i
∣
π
q
)
Delta(x_i,c_i|pi_q)
Δ(xi,ci∣πq)表示的是给用户在第
i
i
i个位置推荐
x
x
x产品的模型损失函数。
其中
l
(
S
,
q
)
l(S,q)
l(S,q)使我们模型训练需要的loss,
l
I
P
W
(
S
,
q
)
l_{IPW}(S,q)
lIPW(S,q)公式中去掉
P
(
o
i
=
1
∣
π
q
)
P(o_i=1|pi_q)
P(oi=1∣πq)是我们根据用户消费数据可以训练的loss。我们需要证明加上
P
(
o
i
=
1
∣
π
q
)
P(o_i=1|pi_q)
P(oi=1∣πq)后两个loss是等价的。简单来说:
E
o
q
[
l
I
P
W
(
S
,
q
)
]
=
E
o
q
[
∑
x
i
∈
π
q
,
o
i
=
1
,
r
i
=
1
Δ
(
x
i
,
r
i
∣
π
q
)
P
(
o
i
=
1
∣
π
q
)
]
=
E
o
q
[
∑
x
i
∈
π
q
,
r
i
=
1
o
i
⋅
Δ
(
x
i
,
r
i
∣
π
q
)
P
(
o
i
=
1
∣
π
q
)
]
=
∑
x
i
∈
π
q
,
r
i
=
1
E
o
q
[
o
i
]
⋅
Δ
(
x
i
,
r
i
∣
π
q
)
P
(
o
i
=
1
∣
π
q
)
=
∑
x
i
∈
π
q
,
r
i
=
1
P
(
o
i
=
1
∣
π
q
)
⋅
Δ
(
x
i
,
r
i
∣
π
q
)
P
(
o
i
=
1
∣
π
q
)
=
l
(
S
,
q
)
begin{aligned} E_{o_q[l_{IPW}(S,q)]}=& E_{o_q}[sum_{x_iinpi_q,o_i=1,r_i=1}frac{Delta(x_i,r_i|pi_q)}{P(o_i=1|pi_q)}] \ & =E_{o_q}[sum_{x_iinpi_q,r_i=1}frac{o_icdotDelta(x_i,r_i|pi_q)}{P(o_i=1|pi_q)}]\ & =sum_{x_iinpi_q,r_i=1}E_{o_q}[o_i]cdotfrac{Delta(x_i,r_i|pi_q)}{P(o_i=1|pi_q)}\ & =sum_{x_iinpi_q,r_i=1}P(o_i=1|pi_q)cdotfrac{Delta(x_i,r_i|pi_q)}{P(o_i=1|pi_q)}\ & =l(S,q) end{aligned}
Eoq[lIPW(S,q)]= Eoq[xi∈πq,oi=1,ri=1∑P(oi=1∣πq)Δ(xi,ri∣πq)] =Eoq[xi∈πq,ri=1∑P(oi=1∣πq)oi⋅Δ(xi,ri∣πq)] =xi∈πq,ri=1∑Eoq[oi]⋅P(oi=1∣πq)Δ(xi,ri∣πq) =xi∈πq,ri=1∑P(oi=1∣πq)⋅P(oi=1∣πq)Δ(xi,ri∣πq) =l(S,q)
当
o
i
=
1
o_i=1
oi=1是
r
i
r_i
ri与
c
i
c_i
ci是等价的(简单来说,当去除所有倾向之后,模型的得分应该与实际的得分一致),因此上面等式中的第一行是等价的。
下面我也贴出论文(Unbiased Learning to Rank with Unbiased Propensity
Estimation)中的参考:
从上面的公式我们可以了解到,我们只要把
P
(
o
i
=
1
∣
π
q
)
P(o_i=1|pi_q)
P(oi=1∣πq)搞定就行了,这个就算倾向得分(或者倾向系数也可以)。但是这个怎么整呢?
消除倾向的几种方法
1:基于后验证的统计方法
很简单,我们可以统计出来各个位置上内容的点击率,将这个后验的点击率进行归一化。比如第一个位置为1,第二个位置为0.9,第三个位置为0.8。将这个得分作为倾向性得分。将倾向性得分用户模型训练,然后线上推理的时候不使用该得分。
感觉和上面采用特制的方法有点异曲同工之处,实际操作的起来看起来很简单的样子。
2:基于EM的方法
上式中, Δ ( x i , r i ∣ π q ) Delta(x_i,r_i|pi_q) Δ(xi,ri∣πq)和 P ( o i = 1 ∣ π q ) P(o_i=1|pi_q) P(oi=1∣πq)其实都是隐藏的。可以采用EM算法进行更新。自动化的学习上述的两个隐藏变量。
参考论文:Position Bias Estimation for Unbiased Learning to Rank in Personal Search
3:Unbiased Learning to Rank with Unbiased Propensity Estimation
第三种方法是一张通过对偶来学习Rank Model和Propensity(倾向性) Model来求解Propensity Score的方法。感觉使用性不大,就不介绍了。
总结:由于第一部分的方法比较常见,我的本意是好好介绍一下第二部分的方法,但是仔细研读论文的时候发现第二类方法偏学术风,并且计算复杂,不介意大家在实际的场景中直接使用,因此就写了下方法,大家感兴趣的话可以自己研读。(太学术,怕自己讲不清楚,因此就只能介绍一下IPW了)
最后
以上就是秀丽指甲油为你收集整理的推荐系统中的Bias系列(一)—position bias推荐系统主的Bias系列(一)—position bais的全部内容,希望文章能够帮你解决推荐系统中的Bias系列(一)—position bias推荐系统主的Bias系列(一)—position bais所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复