推荐系统炼丹笔记7:负样本的艺术

2021-12-22 08:35:40 浏览数 (1)

目前,在清洗数据构造正负样本时,由于日志的延迟上报问题,在点击事件的问题中构造样本时,往往会出现将曝光未点击数据误以为是负样本的情况,可真实的负样本真的是这样吗?

本文作为 推荐系统炼丹笔记系列的第7期,我们在样本构造方面,来聊一聊负样本的艺术。 “数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限”。有过机器学习经验的人都会知道特征对于解决机器学习问题的重要性了,在y=ax b的公式里,特征解决了x的问题,而y的问题即是样本的问题,如果定义label,也同样重要。

负样本构造方法

在召回问题中,用“曝光未点击”作为模型的负样本的一系列问题,其根源在于没有很好地理解问题,只是从经验的角度给出了解法,而这种解法不能算错,至少在线上反馈的层面上是有意义的,也具备一定的表征能力。

究其原因,曝光未点击的样本,一方面,它是经过了之前模型层层筛选得到的,至少在之前的模型中,模型判断的是用户对该部分item是具有兴趣的;另一方面,经过了线上的时间曝光之后,用户并没有点击,而这个不点击只是在Feed流中的相对的未点击

因为位置偏差告诉我们,用户倾向于与位于推荐列表中较高位置的item进行交互,而不管这些item的实际相关性如何,因此交互的item可能不是高度相关的。

01曝光未点击负样本

在召回阶段,我们可以常会沿用排序阶段的思路,使用曝光且点击的为正样本,曝光未点击的为负样本。

这种方法我们在线下使用FM依旧可以有AUC 0.8 的水平,但线上提升却只有微微一点。那么为何线上线下造成了这样的不一致呢?

其一,我们来思考一下,曝光未点击,是怎么来的呢?

曝光未点击的数据,其实也是我们的模型在进行各种排序筛选之后,认为大概率命中了用户的兴趣才曝光给用户的,也就是说,使用的负样本是经过排序处理后的用户最喜欢的TopK个Items,相比之下,这些item对于召回来说,这些负样本很大概率上是召回的正样本了,则此时使用的样本集训练出的模型只学习到了用户可能喜欢的中,区分最喜欢可能喜欢的信息,而对于用户不喜欢的item却没有学到。

其二,在实践中,尤其是很多大型的平台,用户和商品都是亿级别的,对这种级别的数据进行排序不仅会耗费大量的计算资源,而且还要等很久的时间,所以大家都会选择采样观察指标。很多时候大家会选择采样个无关的商品然后加上相关的商品再去计算指标,其实只需要保证采样之后计算得到的指标和我们的全量数据计算得到的指标是保证相对大小的,换言之,这里违反了一条机器学习里的基本准则,线下线上数据样本分布的一致性

02随机负样本

在Facebook的论文中,实验了两种负样本的构造方法,论文提到用未点击的曝光作为负样本训练出来的模型非常糟糕,在互联网工作了这么多年,我们在实践中也发现了这个问题。原因是这部分负样本太hard了,这么hard当然要放到精排去学,召回任务最重要的是快速把和query相关的documents拉出来。如果召回阶段就能把曝光未点击的过滤掉,那还要精排干嘛呢?

第二种负样本方法就是随机选择负样本,使用为用户召回的item中未曝光的部分的随机采样,对热门和非热门以热度来进行概率加权,从而实现热度采样,看到这里你也许会感觉似曾相识,没错这里跟Word2Vec中的负样本采样方法是同理的。

实验结果表明,随机采样的负样本比“曝光未点击”的负样本的线上效果要好很多。其实不难理解,线上实际召回时,大部分的item是模型没有见过的,随机的负样本抽样很贴合这种线上实际情况。

从Bias的角度,user和item之间未被发现到的交互可以归因于两大原因:1)商品与用户兴趣不匹配;2)用户不知道该商品。因此,无法区分真正的负反馈(如曝光但不感兴趣)和潜在的正反馈(如未曝光)将导致严重的Bias。

在大多数情况下,一小部分受欢迎的item占了大多数用户交互的比例。当对这些长尾数据进行训练时,该模型通常会给热门项目的评分高于其理想值,而只是简单地将不受欢迎的item预测为负值。因此,推荐热门item的频率甚至比数据集中显示的原始受欢迎程度还要高。

03Hard增强负样本

Hard样本这个说法来自图像的分类任务,在搜索推荐系统的召回中没有类别的概念,无法直接应用图像的Hard样本挖掘方法。Facebook在论文中尝试了两种Hard样本挖掘的方法:Hard负样本挖掘和Hard正样本挖掘。

Facebook在论文中发现很多时候同语义召回的结果,大部分都是相似的,而且没有区分度,最相似的结果往往还排不到Top的位置,这就说明之前的训练样本构造方式有问题,导致模型学习的不够充分。所以就想到了对应了解决方案,把和Positive Sample很近的样本作为负样本用于训练,通过这种方式模型就能学到这种Hard样本的区分信息了。

Hard负样本挖掘

论文提到,他们发现top-K召回结果大部分是同文本的,也就是说模型并没有充分利用社交特征。这主要因为随机负样本对于模型而言,因为和query文本完全不同,模型太容易学偏,认为文本一样就是需要召回的。

为了能使模型对相似的结果能有所区分,所以我们可以找到那些embeding很近,但实际上是负样本,让模型去学。

一种方法是在线hard负样本挖掘,这个思路就是in-batch负采样,在一个batch内,有n个相关的query和document,对于任意一个query,其他的document都是它的负样本,但是由于每个batch也是随机产生的,in-batch内负采样并不能获得足够的hard负样本。所以就有了离线hard负样本采样。

论文提到,在实验中发现,简单用hard负样本,效果是比用随机负样本要差的,主要原因是hard负样本需要非文本的特征区分,而easy负样本主要用文本特征区分,因此需要调整采样策略。论文还提到一点,hard负样本取排序模型排在101-500效果最好(所以其实要用semi-hard的样本),而且hard负样本需要和easy负样本混合在一起用。

Hard正样本挖掘

正样本选择相关度最高的,即用户点击过的样本和相似度高的潜在正样本作为Hard正样本。

这里做法和百度的Mobius中的做法很是相似了。

整个框架分为两个阶段,数据增强阶段是绿色箭头的部分,采样并利用样本中的用户请求与广告构造出更多样本,教师网络计算相似度后将低相似度的样本输入学生网络去预测CTR,通过采样的方式得到高CTR低相似度的样本存入buffer,这类样本我们称之为Badcase。

工业界里的负样本艺术

01Facebook召回中的负样本

在Facebook的《Embedding based Retrieval in Facebook Search》论文中,在训练练数据挖掘方面,Facebook基于召回指标验证召回流程中不同正负样本的选择策略。

针对以用户点击为正样本时的负样本选择:

  • 从文档池随机选取作为负样本,即easy case;
  • 同一次会话中的曝光未点击文档作为负样本,即hard case。

结果表明,曝光未点击作为负样本的召回率远低于随机负样本,约55%的召回率退化。作者认为原因在于全部以hard case做负样本的训练数据和实际召回任务面对的数据分布不一致,实际索引中大多数是和用户query差别很大的easy case。

针对正样本的选择策略:

  • 用户点击为正样本
  • 曝光即为正样本

实验表明,用户点击和曝光分别作为正样本的召回指标相差不多,添加曝光数据并不能增加额外价值,增大训练数据规模也不能。

02时间延迟建模中的负样本

IJCAI20关于CVR预估标签延迟的论文《An Attention-based Model for CVR with Delayed Feedback via Post-Click Calibration》,讨论了搜索推荐系统中延迟反馈的的负样本问题

在推荐搜索的建模中,我们经常会使用D 1天的数据作为label,从1~D天的数据中的进行特征抽取等工作,和我们时间序列问题建模类似,但和很多其他的时间序列问题建模不一样的地方在于,我们的label不一定可靠,比如在传统的时间序列回归中,D 1天的销量是多少就是多少,我们没有太多的犹豫,因为不大会有其他的情况。但是在电商的问题中,就存在下面这种情况:

D 1天未购买可能并不一定是真正意义上的未购买,而可能是加入购物车或者意愿清单了, 只是没有在当天下单, 而是过了一天在D 2天的时候下了单, 而这样的标签如果我们直接默认其为负样本就会有较大的问题,因为它并不是真正意义上的负样本,只是反馈延迟了。

这在搜索推荐系统中,我们称之为延迟反馈的问题

时间延迟建模

本文的模型框架主要分为左右两个模块,左侧的转化模型以及右侧的时间延迟模型。

1.左侧转化模型

转化模型的目的是为了预估,注意此处的

  • :表示最终是否会被转化;
  • :表示Item的特征;
  • :用户的历史点击信息;

可以用文中设计的网络结构来构建自己的转化模型.

2.时间延迟模型

和《Modeling Delayed Feedback in Display Advertising》论文中类似,我们还需要得到的表示,那么本文是如何得到的呢?和Survival Analysis中类似,我们用:

  • :表示事件在时间时刻发生;
  • :表示事件会在时刻之后发生的概率;
  • :hazard function,表示存活时间后瞬时死亡的概率,其中, 此外我们还可以得到:

