-
2021-03-10 22:11:20
训练一个神经网络意味着要输入训练样本并且不断调整神经元的权重,从而不断提高对目标的准确预测。每当神经网络经过一个训练样本的训练,它的权重就会进行一次调整。
当前对于绝大多数的神经网络而言,更新参数使用的都是反向传播(back propagation)的方式。然而,对于庞大的神经网络而言,反向更新权重并不是一件容易的事情。同时,这意味着对于那些结果与标签值的不一致的节点,都需要做反向传播来更新权重。
这个时候我们就需要用到负采样(negative sampling)的技术。
下面通过Skip-Gram来讲解负采样技术。
Skip-Gram 的输出和输出都是 one-hot 编码的向量,假设我们的词典的 size 是 10000,即输入的向量是 10000 维的向量,然后嵌入成 400 维的向量,这样隐层就有 400 个节点,输出层也是一个 10000 维的向量。我们重点关注隐层 - 输出层这里的权重,这里总共有400*10000=4,000,000个权重。也就是说,如果我们不做任何改进的话,每一次的训练都需要更新4,000,000个权重。显然,这样大量的计算会极大地拖慢训练的速度。
为了提升训练的速度,减少更新权重的数量,我们就需要对节点进行负采样。首先来了解两个概念 postive word 和 negative word。positive word 指的是在输出向量中期待为 1 的那个节点,negative word 指的是在输出向量中期待为 0 的节点。在 Skip-Gram 中,输出向量一般只有一个位置为 1,其余的 9999 个位置都为 0。负采样的目的就是在 negative word 中,找出一部分节点进行权重的更新,而不需要全部都更新。比如我们找 5 个 negative word 节点,最后,我们更新的节点就是 1 个 positive word + 5 个 negative word 节点,总共是 6 个节点。在这种情况下,需要更新的权重数量是6*400=2400,相比起前面计算的4,000,000,是不是少了很多!
负采样的本质:每次让一个训练样本只更新部分权重,其他权重全部固定;减少计算量;(一定程度上还可以增加随机性)
更多相关内容 -
pytorch-sgns:PyTorch中的Skipgram负采样
2021-05-04 10:48:13PyTorch SGNS Python中Word2Vec的SkipGramNegativeSampling 。 在实现了另一个但非常普遍的。 它可以与任何嵌入方案一起使用! 我敢打赌。 vocab_size = 20000 word2vec = Word2Vec ( vocab_size = vocab_size ,... -
MCNS:KDD 2020论文“了解图形表示学习中的负采样”的源代码和数据集-Source code learning
2021-03-25 02:31:22了解图表示学习中的负采样。 杨*,明鼎*,周Chang,杨红霞,周静仁,唐杰。 (*这些作者同等贡献这项工作。) 在KDD 2020中(研究方向) 介绍 我们从客观和风险两个角度系统地分析了负采样的作用,并量化了负采样... -
NegSampling-NER:用于解决NER中未标记实体问题的负采样。 ICLR-2021纸
2021-03-25 16:21:22NER的负采样 在许多NER场景中(例如,监督不力的NER),普遍存在未标记的实体问题。 我们的在ICLR-2021提出使用负采样为解决这一重要问题。 这个回购。 包含我们方法的实施。 请注意,这不是官方支持的腾讯产品。 ... -
word2vec-pytorch:带有负采样+子采样的极其简单和快速的word2vec实现
2021-05-26 16:51:40Word2vec Pytorch 与fasttext相比,word2vec的快速实现具有竞争力。 最慢的部分是python数据加载器。 确实,Python并不是最快的编程语言,也许您可以改进代码:) 好处 ...负采样 频繁词的二次采样 -
负采样方式
2021-10-27 17:54:32一、随机负采样 二、曝光未点击 三、混合负采样 四、重要性采样 五、有偏采样 六、NCE采样 参考: [mixed negative sampling] Mixed Negative Sampling for Learning Two-tower Neural Networks in ...目录
五、Metropolis-Hastings ( MH ) 采样
推荐系统存在的数据问题:
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的样本作为负样本;
参考:
- [mixed negative sampling] Mixed Negative Sampling for Learning Two-tower Neural Networks in Recommendations(2020)
- [Youtube] Sampling-Bias-Corrected Neural Modeling for Large Corpus Item Recommendations(2019)
- [NCE采样] A fast and simple algorithm for training neural probabilistic language models(2012)
- [importance sampling] Quick Training of Probabilistic Neural Nets by Importance Sampling(2003)
- 推荐系统的负采样_qq_39125106的博客-CSDN博客_推荐系统负采样
- 采样算法简述 - 知乎
- PR Sampling Ⅰ: 蒙特卡洛采样、重要性采样及python实现 - 知乎
- 推荐系统论文阅读(三十三)-百度:谈谈召回任务中负样本的选取优化 - 简书
-
二分类负采样方法
2022-01-19 23:30:53负采样方法:求正例作为目标词时的损失,同时采样(选出)若干个负例,对这些负例求损失。然后,将正例和采样出来的负例的损失加起来,作为最终的损失。例子如下图所示。 负采样的采样方法: 抽取负例:让语料库中常...多分类问题处理为二分类问题,需要能够正确地对正例和负例进行分类。
如果以所有的负例为对象,词汇量将增加许多,无法处理。作为一种近似方法,将只使用少数负例。
负采样方法:求正例作为目标词时的损失,同时采样(选出)若干个负例,对这些负例求损失。然后,将正例和采样出来的负例的损失加起来,作为最终的损失。例子如下图所示。
负采样的采样方法:
抽取负例:让语料库中常出现的单词易被抽到,不常出现的单词难被抽到。
基于频率的采样方法:计算语料库中各个单词的出现次数,并将其表示为概率分布,然后使用这个概率分布对单词进行采样。
通过给np.random.choice函数参数p,指定表示概率分布的列表,将进行基于概率分布的采样。
import numpy as np words = ['you', 'say', 'goodbye', 'I', 'hello', '.'] a = np.random.choice(words) b = np.random.choice(words, size=5) c = np.random.choice(words, size=5, replace=False) p = [0.5, 0.1, 0.05, 0.2, 0.05, 0.1] d = np.random.choice(words, p=p) print(a) print(b) print(c) print(d)
输出:
hello ['.' 'hello' 'hello' 'goodbye' 'goodbye'] ['hello' '.' 'goodbye' 'you' 'I'] you
word2vec中的负采样:对原来的概率分布取0.75次方。分子表示第i个单词的概率。分母是变换后的概率分布的总和。(使变换后的概率总和仍为1),通过取0.75次方,低频单词的概率将稍微变高。作为一种补救措施,使得变换后低频单词比变换前抽到的几率增加。
以1个连续单词(unigram)为对象创建概率分布,进行负例抽取的函数如下。corpus是是单词ID列表;power是概率分布取的次方值;sample_size是负例的采样个数。
如果是bigram,则以(you,say)、(you,goodbye)这样的2个单词的组合为对象创建概率分布。
class UnigramSampler: def __init__(self, corpus, power, sample_size): self.sample_size = sample_size self.vocab_size = None self.word_p = None counts = collections.Counter() for word_id in corpus: counts[word_id] += 1 vocab_size = len(counts) self.vocab_size = vocab_size self.word_p = np.zeros(vocab_size) for i in range(vocab_size): self.word_p[i] = counts[i] self.word_p = np.power(self.word_p, power) self.word_p /= np.sum(self.word_p) def get_negative_sample(self, target): batch_size = target.shape[0] if not GPU: negative_sample = np.zeros((batch_size, self.sample_size), dtype=np.int32) for i in range(batch_size): p = self.word_p.copy() target_idx = target[i] p[target_idx] = 0 p /= p.sum() negative_sample[i, :] = np.random.choice(self.vocab_size, size=self.sample_size, replace=False, p=p) else: # 在用GPU(cupy)计算时,优先速度 # 有时目标词存在于负例中 negative_sample = np.random.choice(self.vocab_size, size=(batch_size, self.sample_size), replace=True, p=self.word_p) return negative_sample
使用这个类:[1, 3, 0]这3个数据的mini-batch作为正例,对各个数据采样2个负例。
import numpy as np from negative_sampling_layer import UnigramSampler corpus = np.array([0, 1, 2, 3, 4, 1, 2, 3]) power = 0.75 sample_size = 2 sampler = UnigramSampler(corpus, power, sample_size) target = np.array([1, 3, 0]) negative_sample = sampler.get_negative_sample(target) print(negative_sample)
输出:可以看到每个数据的负例。
[[2 4] [2 0] [2 1]]
实现负采样层:
参数:输出侧权重W,单词ID列表corpus,概率分布的次方值power,负例的采样数sample_size, sampler保存UnigramSampler生成的采样负例。
loss_layers 和 embed_dot_layers 中以列表格式保存了必要的层,生成sample_size + 1 个层,意味着生成一个正例用的层和 sample_size 个负例用的层。loss_layers[0] 和 embed_dot_layers[0] 是处理正例的层。
正向传播:通过 Embedding Dot 层的 forward 输出得分,再将得分和标签一起输入 Sigmoid with Loss 层来计算损失和。
反向传播:以与正向传播相反的顺序调用各层的 backward() 函数,将多份梯度累加起来。
class NegativeSamplingLoss: def __init__(self, W, corpus, power=0.75, sample_size=5): self.sample_size = sample_size self.sampler = UnigramSampler(corpus, power, sample_size) self.loss_layers = [SigmoidWithLoss() for _ in range(sample_size + 1)] self.embed_dot_layers = [EmbeddingDot(W) for _ in range(sample_size + 1)] self.params, self.grads = [], [] for layer in self.embed_dot_layers: self.params += layer.params self.grads += layer.grads def forward(self, h, target): batch_size = target.shape[0] negative_sample = self.sampler.get_negative_sample(target) # 正例的正向传播 score = self.embed_dot_layers[0].forward(h, target) correct_label = np.ones(batch_size, dtype=np.int32) loss = self.loss_layers[0].forward(score, correct_label) # 负例的正向传播 negative_label = np.zeros(batch_size, dtype=np.int32) for i in range(self.sample_size): negative_target = negative_sample[:, i] score = self.embed_dot_layers[1 + i].forward(h, negative_target) loss += self.loss_layers[1 + i].forward(score, negative_label) return loss def backward(self, dout=1): dh = 0 for l0, l1 in zip(self.loss_layers, self.embed_dot_layers): dscore = l0.backward(dout) dh += l1.backward(dscore) return dh
-
小白必看:一文读懂推荐系统负采样
2021-07-10 00:52:38© 作者|潘星宇机构|中国人民大学信息学院硕士一年级导师|赵鑫教授研究方向 | 推荐系统引言推荐系统负采样作为推荐模型训练的重要一环,对模型的训练效果有着重要影响,也是推荐...© 作者|潘星宇
机构|中国人民大学信息学院硕士一年级
导师|赵鑫教授
研究方向 | 推荐系统
引言
推荐系统负采样作为推荐模型训练的重要一环,对模型的训练效果有着重要影响,也是推荐系统领域的一个重要研究分支。本文将从研究背景到现有的经典工作对推荐系统负采样进行一个概括性的介绍。为了降低本文的阅读门槛,让更多“科研小白”也可以理解文章内容,笔者将尽可能使用通俗的语言来代替论文公式对算法进行描述,希望可以让读者对推荐系统负采样有一个基本的了解。
1. 研究背景
推荐系统的目的在于根据用户的兴趣爱好向用户进行个性化推荐,以提升用户在网上购物,新闻阅读,影音娱乐等场景下的体验。在推荐场景中,推荐模型主要依赖用户的历史反馈信息来建模用户的兴趣。一般来说,在模型训练过程中,我们需要同时提供正例(用户喜欢的商品)和负例(用户不喜欢的商品)给模型,然后基于损失函数来学习用户和商品的表示,最终完成模型的训练。但在实际推荐场景中,考虑到数据收集的难度,我们很难获取用户的显式反馈信息(例如用户对商品的评分)来确切知道用户喜欢哪些商品,不喜欢哪些商品,绝大部分的数据都是用户的隐式反馈信息(例如用户消费过的商品记录)。
对于隐式反馈来说,数据没有明确的标签,为了进行模型训练,我们一般假设用户交互过的商品都是正例,并通过采样的方式,从用户未交互过的商品集中选择一部分作为负例。从用户未交互商品集中基于一定策略进行负例选择的这一过程,就被称为负采样(Negative Sampling)
推荐系统负采样示意图
2. 推荐系统负采样中的研究方向
在推荐系统负采样中,主要有三方面的研究方向:采样质量,采样偏差和采样效率。
1、采样质量:
一般来说,在负采样过程中,采样的质量主要是指采到的负例所包含的信息量。相比于低信息量的负例,采到信息量更高的负例将显著提升模型训练的效率,加速模型收敛。从近几年推荐系统负采样领域的论文数量来看,提升采样质量是目前该领域的主要研究方向。
2、采样偏差:
在推荐系统负采样中,我们的基本假设是用户交互过的商品都是该用户的正例,未交互过的都是负例。但容易发现,这个假设还是比较强的,与真实场景存在一定偏差,例如用户未购买过的商品并不一定是不喜欢的,也有可能是用户在未来想要发生交互的商品,这一偏差可以被称为伪负例(False Negative)问题。这些采样中的偏差会对模型训练造成影响,因此缓解或消除采样中的偏差是该领域一个重要的研究方向。
3、采样效率:
在推荐场景中,用户的历史交互数据是比较稀疏的,一般来说,用户平均交互的商品数量不会超过整个商品集大小的10%。因此,对于负采样而言,需要在一个较大的采样池中进行采样,一旦采样过于复杂,会导致模型训练的开销增大,这也与实际工业场景下的要求不符。因此,采样算法的设计需要控制好复杂度,提升采样效率也是该领域一个有重要研究意义的方向。
3. 主流推荐系统负采样算法
负采样算法的本质就是基于某些方式来设置或调整负采样时的采样分布。根据负采样算法设置采样分布的方式,我们可以将目前的负采样算法分为两大类:启发式负采样算法和基于模型的负采样算法。
(一)启发式负采样算法:
启发式负采样算法主要指通过设定一些启发式的规则来设置采样分布,这类算法的特点就是开销较小,易于理解和实现,但在效果上会有一定的瓶颈。下面介绍两种经典的启发式负采样算法。
1、随机负采样(Random Negative Sampling, RNS)[1]:
RNS是最基本的负采样算法,它的思想就是平等地对待采样池内的每一个商品,按相等的概率进行采样。RNS的算法逻辑非常简单,在效率上有着很大的优势,同时也避免在采样过程中引入新的偏差,是一个被广泛使用的采样算法。
2、基于流行度的负采样(Popularity-biased Negative Sampling, PNS)[2]
PNS也是一个启发式的负采样算法,它的思想是以商品流行度作为采样权重对采样池内的商品进行带权采样,流行度越高的商品越容易被采到。这里的流行度有很多种定义方式,一种常见的定义方式该商品的历史交互次数,即商品被消费次数越多,其流行度就越高。这种算法相比于RNS,就是将均匀分布替换成一个基于流行度的采样分布,只需要在采样前计算出每个商品的流行度作为采样分布,然后就按照这个分布进行采样即可,在开销上没有增加特别多。
相比于RNS, 按照流行度采样的目的是为了提高所采负例的信息量,提高采样质量。例如一个非常流行的商品,却出现在某个用户的未交互商品集中,那么这个商品就很大概率是用户不喜欢的商品,那么通过这个负例就可以很好的学习到用户的喜好;相反,一个大家都不喜欢的商品,将它作为负例进行学习,其实能够带给模型的信息量就很少了,很难学习到该用户的个性化特征。
但也有文献指出[3],PNS也有一定的局限性。首先,因为PNS的采样分布是提前计算好的,在模型训练过程中,采样分布不会变化。因此那些在训练初期能够提高更高信息量的负例,在经过多次训练后,其带来信息量可能会有所下降。其次,流行度的引入也可能会引入新的偏差,因为流行度的计算是全局的,而在用户中,不同用户类别之间的兴趣可能是有差异的,如果所给数据中的用户类别分布不均匀,就可能导致流行度的定义出现偏差。
(二)基于模型的负采样算法:
相比于前面提到的两种启发式算法,基于模型的负采样算法更容易采到质量高的负例,也是目前较为前沿的采样算法。下面介绍几种基于模型的负采样算法:
1、动态采样(Dynamically Negative Sampling, DNS)[4]
在模型训练过程中,负例能够带给模型的信息量是会随着模型的训练情况不断变化的。DNS的思路就是根据模型当前的情况动态地改变采样分布,提升每一轮的采样质量。对于模型来说,我们最后希望的模型是能够给正例打更高的分,给负例打更低的分。因此,对于每一轮训练,那些会被模型打高分的采样池中的商品更应该被挑出来让模型进行学习,它们对于模型而言包含更多的信息量。基于这样的思路,DNS会在每次采样时使用当前模型作为一个采样模型,对样例进行打分,然后选择分数更高的样例来作为负例对当前模型进行训练,得到新一轮的模型,并这样迭代下去。
2、基于GAN的负采样算法
在模型训练过程中,模型的训练目标是将损失函数的值降低,而采样器的采样目标是将能使得模型损失函数的值增大的负例选出来,这就蕴含着一种对抗的思想。自然的,生成对抗网络(Generative Adversarial Networks,GAN)也就被运用到了负采样中。IRGAN [5] 是信息检索负采样领域的一篇经典工作,它首次将GAN的思想运用到信息检索领域来进行负采样。具体来说,在IRGAN的设计中,它包含了两个推荐模型,一个作为判别器(Discriminator),一个作为生成器(Generator),基于对抗的思想进行训练。生成器的目的在于从负例池中选择负例混入正例中来迷惑判别器,而判别器则是要区分出正例和生成器混入的负例,并将反馈给予生成器。
IRGAN结构示意图
在这个框架中,原则上生成器和判别器可以是任意结构的推荐模型,最终生成器和判别器也都可以作为最后的推荐模型进行使用。而DNS可以理解为一种判别器和生成器是相同模型结构的,共享同一套参数的特殊的IRGAN。受到IRGAN的影响,后续也出现了很多基于GAN的负采样算法 [6][7],他们从效率,性能等不同方面对IRGAN的结构进行了优化和改进。
3、SRNS (Simplify and Robustify Negative Sampling)[8]
虽然前面提到的两种基于模型的采样算法通过模型学习的方法可以提升采样质量,获得强负例(Hard Negative),但也存在着两个关键问题:1)由于借助模型评分来选择负例,会加重采样时的伪负例(False Negative)问题。因为单从评分上来看,伪负例和强负例都会得到较高的分数,按照模型评分得到的分布进行采样会提升伪负例被采到的概率。2)这种基于模型的算法,特别是基于GAN的算法,会有很大的时间开销,影响模型的训练。针对这两个问题,nips 2020上的一篇工作提出了一种命名为“简单且具有较强鲁棒性的负采样算法”。在这个算法中,它以观察到的统计学特征作为先验知识对伪负例和强负例进行区分,以增强模型的鲁棒性,并使用了类似DNS的结构进行采样,以保证采样质量。在时间复杂度的分析上,SRNS也优于GAN类型的方法。本篇工作将视角放在了采样去偏和采样效率优化,同时创新性地引入统计学指标来尝试区分伪负例和强负例,是一篇具有启发意义的工作。
4. 结语
本文主要围绕推荐系统负采样这个主题,从研究背景到目前的经典工作进行了较为细致通俗的概况,希望可以通过这篇文章让读者对该领域有一个简单认识。同时欢迎对文章内容有疑问或想法的同学在评论区积极留言讨论!
在最后,也向大家安利一款非常好用的,特别适合刚刚入门推荐系统方向的“科研小白”的推荐算法工具包“伯乐” (RecBole)。希望大家可以多多支持!
一起交流
想和你一起学习进步!『NewBeeNLP』目前已经建立了多个不同方向交流群(机器学习 / 深度学习 / 自然语言处理 / 搜索推荐 / 图网络 / 面试交流 / 等),名额有限,赶紧添加下方微信加入一起讨论交流吧!(注意一定要备注信息才能通过)
易用又强大的伯乐二期来啦!
参考文献
[1] Steffen Rendle, Christoph Freudenthaler, Zeno Gantner, and Lars Schmidt-Thieme. 2009. BPR: Bayesian Personalized Ranking from Implicit Feedback. In UAI. AUAI Press, 452–461.
[2] Ting Chen, Yizhou Sun, Yue Shi, and Liangjie Hong. 2017. On Sampling Strategies for Neural Network-based Collaborative Filtering. In KDD. ACM, 767–776.
[3] Steffen Rendle and Christoph Freudenthaler. 2014. Improving pairwise learning for item recommendation from implicit feedback. In WSDM. 273–282
[4] Weinan Zhang, Tianqi Chen, Jun Wang, and Yong Yu. 2013. Optimizing topn collaborative filtering via dynamic negative item sampling. In SIGIR. ACM,
785–788.
[5] Jun Wang, Lantao Yu, Weinan Zhang, Yu Gong, Yinghui Xu, Benyou Wang, Peng Zhang, and Dell Zhang. 2017. IRGAN: A Minimax Game for Unifying Generative and Discriminative Information Retrieval Models. In SIGIR. ACM, 515–524.
[6] Dae Hoon Park and Yi Chang. 2019. Adversarial Sampling and Training for Semi-Supervised Information Retrieval. In WWW. ACM, 1443–1453.
[7] Jingtao Ding, Yuhan Quan, Xiangnan He, Yong Li, and Depeng Jin. Reinforced negative sampling for recommendation with exposure data. In IJCAI, pages 2230–2236, 2019.
[8] Jingtao Ding, Yuhan Quan, Quanming Yao, Yong Li, and Depeng Jin. 2020. Simplify and Robustify Negative Sampling for Implicit Collaborative Filtering. In NeurIPS.
- END -
-
基于高频词抽样+负采样的CBOW模型
2022-03-15 21:59:39二、使用高频词抽样+负采样的原因简述 三、具体实现 1、对高频词进行抽样 2、负采样 四、代码实现 一、前言介绍 1、朴素CBOW模型原理与代码实现 word2vector之CBoW模型详解_tt丫的博客-CSDN博客 2、基于分层softmax... -
深入理解深度学习——Word Embedding(六):负采样(Negative Sampling)优化
2022-01-26 21:48:31训练一个神经网络意味着要输入训练样本并不断调整神经元的权重,从而不断提高对目标预测的准确性。神经网络每训练一个样本,该样本的权重就会调整一次。...负采样(Negative Sampling)解决了这个问题,它可以提高 -
word2vec中的负采样
2020-12-15 04:58:14word2vec中的负采样发布时间:2018-08-23 10:11,浏览次数:991, 标签:wordvec1.Hierarchical Softmax的缺点与改进在讲基于Negative Sampling的word2vec模型前,我们先看看HierarchicalSoftmax的的缺点。的确,使用... -
负采样Negative Sampling
2022-02-13 20:56:181.噪声对比估计(Noise contrastive estimation) ...负样本:噪声,由q(w)生成 对应标签D=1。 从正样本中提取一个,从噪声分布中提取k个噪声样本,在总样本(真实样本+噪声样本)中,w代表预测的目标词。 -
word2vec_pytorch:pytorch的简单实现word2vec(略读,负采样)
2021-02-18 02:38:51Word2vec-PyTorch 这是基于PyTorch的word2vec的实现。 运行它 python word2vec.py zhihu.txt word_embedding.txt word2vec_pytorch -
tensorflow --batch内负采样
2022-01-25 16:15:58""" 自定义batch内负采样并做cosine相似度的层 """ """ 负采样原理: query_input.shape = [batch_size, dim] doc_input.shape = [batch_size, dim] 默认 query点击该doc。每个点击的item, 随机采集NEG个item... -
正则化理解+负采样理解以及神经网络中的负采样
2020-10-15 21:55:26(一定程度上还可以增加随机性) 以下来源:神经网络中的负采样 神经网络中的负采样 对于绝大多数的有监督学习,神经网络的训练过程其实就是不断地调整网络权重的过程。最常用的方法就是 back-propagation。... -
batch内负采样
2021-02-17 09:15:48一般在计算softmax交叉熵时,需要用tf.nn.log_uniform_candidate_sampler多itemid做随机负采样。但是在类似dssm这种双塔模型中,item侧特征除了itemid外,还有其他meta特征,此时负样本对itemid做负采样后,还需要取... -
Negative Sampling 负采样详解
2020-04-23 10:01:26在word2vec中,为了简化训练的过程,经常会用到Negative Sampling负采样这个技巧,这个负采样到底是怎么样的呢?之前在我的博文 word2vec算法理解和数学推导 中对于word2vec有了很详细的数学推导,这里主要讲解一下... -
负采样(Negative Sampling)
2021-07-13 15:57:11因此,学习一个改善过的学习问题叫做负采样(negative sampling),它能做到与Skip-Gram模型相似的事情,但是用了一个更加有效的学习算法,让我们来看看。 在本视频中大多数的想法源于这篇论文:Distribut -
NLP篇【02补】TensorFlow 代码实现负采样(coding)
2021-08-20 11:55:32在NLP篇【02】白话Word2vec原理以及层softmax、负采样的实现文章中介绍了层softmax与负采样,有兴趣可以根据介绍,自己实现一下负采样或层softmax。当然,对于只想拿来直接使用的,可以看看这篇文章,直接利用... -
负采样策略
2020-10-19 19:46:46在多篇论文中均提及到了负采样策略,那么就来简单学习下什么是负采样策略。 偶然搜到了两篇大佬的文章: 负采样算法 神经网络中的负采样 顺便一提,找到了一个很nice的网站,看了网站的关于部分: 算法初心... -
KDD'21 | FaceBook :基于图的负采样方法
2021-11-12 01:14:17本文不是直接从原始样本中进行负采样,而是通过生成难负样本(hard negative samples)来进行负采样。 该方法主要由两部分组成,分别为positive mixing和hop mixing 2. 方法 如图所示为MixGCF的总体概览,对... -
关于负采样和下采样概念的简单说明
2022-05-10 16:01:24负采样(Negative Sampling) 以word2vec中的负采样优化策略为例,即把语料中的一个词串的中心词替换为别的词,构造语料集中不存在的词串作为负样本。在这种策略下,优化目标变为了:较大化正样本的概率,同时最小化... -
推荐系统入门必读:一文读懂推荐系统负采样
2021-07-12 00:03:33©作者|潘星宇学校|中国人民大学硕士生研究方向|推荐系统推荐系统负采样作为推荐模型训练的重要一环,对模型的训练效果有着重要影响,也是推荐系统领域的一个重要研究分支。本文将从研究... -
skip-gram负采样原理
2020-07-20 22:34:38skip-gram负采样 自然语言处理领域中,判断两个单词是不是一对上下文词(context)与目标词(target),如果是一对,则是正样本,如果不是一对,则是负样本。 采样得到一个上下文词和一个目标词,生成一个正样本... -
点击率预估-负采样后校准方法
2022-01-23 22:01:31由于负采样的缘故,会导致线上待预测数据分布与离线训练分布有很大差距,线上预估分数往往会高于真实值,所以非常有必要进行校准。 校准过程如下 变量定义。 p′p^{'}p′已经采样后的预估概率(训练) ppp未经采样... -
word2vec梳理--part2--负采样
2021-04-18 11:10:36值得注意的是,对频繁词进行二次采样以及负采样,不仅减少了训练过程中的计算负担,而且提高了生成的词向量的质量。 常用词的子采样: 在之前的文章中,我们已经讲过如何构造词对形成训练集,这里我们再提一遍。... -
深度学习——负采样
2021-03-03 19:55:35引用自:https://zhuanlan.zhihu.com/p/39684349 训练一个神经网络意味着要输入训练样本并且不断调整神经元的权重,从而不断提高对目标的准确预测。... 负采样(negative sampling)解决了这个问题,它是用来提高 -
推荐系统的负采样
2020-12-27 17:04:00负采样1.随机负采样1.1 存在的问题1.2 失效原因1.3 基于其他用户点击的负采样 1.随机负采样 1.1 存在的问题 头部效应非常重。热文被大量分发,个性化能力大幅减弱。站在一个用户的角度看,用户的样本可以通过一些... -
为什么使用负采样技术(附详细求导过程)
2020-12-26 12:05:03word2vec的初心是什么,为什么使用负采样技术。 看了很多博客和B站视频讲解,还是没有讲解清楚。 最后还是知乎大佬说清楚了。详见 1.用负采样带来的问题 参数更新慢 其一 我们每次只对窗口中出现的几个...