• 负采样和Google双塔


    https://zhuanlan.zhihu.com/p/166469248

    双塔模型是应用非常普遍的深度学习召回模型,但是其本身也存在一些问题,比如使用softmax函数计算后验概率会带来采样偏差,popular item在负采样时出现的频率也会比较高等。

     

    而Google2019年提出的双塔模型则主要是为了解决softmax带来的采样偏差问题和popular item的修正问题,主要是通过两种方法进行修正:

      • in-batch softmax
      • streaming frequency estimation
     
    https://blog.csdn.net/Kaiyuan_sjtu/article/details/118618366
    一文读懂推荐系统负采样

    (一)启发式负采样算法:

    启发式负采样算法主要指通过设定一些启发式的规则来设置采样分布,这类算法的特点就是开销较小,易于理解和实现,但在效果上会有一定的瓶颈。下面介绍两种经典的启发式负采样算法。

    1、随机负采样(Random Negative Sampling, RNS)

    2、基于流行度的负采样(Popularity-biased Negative Sampling, PNS)

    (二)基于模型的负采样算法:

    1、动态采样(Dynamically Negative Sampling, DNS)

    2、基于GAN的负采样算法

    3、SRNS (Simplify and Robustify Negative Sampling)

    SRNS具体可以看:https://zhuanlan.zhihu.com/p/344630367

    好像主要是说FN样本具有较小的方差

    https://zhuanlan.zhihu.com/p/456088223

    1、从采样方法的角度来划分,有以下几种方法:基于启发式的算法,基于模型的算法;

     

    基于启发式的算法有:

    (1)曝光未点击的样本,当做负样本;

    (2)随机负采样:以用户A来说,从全部样本中,除去与A发生交过的物品外,随机选择物品,作为负样本;

    (3)基于流行度的负采样:流行度越高的物品,被当做负样本的概率就越大。其背后的想法是,越流行的物品,越容易被推荐给用户,但用户还没有与它发生交互,那么用户有更大的概率不喜欢该物品;

    (4)基于业务理解的生成hard样本,例如Airbnb在《Real-time Personalization using Embeddings for Search Ranking at Airbnb》一文中的做法,将与正样本同城的房间当做负样本,将“被房主拒绝”当做负样本;

    (5)利用前一轮的模型来选择hard样本,例如把那些排名靠后的样本作为负样本,拿召回位置在101 ~ 500的物品。

    基于模型的算法有:

    (1)动态采样法:在模型训练过程中,利用上一轮对样本进行评分,通过评分来修改负样本的采样概率,评分越高,被采样的概率越大。背后的思想是,对于那些负样本,如果模型给出了更高的评分,那说明模型认为用户可能会与该物品发生交互,但实际情况却是用户没有与该物品发生交互,那么这个物品有更大的概率成为负样本。但是这有个问题,就是伪负样本的问题 [2];

    (2)基于GAN:可参考,但是通过博客和一些评论,貌似在业界实践中,该方法不怎么work [3];

    (3)SRNS:作者通过观察到的统计学特征作为先验知识,来协助负样本的采样,更好地区分伪负样本和强负样本 [4]。

    可参考:

     

    2、从采样效率的角度来看,有以下几种方法:inbatch采样、uniform采样、MNS采样、CBNS采样;

    (1)inbatch采样:即在模型训练过程中,对于batch中每一个用户,将batch中的其他用户交互的物品,当做是该用户的负样本,这样做可以提高模型训练的速度。但是这种方法有问题,因为会有sample selection bias问题(简称SSB)

    (2)uniform采样:即模型在训练之前,先给每个用户按照一定的方法(随机负采样、基于流行度负采样等)采出一定量的负样本,然后再继续模型训练。

    (3)MNS采样(Mixed Negative Sampling)[5]:即简单粗暴地讲上述的inbatch采样和uniform采样进行融合,具体可参考:

    (4)CBNS采样(Cross-Batch Negative Sampling)[6]:其背后思想也是利用inbatch中的信息和cross batch中的信息,利用前后的batch中的信息来缓解SSB问题。

    具体可参考:

     

    3、从推荐流程的角度来看,分为召回阶段的负采样方法,和排序阶段中的负采样方法。

    推荐流程可以简单划分为召回 ->粗排 ->精排,不同阶段使用的负采样方法不太一样,也就是说学问不一样。在排序阶段中,可以使用“曝光未点击”作为负样本,但在召回阶段,这种做法效果不佳。

    这具体是什么原因呢?在博客中提到,提到了以下4个解释:

    (1)排序算法是优中选优,曝光未点击天生就是负样本,召回算法面对的候选样本太多,鱼龙混杂,更需要具备在更大的数据集中增加自己的“见识”,也就是更需要见见那些曝光没那么高的样本

    (2)曝光未点击的样本已经是经过召回,排序选出来的系统认为的用户喜欢的物品,也就是说这些样本已经是上一个版本召回模型选出来正样本了,如果我们把这些样本当作新召回模型的负样本,就有矛盾了

    (3)如果选择曝光未点击的样本作为负样本,那么召回模型就会陷入“一叶障目,不见泰山”的困境,也就是说模型只会鉴别那些高曝光的样本了,对于那些没出现过,少出现的样本,它根本区分不出来这是正样本还是负样本

    (4)最重要的还是因为实验中,这么做的话效果很差

    那问题来了,召回阶段,我们该怎么做的?最简单的做法是随机负采样,或者是将前一轮召回模型中排名靠后的样本当做是负样本,或者根据业务逻辑来产生hard负样本等等。

    更多细节可参考:

     
    作者:十三
    链接:https://www.zhihu.com/question/334844408/answer/2299283878
    来源:知乎
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    1 召回中的负样本优化

    1. 展示未点击数据。常用的方式,但是会导致Sample Selection Bias,可以通过和其他负样本选择方法来缓解
    2. 全局随机选择负例。从全局候选物料里面随机抽取item做为召回或者粗排的负例。例如 Youtube DNN双塔模型。虽然保证了输入数据的分布一致性,但这么选择的负例和正例差异太大,导致模型太好区分,可能学到的知识不够充分。
    3. batch 内随机负例。输入数据只有正例,在训练的时候,在batch内随机采样一定比例的负样本,一定程度上可以解决Sample Selection Bias问题。
    4. 展示数据内随机负例。在所有的展示物品中,随机选择负例。
    5. 随机负例+热门打压。随机选择,但是越是流行的Item,越大概率会被选择作为负例。例如word2vec中,某物料成为正样本的概率[公式],其中[公式]是第i个物料的曝光或点击占比,理解为降低高展item成为正样本的概率。某物料成为负样本的概率[公式]。其中n(w)是第i个物料的出现次数,而[公式]一般取0.75,理解为增加高展item成为负样本的概率。
    6. hard负例。hard negative能够增加模型在训练时的难度,让模型关注细节。Airbnb根据业务逻辑来选取hard negative:(1)增加与正样本同城的房间作为负样本,增强了正负样本在地域上的相似性,加大了模型的学习难度(2)增加“被房主拒绝”作为负样本,增强了正负样本在“匹配用户兴趣爱好”上的相似性,加大了模型的学习难度。也可以将排序模型打分靠后的作为hard negtive,但是选择100-200还是300-5就只能去尝试了

    2 排序中的负样本优化

    电商场景下,排序中中所周知的正例延迟上报问题,导致部分晚上报的正例在前面训练过程中作为了负例。

    当天未购买可能并不一定是真正意义上的未购买,而可能是加购物车了但是没有当天下单, 而是过了一天下单, 而这样的标签如果我们直接默认其为负样本就会有正样本被当成负样本训练的问题,只是反馈延迟了。

    1. 设置一个时间窗口,如果没有出现正例,就直接当作负例训练。
    2. 如果正样本被当成了负样本训练,后续在训练的时候用两个正样本,一个抵消一个训练。
    3. 将cvr预估拆分为两个模型,转化模型(conversion model,CVR)和 延迟模型(Delayed Feedback Model,DFM)。CVR模型用户预估用户最终是否发生转化,DFM则预估点击后第几天发生转化。
    4. Faked nagative weighted。其实就是importance sampling,观察到的样本的分布是 biased distribution b,但是需要求解真实的样本的分布 p的期望。
    5. Positive-Unlabeled Learning。通过修改损失函数进行优化。

    参考

    1.SENet双塔模型:在推荐领域召回粗排的应用及其它

    2.Delayed FeedBack In Computational Advertising

    3.负样本为王:评Facebook的向量化召回算法

     

  • 相关阅读:
    C#操作Word打印
    判断文件名是否有效
    Windows系统下的程序开机自启
    Winform应用程序使用自定义的鼠标图片
    C# 操作网络适配器
    Runtime Error! R6025-pure virtual function call
    Winform中跨线程访问UI元素的方法
    C#自定义属性转换类---类型转换器
    获取计算机硬件信息
    获取程序集信息
  • 原文地址:https://www.cnblogs.com/charlesblc/p/16220126.html
Copyright © 2020-2023  润新知