负采样方式

负采样方式一、随机负采样二、曝光未点击三、混合负采样四、重要性采样五、有偏采样六、NCE采样参考:[mixednegativesampling]MixedNegativeSamplingforLearningTwo-towerNeuralNetworksinRecommendations(2020) [Youtube]Sampling-Bias-CorrectedNeuralModelingforLargeCorpusItemRecomme

大家好,又见面了,我是你们的朋友全栈君。

目录

一、随机负采样

二、Real-Negative Subsampling

三、加权随机负采样

四、拒绝接受采样

五、Metropolis-Hastings ( MH ) 采样

六、吉布斯采样

七、蒙特卡洛采样

八、重要性采样(Importance Sampling)

九、有偏重要性采样

十、NCE采样

十一、混合负采样

十二、DFN模型:三类样本


推荐系统存在的数据问题:

1、训练数据跟线上数据分布不一致;

2、曝光未点击的item应该是偏正样本,而不是正样本or负样本;

3、数据稀疏问题,正负样本数量差距大;

4、长尾分布问题;

一、随机负采样

1、实现:在物料池中,随机选择负样本;

2、问题:头部效应很重,热门item有大量的正样本,而冷物品有大量负样本,难以均衡化;

3、改进方式:热门物品作正样本时,降采样;作负样本时,过采样;

二、Real-Negative Subsampling

1、实现:训练集中具有较高曝光频率的item的负样本三元组,以这个概率丢弃:

负采样方式

三、加权随机负采样

1、实现:根据广的曝光频次对item进行分组,将大于阈值的记为A_high, 小于阈值的为A_low, f(a)为item a的曝光频次,生成一个(0,1)之间的随机数p,若p小于P_l,则从A_low中使用均匀采样的方法得到一个item,否则从A_high中基于unigram distribution分布采样得到一个item。P_I的定义为:

负采样方式

四、拒绝接受采样

1、定义:均匀分布会使得一些低概率样本出现过多,所以可以通过拒绝部分样本的方式来获取所需分布。假设需要的分布为p(x),其他分布样本为q(x),二者关系为p(x) = c q(θ) α(x),为使得q(x) >= p(x),采样过程为:

负采样方式

五、Metropolis-Hastings ( MH ) 采样

1、定义:通过拒绝接受样本在计算过程中有大量计算是无用的。因此选取合适的分布 q 是十分必要的。但这通常都很难获得,所以产生了MH采样,通过构造符合细致平稳条件的转移矩阵Q来实现:

负采样方式

六、吉布斯采样

1、定义:Gibbs采样时特殊的MH采样。Gibbs抽样是马尔科夫链(MCMC)的一个特例,它交替的固定某一维度,然后通过其他维度的值来抽样该维度的值。特别地,gibbs采样只对z是高维(2维以上)情况有效。

详见吉布斯采样(Gibbs采样) – emanlee – 博客园

七、蒙特卡洛采样

1、思路:把和或者积分视作某分布下的期望,然后通过估计对应的平均值来近似这个期望:

负采样方式

 本质就是就是加权求和,其权重为随机变量 x 的概率分布(求和时)或者概率密度函数(求积分时)。概率越高的地方,该变量被采样的几率越大,对应函数值的权重越大,故通过采样数据的经验平均可以近似整体的和或积分。

八、重要性采样(Importance Sampling)

1、思路:在蒙特卡洛采样的公式 E[f(x)] = ∑p(x) f(x) 的基础上,构造分解:

负采样方式

 这样就可以把q(x)视为采样概率,估计 pf/q 在此分布下的期望。相当于在新的采样函数下,函数值 f(x) 被乘上了一个采样权重 p/q。

详见重要性采样(Importance Sampling) – 知乎

九、有偏重要性采样

1、思路:对于重要性采样,q分布的好坏可以显著影响蒙特卡洛估计的效率,所以目标是找到最优采样函数q。最优采样函数并不一定是适合采样的那个,只是方差最小的一个而已,其他能降低方差的 q 其实都可以。这种方法有一个优势,即不需要归一化的 p 或 q 分布。在处理离散变量时,有偏重要采样估计可以表示为:

负采样方式

十、NCE采样

详见噪声对比估计 Noise Contrastive Estimation

