文章目录
- 1、曝光未点击
- 2、全局随机选择负例
- 3、batch内随机选择负例
- 4、曝光数据随机选择负例
- 5、基于popularity随机选择负例
- 6、基于hard选择负例
- 大佬的总结:
大佬的名言:“如果精排是特征的艺术,那么召回就是样本的艺术(负样本为王)”。负样本的构造对于召回阶段来说非常非常重要!
1、曝光未点击
这就是上面说的导致Sample Selection Bias问题的原因(因为实际召回时面对的是全局物料池里的样本,包含未曝光与曝光;所以正常来说负样本的构造应使得它尽量能够和实际召回输入的数据分布保持一致)。我们的经验是,这个数据还是需要的,只是要和其它类型的负例选择方法,按照一定比例进行混合,来缓解SSB问题。当然,有些结论貌似是不用这个数据,所以用还是不用,可能跟应用场景有关。
2、全局随机选择负例
从全局物料池里的随机抽取负例,Youtube DNN双塔模型就是这么做的。从道理上讲,这个肯定是完全符合输入数据的分布一致性的,但是,一般这么选择的负例,因为和正例差异太大,导致模型太好区分正例和负例,所以模型能学到多少知识是成问题的。还有个问题就是会引入假阳性, 可能是因为对于某些任务全局随机负采样容易引入fasle-negative样本(这些样本是用户喜欢但是没有被系统曝光,所以被当成了负样本)。
3、batch内随机选择负例
样本里只包含正例,训练的时候,在batch内,选择除了正例之外的其它item,做为负例。它在一定程度上,也可以解决Sample Selection Bias问题。比如Google的双塔召回模型,就是用的这种负例方法。
4、曝光数据随机选择负例
在给所有用户曝光的数据里,随机选择做为负例。大佬们测试过,在某些场景下是有效的。
5、基于popularity随机选择负例
全局随机选择,但是越是流行的item,越大概率会被选择作为负例。目前不少研究证明了,负例采取popularity-based方法,对于效果有明显的正面影响。它隐含的假设是:如果一个例子越流行,那么它没有被用户点过看过,说明更大概率,对当前的用户来说,它是一个真实的负例。同时,这种方法还会打压流行item,增加模型个性化程度【因为流行的item往往占的比例比较大,很多用户都喜欢,但采取popularity-based方法后,相当于“别以为你火,大家都喜欢~”】。
6、基于hard选择负例
选择那些比较难的例子,做为负例。因为难区分的例子,很明显给模型带来的loss和信息含量比价多,所以从道理上讲是很合理的。但是怎样算是难的例子,可能有不同的做法,有些还跟应用有关。比如Airbnb,还有不少工作,都是在想办法筛选Hard负例上。
大佬的总结:
所以说,我觉得一定程度上负样本的构造和具体业务挂钩,用哪种效果好还不好说,得去试试才知道。
参考链接: https://zhuanlan.zhihu.com/p/358779957