回顾以下word2vec,负采样的思想更加直观:为了解决数量太过庞大的输出向量的更新问题(word2vec这里要预测是哪个单词,而单词库上万),我们就不更新全部向量,而只更新他们的一个样本。
显然正确的输出单词(也就是正样本)应该出现在我们的样本中,另外,我们需要采集几个单词作为负样本(因此该技术被称为“负采样”)。采样的过程需要指定总体的概率分布,我们可以任意选择一个分布。我们把这个分布叫做噪声分布,标记为 。可以凭经验选择一个好的分布。
在word2vec中,作者称用简化的训练目标取代用一个定义好的后多项分布的负采样形式
- 是输出单词(即,正样本), 是它的词向量;
- h 是隐藏层的输出:在CBOW中, ,在skip-gram中, ;
- 是从 中采样得到的单词集合,也就是负样本
再回到推荐的场景中,
Q1:负样本应该如何采样更合理?
A1:可以尝试使用一定的规则筛选负样本:
base策略:随机抽取一定比例
策略1:在用户未点击的部分,选择流行度高的作为负样本(更有代表性)
策略2:在用户未点击的部分,删除用户近期已发生观看行为的电影
策略3:在用户未点击的部分,统计相应的曝光数据,取Top作为负样本(多次曝光仍无转化)
Q2:正负比例有个大致的主流数值吗?1?5?10?
A2:建议交叉验证后选择合适的数值
Q3:测试集是否需要和训练集保持相同的正负样本比例?
A4:这个问题是不成立的,首先基于一个策略生成全部的样本,再根据时间轴人为切分成训练集和测试集,并不是先生成训练集,再生成测试集。
推荐系统传统召回是怎么实现热门item的打压? - 石塔西的回答 - 知乎
负样本为王:评Facebook的向量化召回算法 - 石塔西的文章 - 知乎
word2vec详解(CBOW,skip-gram,负采样,分层Softmax) - 孙孙的文章 - 知乎
Word2Vec介绍: 为什么使用负采样(negtive sample)? - 刘博的文章 - 知乎
word2vec中的负采样与分层softmax - TianMin的文章 - 知乎