召回负样本选取梳理

参考:
https://zhuanlan.zhihu.com/p/165064102
Embedding-based Retrieval in Facebook Search 相关

https://zhuanlan.zhihu.com/p/144765227
MOBIUS- Towards the Next Generation of Query-Ad Matching in Baidu’s 相关

https://www.cnblogs.com/pinard/p/7243513.html word2vector 相关

背景:
参考以上几位作者对负采样的解说,整理了一些关注的点方便工作中使用。具体了解参考原文。

一、随机负采样
1。热门物料做正样本时, 需要降采样,减少对正样本集的绑架。
2。热门物料做负样本时, 需要适当过采样, 抵销热门物料对正样本集的绑架;同时,也要保证冷门物料在负样本集中有出现的机会。
word2vec中所采用的采样公

二、将<user,doc>的匹配度分成三个档次
匹配度最高的,是以用户点击为代表的,那是正样本。
匹配度最低的,那是随机抽取的。能被一眼看穿,没难度,所谓的easy negative,达不到锻炼模型的目的。
所以要选取一部分匹配度适中的,能够增加模型在训练时的难度,让模型能够关注细节,这就是所谓的hard negative。

三、匹配度始终,能增加模型难度hard negative 方法:
1。 用上一版本召回模型筛选出"没那么相似"的<user, doc>对,作为额外的负样本, 训练下一版本召回模型。
2。 如何定义"没有那么相似"?
召回位置101~500, 排名太考前正样本,不能用, 太靠后, 与随机无异议,也不能用,只能取中段。
3。 上一版本作用那些候选集熵:
online: 一个batch中所有user与doc的cross join。
offline:上一版本召回模型过一遍历史数据,候选集合太大,用faiss。
4。 hard negative 与easy negative 比例: easy:hard =100:1 保证
easy negative的数量优势,模型稳定性能好些。

四、不同难度(negative)模型相互融合。

easy model : 随机负采样
hard model :上面挖掘出来的hard negative 训练模型。 融合后想过更好
1。 并行融合
各topk 加权融合,计算cosing(必须都是embedding)

2。 串行融合:
先easy model , 后hard model。 相当于先召回,后粗排, 二次召回。

五。 全链路优化:
1。新召回在ranker后表现不好,因为ranker是基于旧召回生成的。
但是本文针对这一问题的解决方案有限:
将各路召回的打分作为特征,加入到训练ranker的过程中。但是,这改变不了新召回是少数派的现实,新召回的打分作为特征在训练样本中的占比有限,发挥的作为也可能有限
将召回结果交人工审核,发现bad case,增强下一版本的训练样本。这就是一种人工寻找hard negative的方式,不太现实。

====================
word2vecort 层次采样:Hierarchical Softmax"。 生成过程是一步一步完成的。

利用哈夫曼树进行层次采样,哈夫曼数基于词出现的频度建立的二叉树, 左边编码1,负例,右边编码0 正例。节点值是embedding向量 叶子节点是是词汇表。
沿着跟节点走,就会生成一条路径,即为采样序列。

word2vector NGE负采样概述:
1。 存在训练样本w, 周围上下问共有2c个词, 记为context(w),中心词w和context(w)相关,即为正例子。
负采样: n个和w不同的中心词,w~i, 则context(w)与w~i就组成负样本。

2。 负采样方法:
1) 将长度为1的线段分成V份(V的大小为词频的大小), 每一份的大小,根据词出现频度决定。
len(w)= count(w)/sum(count(w))~all words
word2vector 取 3/4幂。

2) 采样前,将长度为1的线段划分M份, M>>V。 每个词对应的险段都会划分成对应的小块。。而M份中的每一份都会落在某一个词对应的线段上。在采样的时候,我们只需要从𝑀

M个位置中采样出𝑛𝑒𝑔个位置就行,此时采样到的每一个位置对应到的线段所属的词就是我们的负例词。在word2vec中,𝑀
M
取值默认为10^8

