一种自适应的负采样方法

火山方舟向量数据库大模型

论文题目:TAPAS: Two-pass Approximate Adaptive Sampling for Softmax

自从17年YouTubeDNN横空出世,再加上后续谷歌和Facebook的双塔模型推出,在工业界使用双塔模型进行召回已经是共识了。在召回中,负样本的构造一直是一个比较主流的问题,业内流传着几句话语: 排序是特征的艺术,召回是负样本的艺术;负样本为王 等等。

目前主流的负采样方法有:

1:随机负采样

2:分布负采样,类似于word2vec里面的负采样

3:批次内负采样,这个是谷歌的那篇双塔模型中提出的 (Sampling-Bias-Corrected Neural Modeling for Large Corpus Item Recommendations)

除了这种负样本之外,在2020年的Facebook的召回模型中强调了 hard-negative 的概念。(Embedding-based Retrieval in Facebook Search)

这个概念的背景是,随机选取的样本很可能会选取到大量的无效样本,比如那种一眼就可以看出来用户不会产生消费行为的,模型去学习这类样本也毫无压力,因此需要有一些用户可能会消费但是不会消费的样本作为负样本,提高模型的拟合能力。

针对于这种情况,Airbnb在《Real-time Personalization using Embeddings for Search Ranking at Airbnb》使用了同一城市的非点击样本作为负样本从业务角度解决了这个问题。

但是当没有明显的业务逻辑可以让你选取hard-negative时,那么只能自己进行挖掘,facebook在这篇论文中提出的方法是采用上一个模型中召回序在101-500的物料作为hard-negative。

文中还特别强调hard negative并非要替代easy negative,而是easy negative的补充。在数量上,负样本还是以easy negative为主,文章中经验是将比例维持在easy:hard=100:1。

虽然以上是目前召回中负采样的背景,但是我今天要介绍的文章却是17年的,虽然是谷歌的论文,但是却没有工业背景,而是从一个比较技术的方向来介绍的。该方法讲述起来很简单:先采样多个负样本,但是选择梯度更新的时候只选择排名比较靠前的样本(也就是说更接近于正样本的负样本)。

picture.image算法流程:

1:选取batch(batch较小)

2:首先根据物料的概率分布选取个物料作为负样本,计算个样本在整个batch中的值。

表示的的向量,表示的待选物料的向量,表示的是与候选样本的匹配度。

这篇论文采用的方法与我们常规的每个样本进行负采样不同,它是对每个批次进行负采样,因此计算每个负采样样本得分的时候是计算在整个批次上的匹配得分和。

3:计算个负采样的样本的得分,选取得分最大的个,进行梯度更新。

以上是这篇论文最重要的idea,虽然论文后面有一些优化点,但是只是为了节省内存。

读完这篇文章之后,我觉得它好像指出了一条路自动化,或者说自适应的方法进行hard negative的梯度更新,但是总觉得这篇文章还是存在不少瑕疵。

比如过分的注意于hard negative,但其实在召回中随机负样本其实更加重要,hard negative其实是锦上添花。虽然这篇论文采用了批次负采样的方法避免了引入误差,使得hard negative中引入了一些easy negative样本(整个批次的hard nagetive不一定是某个样本的hard nagetive,就是不知道会不会将正样本也包含进去)。

关于这篇论文的讲解就到这里,本人知识有限,如果有什么错误的地方还请指正。

0
0
0
0
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论