赞
踩
youtube在2016推出的视频推荐算法还是比较经典,既可以做排序也可以做召回,今天讲讲它是如何进行召回的
首先还是回顾一下:召回的目的是什么?
召回的目的是从海量的item中,为每一个目标用户召回少量的item数据,为排序阶段提供数据。
那继续问:如何判断在海量的数据中召回哪几个item呢?
无论是召回还是排序,要给用户返回目标item,其实都是要针对具体的某一个user,给item打分,然后返回topK。
那如何得到这个分数呢?
将user信息和item信息送进模型或者送进一个网络,得到一个打分score,然后根据分数进行排序。
针对第一种方法呢,如果模型比较简单,自然可以用于召回,如果是模型比较复杂,那就不能用于召回,因为违背了召回侧的原则(快速简单)
事先学习好user和item的向量,直接求user和item向量的相似度(也是一个分数),通常向量的相似度用余弦角度或者皮尔逊相关系数,根据余弦角度进行排序,选取topK。
在youtube的召回中,本质就是用到了第二种方法(但又有些不同,因为还需要将数据过一下网络)。训练得到item的向量和user的向量,召回的时候,根据user的向量找到item中最相似的k个
item进行召回。
下面看看官方的原图,然后做一个标记。
这里先讲解标注2吧,注解2表示的就是一个样本,也就是一个user的特征,其中包括了:
这就是一条送进模型的完整的样本,也就是一条用户的所哟信息。
那为什么要求均值呢?
它最重要的目的就是要抑制活跃用户,试想,如果一个很活跃的用户,将产生很多日志,那么如果挨个送进模型,那它将对模型起到很大的作用,会导致模型的有偏,所以这么做的目的是,让活跃用户入模的次数减少。不管是活跃或者是不活跃的用户,进来让其进入模型的数据条数相近。
标注3这里,表示用户的样本进入模型后,到这里就得到了一个向量,10维的向量,这些向量就是用户的向量user_embedding。
在这里,其实就是得到了物品向量item_embedding,具体怎么得到的?
这里假设物品有100个。
如上图所示,针对每一个item,就得到了10个权重,这10个权重就是对应item的向量表达,这样,物品的向量item_embedding就得到了哦。
emsp;在预测的时候,会事先将标注4中训练得到的item_embedding是先存到一个数据库中,通常用的是faiss进行存储和检索,faiss中对检索和计算进行了很多的优化,并不需要我们取关心。
当要给一个用户做召回的时候,通常会根据用户的信息(标注2)生成用户向量,然后在faiss中计算得到topK召回。
重点
这里为什么只能存item_embedding,为什么user_embedding不存入数据库呢?其实不是不存,是没法存。
你想想,哪怕一个人,它上一个月看的视频和这个月看的视频都是会不一样的,所以送进模型的信息都是动态变动的,以及它的地理位置等也是动态变化的。自然是没法找到一个固定的user和embedding的关系。所以也就没法把user的embedding存下来。所以只能将信息送进网络跑一下,得到用户embedding,然后再做相似度计算。
简单记录完毕
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。