===========================================
Embedding-based Retrieval in Facebook Search 原文解读
https://zhuanlan.zhihu.com/p/165064102

  1. 论文涉及的内容:
    召回从样本筛选, 特征工程 ,模型设计, 离线评估, 在线serving 全流程。

  2. 模型:
    双塔模型,避免底层特征交叉,方便拆分模型使doc embeddding进入faiss。

  3. loss选择
    1) 文中使用pairwise hinge loss形式:正样本的距离要大于 负样本的距离在一定范围内(m)
    在这里插入图片描述
    2)召回loss采用的是pairwise LTR 思想。 排序采用的binary cross entropy loss。
    3)YouTube/dssm 使用的是(smpled)softmax。经过negative sampling后,针对同一个用户,一个d+,需要配置若干个d-, 与pairwise类似。
    4)使用BRP 会比pairwise hinge loss效果更好。
    在这里插入图片描述
    5)margin影响较大。
    文中也说了margin对于模型效果影响巨大,BPR loss少了一个需要调整的超参
    Hinge loss中, < u , d + > − < u , d − > <u,d_+>-<u,d_-> <u,d+><u,d>大于margin后,对于loss的贡献减少为0。而BPR则没有针对 < u , d + > − < u , d − > <u,d_+>-<u,d_-> <u,d+><u,d>设定上限,鼓励优势越大越好。

  4. 离线评估:
    ab测试周期长,外界影响大, 离线评估,减少实验成本。
    文中所使用的方法是,拿Top K召回结果与用户实际点击做交集,然后计算precision/recall
    Airbnb所使用的方法是看“用户实际点击”在“召回结果”中的平均位置

  5. 筛选(负)样本
    如果说排序是特征的艺术,那么召回就是样本的艺术,特别是负样本的艺术。
    1)不能(只)拿曝光未点击 做负样本。
    2)easy negtive/hard negative 样本分级。
    3)增强hard negtive思路。
    other
    1) 召回结果交给人工审核, 增强hard negative一个方法。
    2)多模型融合, 不同模型安装negative smples难度来分等级。

    为什么不能(只)拿“曝光未点击”做负样本
    虽然 曝光未点击有很多好处,如下:
    a.用户真实反馈, 随机抽取的,可能雅阁没有曝光,不能断定用户一定不喜欢。
    b. 曝光未点击,数量有限, 处理起来更快。
    c. 曝光未点击可复用排序的data oipeline。 无需重新开发和生成
    d.排序模型,召回可复用。
    但是:
    忽略了离线训练数据的分布,应该与线上实际应用的数据保持一致。
    排序其目标是“从用户可能喜欢的当中挑选出用户最喜欢的”,是为了优中选优。与召回相比,排序面对的数据环境,简直就是温室里的花朵。
    召回是“是将用户可能喜欢的,和海量对用户根本不靠谱的,分隔开”,所以召回在线上所面对的数据环境,就是鱼龙混杂、良莠不齐。

  6. 随机采样做负样本

    但不是随机等概率抽样。推荐系统存在“八二定律”
    1)热门物料做正样本时,降采样

===========================

https://zhuanlan.zhihu.com/p/144765227

  1. MOBIUS: Towards the Next Generation of Query-Ad Matching in Baidu’s Sponsored Search
    百度凤巢 广告检索
    传统的广告推荐系统,一般采用2-3层的漏斗架构,最底层是matching层,从上百万的广告候选集中召回跟用户query语义相关的广告;然后会有1~2层rank层,对广告进行ctr预估排序。为什么会有2层,一般来说是为了解决性能问题,做成粗排和精排,粗排大部分采用双塔结构,性能上比精排(全连接结构)好,能够预估上千条资源,然后取top的上百条候选集走最上的精排。

然而。
这种架构有一个问题:match层跟rank层的优化目标不一样。match层主要侧重优化相关性,而rank层主要优化商业指标比如ctr。这样会导致match层召回的很多广告cpm不高,不会被展现,从而影响商业收入。
线上实时检索为了处理数百万条候选集,必须采用近邻检索的方式。
常规的做法是左边那条通路:
1.user和ad向量生成后做向量压缩
2.通过ann检索
3.检索后结果再根据business weight进行调整
本文的做法是把business weight调整融合到ann的cos检索中,同时采用了Optimized Product Quantization (OPQ)的压缩方案,整体在耗时和召回覆盖率上有较大的提升
badcase: 低相关, 高点击 作为badcase。
这种badcase挖掘方法:
人工样本构造:
1。 拿到一个batch训练样本。
2。拆分出query集合和ad集合
3/ 基于两个结合做cross join, 生成样本
4。 用户相关性模型(match阶段模型)对所有生成样本进行相关性预估。
5。 设定一个相关性阈值, 低于这个阈值的样本认为是lowRelAugData,用ctr模型进一步进行ctr预估
6.从低相关的样本中,根据ctr预估值筛选出高ctr的样本做为bad case。常规的做法是手工设定一个ctr阈值,选出高于这个阈值的样本。但是为了balance the exploration and exploitation of the augmented data,这里实现了一个采样器,通过采样选出高ctr样本,保证了一定的探索性。
7.把人工构造的bad case样本跟常规训练样本合并,放出到trainBuffer
8.进行模型训练

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值