推荐系统论文阅读(四十八)-谷歌:修正双塔向量召回模型

论文:

论文题目:《Sampling-Bias-Corrected Neural Modeling for Large Corpus Item Recommendations》

地址:https://dl.acm.org/doi/pdf/10.1145/3298689.3346996

最近换了工作+旅游都没来得及写一下博客,近期的工作一直在做向量召回+负采样的活,今天我们来看一下谷歌这篇工业风十足的论文吧,看看有什么借鉴的地方。

一 、背景

工业界的召回一直都是围绕着双塔+负采样两个问题展开的,之前的文章里也说过了,召回是样本的艺术,由于召回需要从整个样本集里面去选取,所以需要让模型开开眼见见世面,所以需要有更多的负样本让模型能够区分出那些是用户不喜欢的,哪些是用户可能喜欢的,注意,只要是可能喜欢的,召回模型就要选出来,这里跟排序是不一样的,排序模型是一定要选出用户真正喜欢的,而召回只需要选出用户可能喜欢的,其他的工作只需要交给后面的粗排跟精排就可以了。

一般的双塔模型长这样:

通常是用两个塔分别去建模user和item,然后在模型的后面计算内积,最后用真实的label计算loss。

回到本文,本文主要的工作是针对负采样的修正,在这里我要先提一下一个召回中负采样的方法:

1.batch随机负采样

2.batch内其他样本作为负样本,也叫batch softmax

3.batch随机+hard sample+部分曝光未点击

首先,我们来分析下以上几个负采样的方法,第1个,完全随机是不太可能的,因为在推荐里面毕竟是有热门商品跟冷门商品的,完全随机的话,有可能就是热门样本被采样太多了,导致在召回的时候把热门商品打压来,对于电商领域来说是不能这么做的,因为热门的item是可以带来很大的gmv的;第2个,问题跟第一个一样,batch内的其他样本同样会有select bias的问题;第3个是工业界里一般的做法,后面两种样本主要是为了让模型真正的能区分困难样本。

谷歌这篇论文针对的是第2点来展开论述的,针对负采样问题连同双塔模型一起优化,让我们一起来看看吧。

二 、模型以及修正负采样

2.1 预定义和batch softmax optimization

表示user/query,表示item,r是label,经过双塔影射到同一空间后:

这时候我们就可以计算内积来表示他们之间的match程度了:

数据:

一个用T个训练样本,如果我们使用softmax多分类损失:

其中:

这时候,可以看到我们之前在w2v中类似的情况了,由于M太大了,导致上面这个式子的计算效率十分低,所以需要对loss函数进行改进,改成了我们在之前所说的batch softmax:

就是在一个batch内,把其他样本的item当作负样本来进行softmax。

但是,这么做还有个问题,我们既然进行了采样,那么意味着高频的item容易被采样成负样本,所以还是要进行修正的:

其中s的计算变成了这样:

其中是item j被采样的概率,最终损失函数变成了:

训练的整体过程如下:

论文里对于r的解释是这样,这里r不是0和1,对于没有点击的样本来说,r是0,对于点击的item,r是播放完成度,也就是说r可能是小于1的。

2.2 采样修正

前面我们也说了,在batch内负采样会导致热门item容易成为负样本,所以需要进行采样修正,具体的做法是,维护两个表A和B,其中A保存item上一次被采样到的step,B保存item的采样频率,你可能听的有点云里雾里了,在详细介绍一下吧。

由于在一个推荐系统中,新item是会经常出现的,所以使用hash函数h把每一个item进行映射,以防止词表大小固定带来的问题,我们的A表会保存h(item i)上一次出现的step,当未来的某个batch采样到item i的时候,就会计算当前step - A表中的h(item i)的step,然后保存到B表中,同时更新A表的step,这时候我们就可以使用1/B(h(item i))来表示item i被采样的概率了。

注意到,我们之前更新B表的方式是easy版本的,因为有可能hash函数的原因导致更新B表的方式被其他item影响了,所以采用了类似于指数加权平均的思想来更新B表:

具体的算法过程如下:

这样还不够,因为由于H

2.3 模型结构和特征


2.3.1特征

1.seed features,我理解这部分是用户正在观看的视频的特征,表征用户当前时刻的兴趣点

2.channel id应该不是频道的意思,可以点开toutube然后点击一个创作者的头像,会发现channel id是创作者的id

3.user features,就是一些用户以前的video点击序列,以及以前点击过的channel id序列,以及一些user profile特征

4.item侧,这些特征就是寻常的item侧特征

2.3.2 l2 正则



为了让softmax更明显,会对内积的结果进行放大,实际上工业界确实都这么做:

四、实验结果

首先看一下hash函数的对比实验:

然后看一下选值的对比实验:

离线实验recall上的对比:

总结一下这篇论文,还有很多我没理解的地方,希望可以进一步思考:

1. 为什么要进行l2正则

2.item emb要共享嘛

3.损失函数是否需要对比下hinge loss和nce loss或者说sample softmax loss

4.特征序列的处理方式

5.。。。

你可能感兴趣的:(推荐系统论文阅读(四十八)-谷歌:修正双塔向量召回模型)