排序03:预估分数融合
本博文引自王树森老师推荐系统。视频地址:排序03:预估分数融合_哔哩哔哩_bilibili课件地址: https://github.com/wangshusen/RecommenderSystem
前几节课讲了多目标排序模型。多目标模型输出对点击率点赞率等指标的预估。这节课讲怎么融合多个预估分数。
最简单的分数融合方法就是求各种预估值的加权和。这一项$p_{click}$意思是模型预估的点击率,它的权重是一;这一项$p_{like}$是模型预估的点赞率,它的权重是$w_1$;后面还有很多项,包括预估的收藏率、转发率、评论率等等。
这是另一种简单的融分公式。括号外面是点击率的预估,括号里面是很多项的加权和,这个公式有实际意义。$p_{click} · 1$就是预估的点击率,$p_{click} · p_{like}$意思是曝光之后用户点赞的概率,为什么呢?$p_{click}$是曝光之后用户点击的概率,$p_{like}$是点击进去之后用户再点赞的概率。
p_{click}=\frac{点击}{曝光}p_{like}=\frac{点赞}{点击}两者相乘就是曝光之后用户点赞的概率。这里 ...
排序02:Mixture-of-Experts(MMoE)
本博文引自王树森老师推荐系统。视频地址:排序02:Multi-gate Mixture-of-Experts (MMoE)_哔哩哔哩_bilibili课件地址: https://github.com/wangshusen/RecommenderSystem
上节课介绍最简单的多目标排序模型,这节课介绍一种改进的模型,叫做multgate mixture of experts,缩写是MMoE。跟上节课一样,模型的输入是一个向量,包含用户特征,物品特征,统计特征,还有场景特征。把向量输入三个神经网络,这三个神经网络结构相同,都是由很多全连接层组成,但这三个神经网络不共享参数。三个神经网络各输出一个向量,三个向量叫做$x_1$,$x_2$,$x_3$ ,这三个神经网络被叫做专家,就是mixture of experts中的experts,这里我是为了画图方便,用了三个专家神经网络,实践中通常会试一试四个或者八个。
把下面的特征向量输入另一个神经网络,这个神经网络也有多个全连接层,在神经网络的最后加一个softmax激活函数,输出一个三维的向量,由于是softmax输出,向量的三个元素都大 ...
排序01:多目标模型
本博文引自王树森老师推荐系统。视频地址:排序01:多目标模型_哔哩哔哩_bilibili课件地址: https://github.com/wangshusen/RecommenderSystem
前面的课程讲了召回下一个主题是排序,这节课先介绍最基础的多目标排序模型。
推荐系统的链路我们先回顾一下推荐系统的链路,整条链路分为召回、粗排、精排、重排。链路上的第一环是召回,有很多条召回通道,从几亿篇笔记中选出几千篇。做完召回之后,要从中选出用户最感兴趣的,这就要用到粗排和精排。粗排给召回的笔记逐一打分,保留分数最高的几百篇。然后用精排模型给粗排选中的几百篇笔记打分,然后不做截断,让几百篇笔记全都带着精排分数进入重排。最后一步是重排做多样性抽样,并且把相似内容打散,最终有几十篇笔记被选中展示给用户。
这节课后面几节课主要研究粗排和精排,它们的原理基本相同,只是粗排模型小,特征少,效果差一些。粗排的目的是做快速的初步筛选,如果不用粗排,直接把很大的精排模型用在几千篇候选笔记上,计算代价承受不住。粗排和精排的原理差不多,所以我讲解排序的时候就先不区分粗排和精排了。
用户笔记的交互以小红书为例 ...
召回11:曝光过滤
本博文引自王树森老师推荐系统。视频地址:召回11:曝光过滤 & Bloom Filter_哔哩哔哩_bilibili课件地址: https://github.com/wangshusen/RecommenderSystem
这节课内容是曝光过滤和Bloom Filter,曝光过滤通常是在召回阶段做,具体的方法就是用bloom filter。
曝光过滤曝光过滤是这样一个问题:在推荐系统中,如果用户看过某个物品,就不再把物品推荐给这个用户,小红书抖音都这样做曝光过滤,原因是实验表明,重复曝光同一个物品会损害用户体验,但也不是所有推荐系统都有曝光过滤,像youtube这样的长视频就没有曝光过滤,看过的可以再次推荐。想要做曝光过滤,需要对于每个用户记录已经曝光给他的物品,一个用户历史上看过的物品可能会非常多,好在不需要存储所有的历史记录,只需要存储最近一段时间的就行。以小红书推荐系统为例,只召回发布时间小于一个月的笔记,更老的笔记根本不会被召回,所以就不用对年龄大于一个月的笔记做曝光过滤,只需要记录每个用户最近一个月的曝光历史,用他们做曝光过滤。在做完召回之后,对召回的物品做曝光过 ...
召回10:地理位置召回、作者召回、缓存召回
本博文引自王树森老师推荐系统。视频地址:召回10:地理位置召回、作者召回、缓存召回_哔哩哔哩_bilibili课件地址: https://github.com/wangshusen/RecommenderSystem
前面几节课讲解了几种最重要的召回通道,这节课简单介绍我们小红书用到的其他几种召回通道,这几条召回通道很有用,但是重要性不高。
地理位置召回GeoHash召回有一类是根据用户所在的地理位置做召回。GeoHash召回属于地理位置召回。之所以用这条召回通道,是因为用户对自己附近的人和事感兴趣,推荐系统应该出一些用户附近的内容。系统维护一个地理位置GeoHash索引。GeoHash,意思是把经纬度编码成二进制哈希码方便检索,如果你不懂GeoHash的话,可以去搜一搜,网上有很多讲解,这里你就当GeoHash表示地图上一个长方形的区域。索引是这样的,从GeoHash到优质笔记列表,也就是说以GeoHash作为索引,记录地图上一个长方形区域内的优质笔记笔记列表,按照时间顺序倒排,最新的笔记排在最前面。做召回的时候,给定用户的GeoHash,会取回这个区域内比较新的一些优质笔记。这 ...
召回09:双塔模型+自监督学习
本博文引自王树森老师推荐系统。视频地址:召回09:双塔模型+自监督学习_哔哩哔哩_bilibili课件地址: https://github.com/wangshusen/RecommenderSystem
大家好,我是王树森,前几节课详细讲解了双塔模型,这节课介绍一种改进双塔模型的方法,叫做自监督学习,用在双塔模型上会提升业务指标。
本节简介这是双塔模型,左边是用户塔,右边是物品塔,自监督学习的目的是把物品塔训练得更好。
为什么要做自监督学习呢?在实际的推荐系统中,数据上的问题会影响双塔模型的表现,实际推荐系统都有头部效应:少部分的物品占据了大部分的点击,而大部分的物品点击次数都不高。训练双塔模型的时候,用点击数据作为正样本,模型学习物品的表征,靠的就是点击行为。如果一个物品给几千个用户曝光,有好几百个用户点击,那么物品的表征就会学的比较好。反过来,长尾物品的表征学的就不够好,这是因为长尾物品的曝光和点击次数太少,训练的样本数量不够。一种比较好的解决方法是自监督学习,对物品做data augmentation,这样的话可以更好地学习长尾物品的向量表征。这节课介绍的方法来自于goog ...
召回08:双塔模型——线上服务、模型更新
本博文引自王树森老师推荐系统。视频地址:召回08:双塔模型——线上服务、模型更新_哔哩哔哩_bilibili课件地址: https://github.com/wangshusen/RecommenderSystem
这节课我们继续学习双塔模型,这节课内容是双塔模型的线上召回和更新。
线上召回 在训练好双塔模型之后,就可以把模型部署到线上做召回。比如在用户刷小红书的时候,快速找到这个用户可能感兴趣的一两百篇笔记,下面的内容就是双塔模型怎样做召回。 这是训练好的两个塔,它们分别提取用户特征和物品特征。在训练好模型之后,在开始线上服务之前,先用右边的物品塔提取物品的特征,把物品特征向量记作$b$。小红书有几亿篇笔记,那么就得到几亿个向量$b$,把物品特征向量,物品ID这样的二元组保存到Milvus、Faiss这样的向量数据库。
这些是物品的特征向量和对应的ID,有几亿个物品,所以有几亿个特征向量,向量数据库存储特征向量和物品ID的二元组,用作最近邻查找。前面的课介绍过如何快速做最近邻查找。 至于左边的用户塔处理方式完全不一样,不要事先计算和存储用户向量,而是当用户发起推荐请求的时候, ...
召回07:双塔模型——正负样本
本博文引自王树森老师推荐系统。视频地址:召回07:双塔模型——正负样本_哔哩哔哩_bilibili课件地址: https://github.com/wangshusen/RecommenderSystem
这节课继续讲双塔模型,训练双塔模型需要用到正样本和负样本,选对正负样本作用大于改进模型结构。
正负样本正样本首先来讨论如何选择正样本,正样本比较好选,如果物品给用户曝光之后,用户有点击行为,就说明用户对物品感兴趣,把用户和物品二元组作为正样本。但是选取正样本的时候,有个问题需要解决,大家应该听说过二八法则,就是少部分物品占据了大部分点击,正样本是有点击的物品,所以正样本大多属于热门物品,拿过多的热门物品作为正样本,会对冷门物品不公平,这样会让热门物品更热,冷门物品更冷,解决方案是对冷门物品做过采样,或者对热门物品做降采样,过采样的英文是up-sampling,意思是让一个样本出现多次,降采样的英文是down-sampling,意思是抛弃一些样本,比如以一定概率抛弃热门物品,抛弃的概率与样本点击次数正相关。
前面的课程讲过推荐系统的链路分为召回,粗排,精排,重排,稍后要用到。这里再 ...
召回06:双塔模型——模型结构、训练方法
本博文引自王树森老师推荐系统。视频地址:召回06:双塔模型——模型结构、训练方法_哔哩哔哩_bilibili课件地址: https://github.com/wangshusen/RecommenderSystem
复习这节课后面两节课的内容是双塔模型,双塔模型可以看作是矩阵补充的升级版。这是上节课介绍的矩阵补充模型,模型的输入是一个用户ID和一个物品ID模型,用两个embedding层把两个ID映射到两个向量,用两个向量的内积,来预估用户对物品的兴趣分数,这个模型比较弱,只用到了用户和物品的ID,没有用到用户和物品的属性。
双塔模型这节课介绍的双塔模型,可以看作是矩阵补充模型的升级,下面开始讲双塔模型的结构。我们先来看用户的特征,我们知道用户ID还能从用户填写的资料,和用户行为中获取很多特征,包括离散特征和连续特征,所有这些特征不能直接输入神经网络,而是要先做一些处理。比如用embedding层把用户ID映射到一个向量,跟上节课的做法相同。用户还有很多离散特征,比如所在城市感兴趣的话题等等,用embedding层把用户的离散特征映射成向量,对于每个离散特征,用单独一个embedd ...
召回05:矩阵补充、最近邻查找
本博文引自王树森老师推荐系统。视频地址:召回05:矩阵补充、最近邻查找_哔哩哔哩_bilibili课件地址: https://github.com/wangshusen/RecommenderSystem
这节课后面几节课详细讲解向量召回,矩阵补充是向量召回最简单的一种方法,不过现在已经不太常用这种方法了,我讲解矩阵补充是为了帮助大家理解下节课的双塔模型,大家可能早就熟悉矩阵补充,但我还是建议大家把这节课看完,我会讲很多教科书里没有写,但是在工业界非常有用的知识点。
复习上节课介绍了$embedding$,他可以把用户ID或者物品ID映射成向量,我画的这个模型就是基于$embedding$做推荐,模型的输入是一个用户ID和一个物品ID,模型的输出是一个实数,是用户对物品兴趣的预估值,这个数越大,表示用户对物品越感兴趣。下面我们看一下模型的结构,左边的结构只有一个$embedding$层,把一个用户ID映射到一个向量,记住向量a这个向量是对用户的表征,回忆一下上节课的内容,$embedding$层的参数是一个矩阵,矩阵中列的数量是用户数量,每一列都是图中a这么大的向量,$embedd ...