Simplify and Robustify Negative Sampling for Implicit Collaborative Filtering

摘要

在基于隐式反馈的协同过滤中,负采样(negative sampling)是从大量的unlabeled data中获取负样本标签比较经常使用和流行的方法。然而,负采样的效率和有效性这两个问题仍然没有被很好的解决,由于它们使用比较复杂的结构,而且忽视了 false negative样本的风险。本文首先经过实验观察,提供了一个关于负样本比较新颖的理解。做者发现,在模型学习过程当中只有一小部分样本比较重要,而且假负例(FN)在许多训练迭代中倾向于有稳定的预测。基于此发现,做者提出了一个Simplify and Robustify 负采样方法。html

Intro & Contri

协同过滤中的负采样主要有两个须要关注的问题:算法

  1. 效率(efficiency). 由于要从很大的unlabeled data中采样,因此对采样方法的效率有必定的要求。
  2. 有效性(effectiveness). 被采样的样本必须是高质量的,这样才能学的好嘛。

PS: 这里文章做者说将全部unlabeled data当作负样本是不现实的。其实我本人不太赞同这句话,我认为不管是负采样,仍是将全部未知数据当作负样本,都是两种不一样保守派的表现,一种是用户没点不表明不喜欢,但其实有的时候是真的不喜欢。因此这方面也不能太绝对,关键是如何去找到一个相对中和的假设?是否会更好呢?markdown

负采样

协同过滤中,最简单的就是直接采用均匀分布采样,随后又有很多论文提出了不一样的、更复杂的采样方法,好比hard sampling(由于它能够带给模型更多的有用信息)。app

与上述工做不一样的是,本文将负采样问题描述为在有噪声标签的状况下,对未标记数据的有效学习,即存在假阴性FN的状况。 主要包括三个挑战:函数

  • 如何利用一个简单的模型来捕捉true negative 样本的动态分布

在隐式CF问题中,真负实例与假负实例一块儿隐藏在大量未标记数据中。尽管其余领域中的负实例遵循skewed分布,而且能够用简单的模型来建模,可是这种先验知识是否能够应用于只指望真负实例的隐式CF问题仍然是未知的。学习

  • 如何有效的度量采样的负样本的质量?考虑到引入假阴性实例(False Negative)的风险,负样本的质量须要以更可靠的方式来衡量。然而,设计一个判别准则来帮助高质量地准确识别真正的负样本是不简单的。
  • 如何有效地对高质量的真实负样本进行抽样

skewed distribution(偏态分布): 频数分布有正态分布和偏态分布之分,正态分布是指多数频数集中在中央位置,两端的频数分布大体对称。 偏态分布是指频数分布不对称,集中位置偏向一侧。 若集中位置偏向数值小的一侧,称为正偏态分布。集中位置偏向数值大的一侧,称为负偏态分布。若是频数分布的高峰向左偏移,长尾向右侧延伸称为正偏态分布,也称右偏态分布;一样的,若是频数分布的高峰向右偏移,长尾向左延伸则成为负偏态分布,也称左偏态分布。(峰左移,右偏,正偏; 峰右移,左偏,负偏测试

本文,做者发现预测分数高的负样本对模型学习很是重要,可是他们很是少,也就是是一个偏态分布。另一个发现是,在训练的屡次迭代中,假阴性实例(false negative)老是有较大的分数,即较低的方差,这为解决现有方法中存在的FN问题提供了一个新的视角。ui

基于此,做者提出了本文的方法SRNS,下面开始进行介绍.spa

Background

一个CF model,通常包括如下三部分:score function r r ,目标函数 L L ,以及负采样的分布 p n s p_{ns} 。score function r ( p u , q i , β ) r(p_u, q_i, \beta) 计算用户嵌入 p p ,商品嵌入 q q 的相关性, β \beta 为要学习的参数,好比GMF[1]等:设计

进一步有,观察到的交互 ( u , i ) , i R u (u,i), i\in \mathcal{R}_u 的相关性为 r u i r_{ui} ,则相应的未观察到的 ( u , j ) , j R u (u,j), j\notin \mathcal{R}_u 得分为 r u j r_{uj} ,那么 ( u , j ) (u,j) 为负样本的几率为:

对应的loss function:

学习上述目标至关于最大限度地提升成对排序关系的可能性

关于 p n s ( j u ) p_{ns}(j|u) 的选择,文中也列出一个表格:

SRNS: the Proposed Method

为了提升隐式CF中负采样的鲁棒性和效率,下面首先对不一样的负采样实例进行深刻理解,包括假负采样和经过均匀采样或硬负采样得到的负采样实例。最后,基于这些认识,介绍所提出的方法。

Understanding False Negative Instances

在之前的文章中,正样本的分布或者说预测的分数,被普遍的用来做为采样的标准,由于它与样本的难度成正比。因而,做者就在ml-100k上作了个实验,进行观察。

首先,经过将测试集里的ground-truth翻转,能够获得必定的FN样本,它其实是positive的,可是在负采样阶段是观察不到的(也就是说负采样也可能采到测试集中的ground truth item).

其次,除了使用均匀采样,还经过不用的 D D ,获得一些hard samples。主要包括两步:a) 按照均匀分布从unlabel data中采样 D D 个;b) 选出 r u j r_{uj} 最大的样本,视为难样本。 D D 越大,样本越难,且 D = 1 D=1 时,两种采样彻底等价。

