今天带来的是由中科院、国科大、中山大学以及鹏城实验室联合出品的关于隐性反馈推荐场景下正反馈噪声消除的作品,发表在ACM MM 2021上,值得推荐。
隐式反馈(implicit feedback)场景,本文称之为单类协同过滤(One-Class Collaborative Filtering, OCCF),不同于显示反馈中通过打分来表达喜好,是通过 0/1 的方式(浏览或非浏览、购买或未购买),显然带有很多的噪声。
以往的模型关注于负例中的噪声,即与用户没有交互的物品,用户也不一定不喜欢。在本文中,作者首度关注到了正反馈中的噪声,即与用户交互过的物品也不一定都是作者喜欢的,可能是广告营销点进去的,可能是不小心点错点进去的,等等。
本文即聚焦于此,通过提出一个基于迭代重标注(iterative relabeling)过程的自监督学习(Self-Supervised Learning, SSL)框架,完成单类协同过滤中的隐式反馈噪声去除问题。
方法论部分一言以蔽之可以概括为:由于原始的interaction数据中存在噪声,作者基于SSL设计了一个prediction model和一个relabeling process,这两部分相辅相成促进了用户交互历史的提纯。通过迭代上述过程,用户的真正喜好被提取。上述过程即代理任务,提高了数据分布合理性。在此基础上,下游任务的性能就可以提高。具体地,作者使用BPR或者MLP完成具体推荐任务,用于验证SSL的有效性。
prediction model 使用 BPR 方法,通过向量内积计算交互分数,对用户的预测结果进行排序,(1)首先是正例:绝对靠前(前 n + n_+ n+ 个)的叫做confident positive items,比较为 1 1 1;绝对靠后的(后 n − n_- n− 个),认为是噪声,叫做confident negative items。中间的一些看比例,相对靠前标 1 1 1,相对靠后标 0 0 0。(2)其次是负例,靠前(负例中前 n + u n o b s e r v e d n_{+}^{unobserved} n+unobserved )的负例也标为 1 1 1,即负例中的noise。
重新标记完事之后,把数据重新喂给prediction model,以此类推,迭代进行,直到收敛。
完事以后,拿训练好的用户与物品的embedding对用户与物品向量进行初始化,在得到的提纯过的交互矩阵上,通过简单的推荐模型完成推荐。
看上面的 Architecture 图比较好理解,看论文原文方法论部分由于符号太多反而不易梳理。下面进行详细又简单地介绍。
预测模型通过简单的内积方法及BPR损失完成,具体如下:
min θ − ∑ ( u , i , j ) ∈ T log σ ( v u ⊤ v i − v u ⊤ v j ) . (1) \min _{\theta}-\sum_{(u, i, j) \in \mathcal{T}} \log \sigma\left(\boldsymbol{v}_{u}^{\top} \boldsymbol{v}_{i}-\boldsymbol{v}_{u}^{\top} \boldsymbol{v}_{j}\right). \tag{1} θmin−(u,i,j)∈T∑logσ(vu⊤vi−vu⊤vj).(1)
通过上式对预测模型 p θ p_{\theta} pθ 进行训练,得到最终的 embedding 表示 θ ∗ = { v u ∗ , v i ∗ } \theta^{*}=\left\{\boldsymbol{v}_{u}^{*}, \boldsymbol{v}_{i}^{*}\right\} θ∗={vu∗,vi∗}。用户 u u u 与物品 i i i 之间的预测分数表示为内积如下:
s u , i = f ( v u ∗ , v i ∗ ) = v u ∗ ⊤ v i ∗ . (2) s_{u, i}=f\left(\boldsymbol{v}_{u}^{*}, \boldsymbol{v}_{i}^{*}\right)={\boldsymbol{v}_{u}^{*}}^{\top} \boldsymbol{v}_{i}^{*}. \tag{2} su,i=f(vu∗,vi∗)=vu∗⊤vi∗.(2)
s u , 1 ↓ > s u , 2 ↓ > ⋯ > s u , ∣ I u + ∣ ↓ , u ∈ [ n user ] . (3) s_{u, 1}^{\downarrow}>s_{u, 2}^{\downarrow}>\cdots>s_{u,\left|I_{u+}\right|}^{\downarrow},\quad u \in\left[n_{\text {user }}\right]. \tag{3} su,1↓>su,2↓>⋯>su,∣Iu+∣↓,u∈[nuser ].(3)
I u + I_{u+} Iu+ 即用户 u u u 的正例集合,上式就是保持整理个数,重新排序,同时规定一个confident positive 个数 n + n_+ n+,前面的即为绝对正例,表示为 I u + top \mathcal{I}_{u+}^{\text{top}} Iu+top。即:
I u + top = { i : s u , i ≥ s u , n + ↓ } . (4) \mathcal{I}_{u+}^{\text {top }}=\left\{i: s_{u, i} \geq s_{u, n_{+}}^{\downarrow}\right\}. \tag{4} Iu+top ={i:su,i≥su,n+↓}.(4)
规定confident negative 个数 n − n_- n−, 后面的就是绝对负例,即:
I u + bottom = { i : s u , i ≤ s u , n − ↓ } . (5) \mathcal{I}_{u+}^{\text {bottom }}=\left\{i: s_{u, i} \leq s_{u, n_{-}}^{\downarrow}\right\}. \tag{5} Iu+bottom ={i:su,i≤su,n−↓}.(5)
绝对正例标 1 1 1 ,绝对负例标 0 0 0, 表示如下:
y ^ u , i = { 1 , i ∈ I u + top 0 , i ∈ I u + bottom (6) \hat{y}_{u, i}=\left\{\begin{array}{ll} 1, & i \in \mathcal{I}_{u+}^{\text {top }} \\ 0, & i \in \mathcal{I}_{u+}^{\text {bottom }} \end{array}\right. \tag{6} y^u,i={1,0,i∈Iu+top i∈Iu+bottom (6)
对于待标注的剩余正例样本,采用 2-范式 距离乘以系数 α \alpha α (超参)的方式进行判断,具体如下:
y ^ u , i = g ( v i ∗ ) = { 1 , α ∥ v i ∗ − v ‾ u + top ∥ 2 < ∥ v i ∗ − v ‾ u + bottom ∥ 2 0 , otherwise (7) \hat{y}_{u, i}=g\left(\boldsymbol{v}_{i}^{*}\right)=\left\{\begin{array}{ll} 1, & \alpha\left\|\boldsymbol{v}_{i}^{*}-\overline{\boldsymbol{v}}_{u+}^{\text {top }}\right\|_{2}<\left\|\boldsymbol{v}_{i}^{*}-\overline{\boldsymbol{v}}_{u+}^{\text {bottom }}\right\|_{2} \\ 0, & \text { otherwise } \end{array}\right. \tag{7} y^u,i=g(vi∗)={1,0,α∥∥vi∗−vu+top ∥∥2<∥∥vi∗−vu+bottom ∥∥2 otherwise (7)
其中, v ˉ u + t o p = 1 n + ∑ i ∈ I u + t o p v i ∗ , v ˉ u + b o t t o m = 1 n − ∑ i ∈ I u + bottom v i ∗ \bar{\boldsymbol{v}}_{u+}^{\mathrm{top}}=\frac{1}{n_{+}} \sum_{i \in \mathcal{I}_{u+}^{\mathrm{top}}} \boldsymbol{v}_{i}^{*},\quad \bar{\boldsymbol{v}}_{u+}^{\mathrm{bottom}}=\frac{1}{n_{-}} \sum_{i \in \mathcal{I}_{u+}^{\text {bottom }}} \boldsymbol{v}_{i}^{*} vˉu+top=n+1∑i∈Iu+topvi∗,vˉu+bottom=n−1∑i∈Iu+bottom vi∗, α \alpha α 是用于衡量距离的超参。
上述示例表示为 I u + potential I_{u+}^{\text {potential }} Iu+potential ,具体如下:
I u + potential = { i : y ^ u , i = 1 , i ∈ I u + \ ( I u + top ∪ I u + bottom ) } (8) I_{u+}^{\text {potential }}=\left\{i: \hat{y}_{u, i}=1, i \in \mathcal{I}_{u+} \backslash\left(\mathcal{I}_{u+}^{\text {top }} \cup \mathcal{I}_{u+}^{\text {bottom }}\right)\right\} \tag{8} Iu+potential ={i:y^u,i=1,i∈Iu+\(Iu+top ∪Iu+bottom )}(8)
同理,负例中也有noise。一样的思想,靠前的可能是正例,靠后的铁定是负例。因此,排序如下:
s u , 1 ↓ > s u , 2 ↓ > ⋯ > s u , ∣ I u − ∣ ↓ , u ∈ [ n user ] (9) s_{u, 1}^{\downarrow}>s_{u, 2}^{\downarrow}>\cdots>s_{u,\left|I_{u-}\right|}^{\downarrow}, u \in\left[n_{\text {user }}\right] \tag{9} su,1↓>su,2↓>⋯>su,∣Iu−∣↓,u∈[nuser ](9)
排序的label分配如下:
y ^ u , i = { 1 , s u , i ≥ s u , n + u n o b s e r v e d ↓ ; 0 , otherwise (10) \hat{y}_{u, i}=\left\{\begin{array}{ll} 1, & s_{u, i} \geq s_{u, n_{+}^{unobserved}}^{\downarrow} ; \\ 0, & \text { otherwise } \end{array} \right. \tag{10} y^u,i={1,0,su,i≥su,n+unobserved↓; otherwise (10)
其中, n + u n o b s e r v e d n_{+}^{unobserved} n+unobserved 表示负例中的标记为 1 1 1 的数量。
上述过程循环 t t t 次,将最后一次得到的标签作为最终下游任务的输入数据集,同时将 user 和 item 的embedding作为预训练向量。
具体公式如下:
排序过程如下所示,对正例个数和负例个数进行排序:
s u , 1 ( t ) > ⋯ > s u , k ( t ) > ⋯ > s u , ∣ I u + ∣ ( t ) , u ∈ [ n user ] , k ∈ I u + s u , 1 ( t ) > ⋯ > s u , k ( t ) > ⋯ > s u , ∣ I u − 1 ∣ ( t ) , u ∈ [ n user ] , k ∈ I u − (11) \begin{array}{l} s_{u, 1}^{(t)}>\cdots>s_{u, k}^{(t)}>\cdots>s_{u,\left|I_{u+}\right|}^{(t)}, u \in\left[n_{\text {user }}\right], k \in I_{u+} \\ s_{u, 1}^{(t)}>\cdots>s_{u, k}^{(t)}>\cdots>s_{u,\left|I_{u-1}\right|}^{(t)}, u \in\left[n_{\text {user }}\right], k \in I_{u-} \end{array} \tag{11} su,1(t)>⋯>su,k(t)>⋯>su,∣Iu+∣(t),u∈[nuser ],k∈Iu+su,1(t)>⋯>su,k(t)>⋯>su,∣Iu−1∣(t),u∈[nuser ],k∈Iu−(11)
标记过程如下,具体和单次迭代一样,不再赘述:
y u , i ( t ) = g μ ( u , i ) = { 1 , i ∈ I u + top ( t ) ∪ I u + potential ( t ) ∪ I u − top ( t ) ; 0 , otherwise (12) y_{u, i}^{(t)}=g_{\mu}(u, i)=\left\{\begin{array}{ll} 1, & i \in I_{u+}^{\text {top }(t)} \cup I_{u+}^{\text {potential }(t)} \cup \mathcal{I}_{u-}^{\text {top }(t)} ; \\ 0, & \text { otherwise } \end{array}\right. \tag{12} yu,i(t)=gμ(u,i)={1,0,i∈Iu+top (t)∪Iu+potential (t)∪Iu−top (t); otherwise (12)
最终将第 t t t 次迭代收敛的数据集进行采样完成 ( u , i + , i − ) \left(u, i^+, i^- \right) (u,i+,i−) 的三元组数据集合。
T ( t ) = { ( u , i , j ) ∣ y u , i ( t ) = 1 , y u , j ( t ) = 0 } (13) \mathcal{T}^{(t)}=\left\{(u, i, j) \mid y_{u, i}^{(t)}=1, y_{u, j}^{(t)}=0\right\} \tag{13} T(t)={(u,i,j)∣yu,i(t)=1,yu,j(t)=0}(13)
作者提供了两种方式:
其中, d ϕ ( ⋅ ) d_\phi\left(\cdot\right) dϕ(⋅) 表示推荐模型, h ( ⋅ ) = h n h ( ⋯ h 1 ( ⋅ ) ⋯ ) h(\cdot)=h_{n_{h}}\left(\cdots h_{1}(\cdot) \cdots\right) h(⋅)=hnh(⋯h1(⋅)⋯) 表示 n h n_h nh 层的多层感知机模型, h c ( ⋅ , ⋅ ) h_c(\cdot, \cdot) hc(⋅,⋅) 表示 concatenation ( ∥ \| ∥)。
θ ( t ) = arg min θ − ∑ ( u , i , j ) ∈ T ( t − 1 ) log σ ( s u , i − s u , j ) . (15) \theta^{(t)}=\arg \min _\theta-\sum_{(u, i, j) \in \mathcal{T}(t-1)} \log \sigma\left(s_{u, i}-s_{u, j}\right). \tag{15} θ(t)=argθmin−(u,i,j)∈T(t−1)∑logσ(su,i−su,j).(15)
min ϕ − ∑ ( u , i , j ) ∈ T ( t ∗ − 1 ) L d ( σ ( s u , i d − s u , j d ) ) . (16) \min _{\phi}-\sum_{(u, i, j) \in \mathcal{T}^{\left(t_{*}-1\right)}} \mathcal{L}^{d}\left(\sigma\left(s_{u, i}^{d}-s_{u, j}^{d}\right)\right). \tag{16} ϕmin−(u,i,j)∈T(t∗−1)∑Ld(σ(su,id−su,jd)).(16)
其中, L d ( ⋅ ) \mathcal{L}^{d}\left( \cdot \right) Ld(⋅) 表示单调非递减损失函数。根据具体的下游模型而变化,文中选择了两个: 何向南老师的 NeuMF 模型和 经典 BPR 模型。
文章创新地使用迭代 Relabeling 的方式完成标签自学习过程,提高了隐式反馈数据的信噪比,整个模型易于理解,成果比较突出。
在阅读过程中,有如下一些瑕疵(个人感觉),总结如下:
同时,有一下一些疑问,希望阅读过此文的同学能够不吝赐教: