3. YouTubeDNN排序模型细节剖析( 四 )


" age"定义为t_max-t,其中t_max是训练数据中所有样本的时间最大值,而t是当前样本的时间 。线上预测时,直接把 age全部设为0或者一个小的负值,这样就不依赖于各个视频的上传时间了 。
关于这个特征更多维度的分析 可以看下其他大佬的分析 。
其实这个操作,现在常用的是位置上的除偏,比如商品推荐的时候,用户往往喜欢点击最上面位置的商品或广告,但这个bias模型依然是不知道,为了让模型学习到这个东西,也可以把商品或者广告的位置信息做成一个feature,训练的时候告诉模型 。而线上推理的那些商品,这个feature也都用一样的 。异曲同工的意思有没有 。那么这样的操作为啥会work呢? example age这个我理解,是有了这个特征,就可以把某视频的热度分布信息传递给模型了,比如某个example age时间段该视频播放较多,而另外的时间段播放较少,这样模型就能发现用户的这种新颖偏好,消除热度偏见 。我这里理解是类似让模型消除位置偏见那样,这里消除一种热度偏见 。我理解是这样,假设没有这样一个example age特征表示视频新颖信息,或者一个位置特征表示商品的位置信息,那模型训练的样本,可能是用户点击了这个item,就是正样本,但此时有可能是用户真的喜欢这个item,也有可能是因为一些bias,比如用户本身喜欢新颖,用户本身喜欢点击上面位置的item等,但模型推理的时候,都会误认为是用户真的喜欢这个item 。所以,为了让模型了解到可能是存在后面这种bias,我们就把item的新颖信息,item的位置信息等做成特征,在模型训练的时候就告诉模型,用户点了这个东西可能是它比较新或者位置比较靠上面等,这样模型在训练的时候,就了解到了这些bias,等到模型在线推理的时候呢,我们把这些bias特征都弄成一样的,这样每个样品在模型看来,就没有了新颖信息和位置信息bias(一视同仁了),只能靠着相关性去推理,这样才能推到用户真正感兴趣的东西吧 。
2.4 线上服务
线上服务的时候,采用了一种最近邻搜索的方法去完成topK的推荐,这其实时工程和学术的trade-off的结果,model 过程中对几百万个候选集一一跑模型显然不现实,所有通过召回模型得到用户和video的之后,用最近邻搜索的效率会快很多 。
我们甚至不用把任何model 的过程搬上服务器,只需要把user 和video 存到redis或者内存中就好了 。like this:
在线上,可以根据用户兴趣,采用类似Faiss等高效检索工具,快速找出和用户兴趣匹配的物品,高效检索工具,目前有接触两个:一个是Faiss,一个是annoy 。具体参考我后面的参考文章 。
我们做线上召回的时候,其实可以有两种:
:因为我们有了所有item的了,那么就可以进行物品和物品之间相似度计算,每个物品得到近似的K个,这时候,就和协同过滤原理一样,之前通过用户观看过的历史item,就能进行相似找回了,工程实现上,一般会每个item建立一个相似度倒排表:将item用faiss或者annoy组织成index,然后用user 去查相近item
召回环节基本介绍这些内容 。接下来进入到排序环节 。
3. 排序模型细节剖析
排序模型面对的只是来自检索的数百候选视频,所以可以使用更多精细的特征,重点是精准预测 。
检索出的数百候选视频可能来自于不同的检索模型,他们的检索得分无法直接对比 。排序模型的另一个作用是融合这些来自不同检索模型的候选视频 。
排序模型这块的特色,第一个是特征工程,第二个是优化目标 。
3.1 模型结构

3. YouTubeDNN排序模型细节剖析