ML-100k上的实验观察,均匀分布采样


CCDF: F ( x ) = P ( P p o s x ) F(x)= P(P_{pos} \ge x) ,表示负样本 P p o s x P_{pos} \ge x 的几率。

基于上图,能够获得一些观察:

  1. Fig.a: 负样本分数较大的不多,其总体的分布是一个偏态分布。
  2. FN 样本和HN样本都有很大的分数,(Fig.b),因此很难区分它们(而且hard negative也更可能为False negative,Fig.c)。然而,false negative相对来讲具备更低的预测方差(Fig.d)

第一个发现代表,仅捕获与那些较大的得分负实例相对应的完整分布的一部分是有潜力的,这些负实例更有多是高质量的。对于第二个发现,它提供了一个可靠的方法来衡量样本质量,也就是方差(其实hard 和false negative的区分也没有很明显,由于两者其实原本就很难区分)。具体来讲,咱们更喜欢那些同时具备大分数和高方差的负样本,避免在屡次迭代训练中老是具备大分数的FN实例。

SRNS Method Design

基于上面的分析,其实本文的方法和思路已经基本很清晰啦! 一方面,首先为每一个用户存储一部分有更大的潜力为高质量负样本的难样本,经过惯出这部分样本,极大的简化了模型的结构,提升了采样效率。另外一方面,经过基于方差的采样策略来有效地得到哪些可靠和信息量大的样本。算法过程以下:

SRNS算法

Score-based memory update

M u = { ( u , k 1 ) , , ( u , k S 1 } M_u=\{(u,k_1),\dots,(u,k_{S_1}\} 为用户 u u 的采样池。为了保证最有信息量的样本被囊括,这里设计了一个动态的更新策略: 首先从不在该集合的样本中均匀采样 S 2 S_2 个,随后将其添加到 M u M_{u} 中,并基于以下策略进行更新:

其中 τ ( 0 , + ) \tau\in(0, +\infty) 。就是保留分数最大的 S 1 S_1

Variance-based sampling

过采样hard negative实例可能会增长引入FN的风险,从而使基于上述分数的更新策略不那么健壮。因而,对于给定的正样本(u,i)以及 M u M_u ,对于 ( u , k ) M u (u,k) \in M_u ,保留其第 t t 个训练epoch的得分 [ P p o s ( k u , i ) ] t [P_{pos}(k|u,i)]_t ,经过以下方式从 M u M_u 中选择负样本(u,j):

α t \alpha_t 来控制在 t t epoch高方差的重要性,当其=0时,此采样方法就变成了根据样本的难易进行选择。因为全部实例在早期训练阶段都有很高的方差,所以方差项不该加权太多,因而采用warm-start,细节在这里不介绍了,见论文

文章中只用最近5epoch来计算方差:

Experiments

Nips的风格就是理论很少就疯狂作实验。。。。论文里实验挺多的,感兴趣的能够看看。

reference

[1] Xiangnan He, Lizi Liao, Hanwang Zhang, Liqiang Nie, Xia Hu, and Tat-Seng Chua. Neural collaborative filtering. In WWW, pages 173–182, 2017.

相关文章
相关标签/搜索