推荐系统(七)——SIGIR'21不要把流行度偏差一棍子“打死”

2022-09-19 11:52:38 浏览数 (2)

image.png

Causal Intervention for Leveraging Popularity Bias in Recommendationhttps://arxiv.org/pdf/2105.06067.pdf

文中部分公式较长,可以左右滑动公式

背景

本文所提方法针对召回阶段所用方法。之前的工作考虑的是如何缓解流行偏差带来的问题,包括IPS,causal embedding等,而本文考虑的是直接缓解流行偏差而不是流行偏差带来的影响。并且本文考虑到“不是所有流行偏差都是有害的”,流行的item可以反映这个item的趋势和内在特性。而我们需要缓解的是流行偏差对item曝光带来的影响。

  • 利用因果图,从混杂因子角度分析流行度对结果的影响
  • 提出Popularity-bias Deconfounding and Adjusting (PDA)框架,通过干预去除混杂从而缓解流行偏差对曝光的影响,而最终影响到结果

图a反映的是通常的做法,即通过user(U)和item(I)的关系来计算得分(C);而现在构建新的因果图,如图b,Z表示数据流行度。数据流行一方面可以反映数据本身的内在特性和其趋势,用户本身可能就会在心理上倾向于这类商品,因此Z对C有直接影响;另一方面,由于存在Z,他会影响item的最终曝光,热门的item往往曝光的更高。从图中可以发现,这个Z他是I和C的共同原因,因此Z是混杂因子,可以通过干预(do)来解决。

方法

分阶段计算流行度

通常我们直接计算user和item的交互次数,从而获得item的流行度。本文采用分阶段的方式,计算不同阶段内的局部流行度。

m_i^t=D_i^t/sum_{j in I}{D_j^t}
m_i^t

表示item i在第t阶段中的流行度。

D_i^t

表示t阶段的样本集合

D_t

中item i的交互频次。

流行度漂移

本文考虑了流行度漂移(popularity drift),即随着时间的变化(阶段stage的变化),item的流行度是会发生变化的,而不是固定不变的。因此本文定义了Drift of Popularity (DP)来定量的衡量流行度漂移。如下式,通过JS散度衡量两个阶段之间的流行度差异。

D P(t, s)=J S Dleft(left[m_{1}^{t}, ldots, m_{|T|}^{t}right],left[m_{1}^{s}, ldots, m_{|I|}^{s}right]right)

其中,

m_i^t

即上面的第t阶段的局部流行度,t和s为两个不同的阶段。

根据图中所示,作者对不同数据集的相邻阶段的流行度偏差DP(t, t 1)和第一阶段到第t阶段的累积偏差DP(1,t)进行了计算和统计,可见数据在不同阶段是存在流行度偏差的。

去混杂

去除混杂的方式在之前的因果推断三和因果推断四中已经有所讲解,感兴趣的小伙伴可以进行查看。这里直接给出方案,根据本文的因果图b,我们可以用后门调整,通过干预来去除混杂,调整公式如下。

begin{array}{l} P(C mid operatorname{do}(U, I)) stackrel{(1)}{=} P_{G^{prime}}(C mid U, I) \ stackrel{(2)}{=} sum_{z} P_{G^{prime}}(C mid U, I, z) P_{G^{prime}}(z mid U, I) \ stackrel{(3)}{=} sum_{z} P_{G^{prime}}(C mid U, I, z) P_{G^{prime}}(z) \ stackrel{(4)}{=} sum_{z} P(C mid U, I, z) P(z) end{array}

其中

P_{G'}

表示干预U,I后的概率。通过调整公式,我们可以发现对U,I进行干预后的概率计算方式可以通过原先的P来得到(公式4)

建模训练

step 1

通过图b,c我们可以知道,我们需要建的模型是

P_{Theta}(c=1|u,i,m_i^t)

,即根据u,i以及局部流行度来计算当前item被推荐的概率。当然我们可以直接对其进行建模,利用神经网络或一些现有的模型,但是这比较复杂。作者更希望达到的是对原有模型改动较小的情况下具有较好的可扩展性,“即插即用”。因此作者将其设计为下式

P_{Theta}left(c=1 mid u, i, m_{i}^{t}right)=E L U^{prime}left(f_{Theta}(u, i)right) timesleft(m_{i}^{t}right)^{gamma}

其中ELU'是激活函数,

f_{Theta}

表示常见的模型,例如MF等,

gamma

表示超参数,控制局部流行度的影响程度。

step 2

在得到了P(C|U,I,Z)后,根据调整公式,计算干预后的值

sum_{z} P(C mid U, I, z) P(z)

begin{aligned} P(C mid d o(U, I)) &=sum_{z} P(C mid U, I, z) P(z) \ &=sum_{z} E L U^{prime}left(f_{Theta}(u, i)right) times z^{gamma} P(z) \ &=E L U^{prime}left(f_{Theta}(u, i)right) sum_{z} z^{gamma} P(z) \ &=E L U^{prime}left(f_{Theta}(u, i)right) Eleft(Z^{gamma}right) end{aligned}

将上述的

P_{Theta}(c=1|u,i,m_i^t)

的公式带入其中,可以得到最后的式子。可以发现的是,

Eleft(Z^{gamma}right)

是常量,因此在训练的时候只需要训练好原始模型就行,例如MF等。

预测

在预测阶段,作者希望更好的利用流行度偏差,来进行预测,因此根据之前所提的不同阶段的流行度漂移,来计算当前的流行度偏差,如下式:

tilde{m}_i=m_i^T alpha(m_i^T-m_i^{T-1})

其中

m_i^T

表示在此次预测之前最后一个阶段的流行度偏差,最后通过P(C|do(U,I))的推导式来计算得到最终的得分,如下式

E L U^{prime}left(f_{Theta}(u, i)right) (tilde{m}_i)^{tilde{gamma}}

,此处的

tilde{gamma}

可以和之前的不一样。

总体流程

如下图所示,蓝色箭头是训练阶段,红色箭头是预测阶段

有问题的小伙伴可以联系我

0 人点赞