我们将转换的延迟时间全部转化为天的粒度, 在Survival Analysis中我们知道, 只要得到其中任意一个的表示,就可以得到其他的表示,也就是说我们对或者进行假设之后,就可以推导得到,以及三者的表示.

03广告推荐中的负样本

这个问题较早在2014文章《Modelling Delayed Feedback in Display Advertising》中被提出,当时神经网络等还没那么流行,但是解决的思路非常值得借鉴。在广告推荐中,有一个指标价值是非常大的:

eCPM=CPA∗P(conversion,click)=CPA∗P(click)∗P(conversion|click),

CPA: Cost per conversion, 广告商愿意为每个转化支付的金额, 如果eCPM高的话,意味着我们可能获得更多的钱。

从上面这点可以看出,我们希望能很好地预估某个广告的转化概率(最终转化即可,对应到下文P(C=1|X=x).

问题建模

我们先定义五个变量,

  • :特征集合
  • , 表示转化是否已经发生;
  • , 表示转化最终是否会发生;
  • : 表示点击和转化之间的延迟时间;
  • : 表示从点击到当前的时间。
问题转化:

定义完变量,下面就是把该问题转化为我们能理解的形式,回想一下,如果不考虑延迟转化,我们平时一般怎么建模,我们可能直接将该问题转化为一个简单的二分类问题,我们的问题就是求,有时就是直接默认为,那么此时我们得到,我们最终的损失函数就是。

那么现在呢?我们已经知道了延迟的问题,所以我们需要尽可能将时间信息加入,并重新构建以及。本文选择用一个模型用来预估是否转化,另一个模型来捕获点击到转化的期望延迟时间的解决方案。

04曝光偏差问题中的负样

曝光Bias:暴露偏差的发生是因为用户只接触到特定项目的一部分,因此未观察到的交互并不总是代表消极偏好。

特殊地,用户和商品之间未被观察到的交互可以归因于两大原因:1)商品与用户兴趣不匹配;2)用户不知道该商品。因此,在解释未观察到的相互作用时会产生歧义。无法区分真正的消极互动(如暴露但不感兴趣)和潜在的积极互动(如未暴露)将导致严重的Bias。以前的研究已经调查了数据暴露的几个方面:

1)暴露受先前推荐系统的策略的影响,这些策略控制要显示哪些商品。

最近的一些工作也将这种“曝光偏差”(exposure bias)称为“前一模式偏差”(previous mode bias)。

2) 因为用户可以主动搜索和查找自己感兴趣的商品,这样会导致相关的商品更大概率的被曝光。在这种情况下,exposure bias也被称作为是selection bias;

3)用户的背景是商品曝光的另一个因素,例如社交朋友、他们所属的社区和地理位置等;

4)流行的商品有更大的概率被曝光(popularity bias)。我们认为流行度bias也是Exposure Bias的一种。

曝光偏差会误导模型的训练和评估。

曝光偏差下的负样本修正

1. 评估的Debiasing

目前处理该问题的策略主要还是使用inverse propersity score。为了解决这个问题,类似于外显反馈数据中的选择偏差处理,Yang等人建议用隐式反馈数据倾向的倒数来加权每个观测值。intuition是把经常观察到的交互降权,而对少的样本进行升权;

2. 模型训练的Debiasing

为了解决曝光偏差的问题,传统的策略就是将所有被观测的交互作为负例并且明确它们的交互。confidence weight可以被分为三类:

1.Heuristic:典型的例子是加权的矩阵分解以及动态MF,未观测到的交互被赋予较低的权重。还有很多工作则基于用户的活跃度指定置信度等;但是赋予准确的置信权重是非常有挑战的,所以这块依然处理的不是非常好。

2.Sampling: 另一种解决曝光bias的方式就是采样,经常采用的采样策略有均匀的负采样,对于流行的负样本过采样,但是这些策略却较难捕捉到真实的负样本。

3.Exposure-based model:另外一个策略是开发基于曝光的模型,这样可以知道一个商品被曝光到某个用户的可能性等。

4.Others:例如考虑用户的序列行为等,对应的设计inverse propensity的模型等。

参考资料

  • https://arxiv.org/pdf/2006.11632.pdf
  • 推荐系统Bias大全
  • 是不是你的模型又线下线上不一致啦?
  • https://zhuanlan.zhihu.com/p/339116577
  • 就是这么"硬"!召回系统就该这么做!
  • 负样本修正:既然数据是模型的上限,就不要破坏这个上限
  • https://arxiv.org/pdf/2006.11632.pdf
  • https://zhuanlan.zhihu.com/p/222860582
  • https://www.zhihu.com/people/yuconan

0 人点赞