https://zhuanlan.zhihu.com/p/387378387
负采样有很多种方法。线上用的是随机降采样 10% 的负例。
分类
规则式
随机(baseline)
优点:效率,避免引入新的偏差。广泛使用。
基于流行度
越热门的物品,越容易做负例。
优点:提高采样质量,用户不喜欢热门商品,可以很好的学习到用户的喜好。相反,一个大家都不喜欢的商品,将它用作负例学习,能带给模型的信息量很少。
缺点:流行度可能引入新的偏差,毕竟流行度是全局计算,忽略了个体的差异;
基于模型的负采样
动态采样
提高被高估的负例的采样概率,提高负例的信息量。
GAN
利用对抗网络,用生成器生成负例,来迷惑判别器。
SRNS
强效判别,假负例VS hard negative。
《Simplify and Robustify Negative Sampling for Implicit Collaborative Filtering》
优点:提升采样质量
缺点:假负例也提升了被采样的概率。GAN 的耗时影响模型训练
Simplify and Robustify Negative Sampling for Implicit Collaborative Filtering
考虑到线上流式计算,push 的假负例在负采样中提升了采样频率可能不是件好事!可能负采样针对时间也要降权。
作者观察到最重要的一点是:false negative 和 hard negative 都会有很大的分数,但是 false negative 有更低的预测方差。
我是不是可以理解成,hard negative 之所以 hard,是每次训练不收敛。
但是这个论文,只用在了 CF 上,也就是说,一个sample 会被反复训练,直至模型收敛。
而在我们 push 流式训练中,无法得到 variance。
结论:求 variance 没有借鉴意义。但是确实应该区分 false negative vs hard negative
实验:引入时间 vs negative sample。
缺点:无法去除天然的假负例,比如:用户没点击,是因为推荐系统已经给他推过类似的文章了。