十一、混合负采样

详见【reco|负采样】Mixed Negative Sampling for Learning Two-tower Neural Networks in Recommendations – 七克-7ke

十二、DFN模型:三类样本

1、定义:

  • 正样本(用户点击)
  • easy 负样本(随机筛选,模型很容易区分出)
  • hard负样本(能够增加模型训练难度,可提升模型关注细节的能力)

2、方式:

用其他样本的点击作为负样本;

取上一版本的召回排在101~500的样本作为负样本;

参考:

  1. [mixed negative sampling] Mixed Negative Sampling for Learning Two-tower Neural Networks in Recommendations(2020)
  2. [Youtube] Sampling-Bias-Corrected Neural Modeling for Large Corpus Item Recommendations(2019)
  3. [NCE采样] A fast and simple algorithm for training neural probabilistic language models(2012)
  4. [importance sampling] Quick Training of Probabilistic Neural Nets by Importance Sampling(2003)
  5. 推荐系统的负采样_qq_39125106的博客-CSDN博客_推荐系统负采样
  6. 采样算法简述 – 知乎
  7. PR Sampling Ⅰ: 蒙特卡洛采样、重要性采样及python实现 – 知乎
  8. 推荐系统论文阅读(三十三)-百度:谈谈召回任务中负样本的选取优化 – 简书
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/148068.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • oracle ora-12154问题总结

    oracle ora-12154问题总结在使用oracle时,经常会遇到ora-12154问题,但一直没总结,解决办法过段时间就忘,再遇到问题只能再去找解决办法。今天,把目前了解到的内容汇总记录,方便以后查找。

    2022年7月24日
    27
  • Mybatis中Like 的使用方式以及一些注意点

    做一个积极的人编码、改bug、提升自己我有一个乐园,面向编程,春暖花开!模糊查询在项目中还是经常使用的,本文就简单整理Mybatis中使用Like进行模糊查询的几种写法以及一些常见的问题。使用Springboot简单配置一下Mybatis,然后进行说明。Springboot集成Mybatis这里就不做介绍了。初始数据方式一在Mybatis中的第一种写法: <!–有sq…

    2022年2月28日
    47
  • android sdk安装过程,图文详解Android 3.0 SDK安装教程

    android sdk安装过程,图文详解Android 3.0 SDK安装教程【51CTO编者按】我们已经为喜欢Android3.0的朋友提供Android3.0SDK下载,本文我们将向大家介绍Android3.0SDK安装教程,本教程与玩模拟器需要比较好的电脑配置,建议至少要i系列CPU,即使如此还是会经常卡,只建议给那些想尝鲜的和只想玩系统的朋友。一、准备阶段:1.安装JavaJDK2.进入“控制面板”-“系统”-“高级系统设置”在弹出的窗口中,选择“环境…

    2022年7月21日
    13
  • 三种线程安全的单例模式(哪些集合是线程安全的)

    三种线程安全的单例模式(哪些集合是线程安全的)在单线程开发环境中,我们经常使用ArrayList作容器来存储我们的数据,但它不是线程安全的,在多线程环境中使用它可能会出现意想不到的结果。多线程中的ArrayList:我们可以从一段代码了解并发环境下使用ArrayList的情况:publicclassConcurrentArrayList{publicstaticvoidmain(String[]args)throwsInterruptedException{List<Integer>l

    2022年4月18日
    39
  • Python3列表_python tuple

    Python3列表_python tuple列表列表特点:是一种序列结构,与元组不同,列表具有可变性,可以追加、插入、删除、替换列表中的元素新增元素appendappend添加一个对象,可以是任意类型a=['zhangsa

    2022年7月31日
    6
  • Tensor和NumPy相互转换「建议收藏」

    Tensor和NumPy相互转换我们很容易用numpy()和from_numpy()将Tensor和NumPy中的数组相互转换。但是需要注意的一点是:这两个函数所产生的Tensor和NumPy中的数组共享相同的内存(所以他们之间的转换很快),改变其中一个时另一个也会改变!1.Tensor转NumPya=torch.ones(6)b=a.numpy()print(a,b)a+=1print(a,b)b+=1print(a,b)tensor([1.,1.

    2022年4月5日
    369

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号