推荐系统–物品冷启动

物品冷启01:优化目标 & 评价指标

冷启动问题 (cold start) 主要分3类:

  • 用户冷启动。用户冷启动主要解决如何给新用户做个性化推荐的问题。当新用户到来时,我们没有他的行为数据,所以也无法根据他的历史行为预测其兴趣,从而无法借此给他做个性化推荐。
  • 物品冷启动。物品冷启动主要解决如何将新的物品推荐给可能对它感兴趣的用户这一问题。
  • 系统冷启动。 系统冷启动主要解决如何在一个新开发的网站上(还没有用户,也没有用户行为,只有一些物品的信息)设计个性化推荐系统,从而在网站刚发布时就让用户体验到个性化推荐服务这一问题。

物品冷启动指的是如何对新发布的物品做分发。优化物品冷启动在小红书这样的 User-Generated Content (UGC) 平台尤为重要,这是因为新物品数量巨大,内容质量良莠不齐,分发非常困难。而且之气讲到的那些模型对于新发布的物品效果很差,曝光率比较低。

UGC 平台的物品冷启动有三个目标: 1. 精准推荐:克服冷启的困难,把新物品推荐给合适的用户,不引起用户反感。 2. 激励发布:流量向低曝光新物品倾斜,激励发布。 3. 挖掘高潜:通过初期小流量的试探,找到高质量的物品,给与流量倾斜。

UGC 平台的物品冷启动主要考察三种指标: 1. 作者侧指标,包括发布渗透率、人均发布量。 2. 用户侧指标,包括大盘消费指标和新物品消费指标。 3. 内容侧指标,比如高热物品占比。

优化目标

评价指标

物品冷启02:简单的召回通道

物品冷启动 (item cold start) 中的召回。冷启动召回的难点是缺少用户交互,还没学好笔记 ID embedding,导致双塔模型效果不好。而且缺少用户交互会导致 ItemCF 不适用。 这节课介绍两种简单的召回通道: 1. 改造双塔模型,使得它适用于冷启动。 2. 类目召回。

物品冷启03:聚类召回

聚类召回是基于物品内容的召回通道。它假设如果用户喜欢一个物品,那么用户会喜欢内容相似的其他物品。使用聚类召回,需要事先训练一个多模态神经网络,将笔记图文表征为向量,并对向量做聚类,然后建索引。

内容相似度模型:

内容相似度模型的训练:

物品冷启04:Look-Alike 召回

Look-Alike 是一种召回通道,对冷启很有效。

Look-Alike 适用于发布一段时间、但是点击次数不高的物品。物品从发布到热门,主要的透出渠道会经历三个阶段: 1. 类目召回、聚类召回。它们是基于内容的召回通道,适用于刚刚发布的物品。 2. Look-Alike 召回。它适用于有点击,但是点击次数不高的物品。 3. 双塔、ItemCF、Swing 等等。它们是基于用户行为的召回通道,适用于点击次数较高的物品。

物品冷启05:流量调控

流量调控是物品冷启动最重要的一环,直接影响作者发布指标。流量调控的发展通常会经历这几个阶段:

1. 在推荐结果中强插新笔记。 2. 对新笔记做提权(boost)。 3. 通过提权,对新笔记做保量。 4. 差异化保量。

新笔记做提权:

物品冷启06:冷启的AB测试

物品冷启动的AB测试,内容很烧脑,不建议初学者观看。推荐系统常用的AB测试只考察用户侧消费指标,而推荐系统的AB测试还需要额外考察作者侧发布指标。后者远比前者复杂,而且所有已知的实验方案都存在缺陷。

推荐系统–重排

重排01:物品相似性的度量、提升多样性的方法

推荐系统中的多样性。如果多样性做得好,可以显著提升推荐系统的核心业务指标。这节课的内容分两部分: 1. 物品相似性的度量。可以用物品标签或向量表征度量物品的相似性。最好的方法是基于图文内容的向量表征,比如 CLIP 方法。 2. 提升多样性的方法。在推荐的链路上,在粗排和精排的后处理阶段,综合排序模型打分和多样性分数做选择。

为了提升物体的多样性,首先要度量两个物品有多相似。

基于物品属性标签计算相似度:

基于物品向量表征:基于图文内容的向量表征

用下面的方法不好训练,因为需要人工标注,因此一般采用cilp的方法。

提升多样性的方法:

重排02:MMR 多样性算法(Maximal Marginal Relevance)

推荐系统和搜索引擎重排中常用的 Maximal Marginal Relevance (MMR),它根据精排打分和物品相似度,从 n 个物品中选出 k 个价值高、且多样性好的物品。这节课还介绍滑动窗口 (sliding window),它可以与 MMR、DPP 等多样性算法结合,实践中滑动窗口的效果更优。

选择R中MR最高的放入集合S中。

参考文献: Carbonell and Goldstein. The use of MMR, diversity-based reranking for reordering documents and producing summaries. In ACM SIGIR Conference on Research and Development in Information Retrieval, 1998.

重排03:业务规则约束下的多样性算法

推荐系统有很多业务规则,比如不能连续出多篇某种类型的物品、某两种类型的物品笔记间隔多少。这些业务规则应用在重排阶段,可以与 MMR、DPP 等多样性算法相结合。

重排04:DPP 多样性算法

行列式点过程 (determinantal point process, DPP) 是一种经典的机器学习方法,在 1970’s 年代提出,在 2000 年之后有快速的发展。DPP 是目前推荐系统重排多样性公认的最好方法。 DPP 的数学比较复杂,内容主要是超平行体、超平行体的体积、行列式与体积的关系。

参考文献: Chen et al. Fast greedy map inference for determinantal point process to improve recommendation diversity. In NIPS, 2018.

行列式等价于体积,因此用行列式的值来衡量物品的多样性。

DPP及其再推荐系统重排中的应用。求解DPP是比较困难的,需要计算行列式很多次,而计算行列式需要矩阵分解,代价很大。这节课介绍Hulu论文中的算法,可以用较小的代价求解DPP。 参考文献: Chen et al. Fast greedy map inference for determinantal point process to improve recommendation diversity. In NIPS, 2018.

行列式等价于体积,因此用行列式的值来衡量物品的多样性。

求解DPP:

推荐系统–行为序列特征

行为序列01:用户历史行为序列建模

用户最近 n 次(top n)点击、点赞、收藏、转发等行为都是推荐系统中重要的特征,可以帮助召回和排序变得更精准。这节课介绍最简单的方法——对用户行为取简单的平均,作为特征输入召回、排序模型。

多目标排序模型:

这里 用户历史行为序列 就是指用户特征中的last n序列特征。

以用户点击过的last n的物品为例 ,对这n个物品id和其他特征用embedding做嵌入,获得相应的n个向量,对这n个向量取平均得到最终的向量。

这里对Last N个向量只是简单的做一下平均,也有更高级的做法,比如基于attention注意力。后面会提到 Last N 不同的序列建模方法。

行为序列02:DIN模型(注意力机制)

上节课介绍了用户的 LastN 序列特征。这节课介绍 DIN 模型,它是对 LastN 序列建模的一种方法,效果优于简单的平均。DIN 的本质是注意力机制(attention)。DIN 是阿里在 2018 年提出的,有兴趣的话可以阅读下面的参考文献。

什么是候选物体:对于精排模型来说,粗排模型输出的几百个物体就是候选物体。

行为序列03:SIM模型(长序列建模)

SIM 模型,它的主要目的是保留用户的长期兴趣。SIM 的原理是对用户行为序列做快速筛选,缩短序列长度,使得DIN可以用于长序列。

参考文献: Qi et al. Search-based User Interest Modeling with Lifelong Sequential Behavior Data for Click-Through Rate Prediction. In CIKM, 2020.

推荐系统–特征交叉

特征交叉用于召回和排序阶段。

特征交叉01:Factorized Machine (FM) 因式分解机

线性模型对输入的特征取加权和,作为对目标的预估。如果先做特征交叉,再用线性模型,通常可以取得更好的效果。如果做二阶特征交叉,那么参数量为O(特征数量平方),计算量大,而且容易造成过拟合因式分解机(Factorized Machine, FM)用低秩矩阵分解的方式降低参数量,加速计算。任何可以用线性模型(比如线性回归、逻辑回归)解决的问题,都可以用 FM 解决。

线性模型的特征xi之间没有交叉,只是简单的加法,没有乘法。

二阶交叉特征:如果d很大,复杂度就太高了,计算代价太大,所以需要一种低复杂度的特征交叉方法,关键在于优化uij这个矩阵。

目前FM已经过时,不再使用该方法

特征交叉02:DCN 深度交叉网络

Deep & Cross Networks (DCN) 译作“深度交叉网络”,用于代替传统的全连接网络。可以用于召回双塔模型、粗排三塔模型、精排模型。DCN 由一个深度网络和一个交叉网络组成,交叉网络的基本组成单元是交叉层 (Cross Layer)。这节课最重点的部分就是交叉层。

交叉层 (Cross Layer)

深度交叉网络

特征交叉03:LHUC (PPNet)

LHUC 这种神经网络结构,只用于精排。LHUC 的起源是语音识别,后来被应用到推荐系统,快手将其称为 PPNet,现在已经在业界广泛落地。 遗漏一个细节:将LHUC用于推荐系统,门控神经网络(2 x sigmoid)的梯度不要传递到用户ID embedding特征,需要对其做 stop gradient。 参考文献: 1. Pawel Swietojanski, Jinyu Li, & Steve Renals. Learning hidden unit contributions for unsupervised acoustic model adaptation. IEEE/ACM Transactions on Audio, Speech, and Language Processing, 2016. 2. 快手落地万亿参数推荐精排模型,2021。

特征交叉04:SENet 和 Bilinear 交叉

1. SENet 是计算机视觉中的一种技术,可以用在推荐系统中对特征做动态加权。

2. 双线性(bilinear)特征交叉可以提升排序模型的表现。有很多种 bilinear 交叉的方法。 3. FiBiNet 是将 SENet 与 Bilinear 模型结合。

Filed间特征交叉

双线性(bilinear)特征交叉:

推荐系统–排序

课件地址:https://github.com/wangshusen/RecommenderSystem

结合小红书的业务场景和内部实践,讲解主流的工业界推荐系统技术。

主要内容:

排序01:多目标模型

第一部分是模型结构。模型把用户特征、物品特征、统计特征、场景特征作为输入,输出对多个指标的预估。 第二部分内容是降采样和校准。在实际的推荐系统中,正负样本的比例严重不平衡,负样本数量远多于正样本,因此需要对负样本做降采样。以点击率为例,对负样本做降采样会导致模型高估点击率,因此需要用公式做校准。

粗排和精排用到的方法都差不多,但精排的模型比较大,因此需要先用粗排模型从几千篇笔记中选择几百篇用于精排。

用户点击以后才会出现点赞、收藏和转发行为:

排序的依据是笔记的点击率、点赞率、收藏率、转发率等多种分数。

多目标模型:

模型输出某个用户对于某篇笔记的预估点赞率、点击率、收藏率以及转发率

训练:类别不平衡。

预估值校准

排序02:多目标排序模型的改进MMoE

Multi-gate Mixture-of-Experts (MMoE) 是一种多目标排序模型。MMoE 用多个独立的塔提取特征,并对多塔提取的特征向量做加权平均,然后送入多头。MMoE 的训练容易出现极化现象(polarize),可以用 dropout 解决。

这里假设神经网络的目标只有点击率和点赞率这两个目标,因此只需要两组权重:p和q

极化现象:softmax函数导致

极化解决方法:

排序03:预估分数的融合

前面通过MMoE获得了点赞、点击、转发率等指标的预估值,得到这些指标之后,需要将它们融合成一个分数。这节课介绍工业界常用的几种融分公式。

用预估的视频时长做排序,用排名来计算得分:

排序04:视频播放建模

视频播放的建模主要有两个目标:视频播放时长、视频完播率。这节课讨论如何在多目标排序模型添加与播放时长、完播率相关的预估任务。

视频越长,完播率越低:

排序05:排序模型的特征

推荐系统中的排序模型需要用户画像、物品画像、统计特征、场景特征。

排序06:粗排的三塔模型

粗排三塔模型,它介于前期融合的双塔模型和后期融合的精排模型之间。用户塔可以很大,因为它只需要做1次推理。物品塔可以比较大,因为物品塔的输出可以缓存在PS。交叉塔必须很小,如果有n个物品,交叉塔需要做n次推理。三塔模型的计算量主要是上层的全连接层。

推荐系统–召回

召回01:基于物品的协同过滤(ItemCF)

Item Based Collaborative Filtering,缩写 ItemCF

ItemCF 的原理:如果用户喜欢物品1,而且物品1与物品2相似,那么用户很可能喜欢物品2。

1. 如何计算两个物品之间的相似度。

2. 如何预估用户对候选物品的兴趣。

3. 如何利用索引在线上快速做召回。

ItemCF的实现

两个物体的受众重合度越高,表示两个物体越相似。

余弦相似度

ItemCF完整流程:

step1:事先做离线计算

step2 线上做召回:

为什么要用索引:

召回02:Swing召回通道

ItemCF :(缺点)

Swing模型:(为用户设置权重)

召回03:基于用户的协同过滤(UserCF)

UserCF 的原理:如果用户1跟用户2相似,而且用户2喜欢某物品,那么用户1很可能喜欢该物品。

关键:1. 如何计算两个用户之间的相似度。 2. 如何预估用户对候选物品的兴趣。 3. 如何利用索引在线上快速做召回。

用户相似度:

如果是热门物体,那么大概率两个用户都会喜欢,因此需要降低热门物体的权重:

UserCF召回的完整流程

step1:离线计算

step2:线上做召回

召回04: 向量召回 ,离散特征处理

one-hot encoding (独热编码) 和 embedding (嵌入)

召回05: 向量召回 ,矩阵补充、最近邻查找

矩阵补充(matrix completion),它是一种向量召回通道。矩阵补充的本质是对用户 ID 和物品 ID 做 embedding,并用两个 embedding 向量的内积预估用户对物品的兴趣。值得注意的是,矩阵补充存在诸多缺点,在实践中效果远不及双塔模型。 做向量召回需要做最近邻查找(nearest neighbor search)。

用绿色的信息做训练,来预测灰色的值,进而为用户做召回

近似最近邻查找:

step1:划分区域

step2:用一个向量表示但各区域,给定一个物体,则返回所在的区域的物体

step3:只需计算该区域所在的相似度。

召回06:双塔模型:矩阵补充的升级版

双塔模型(two-tower)也叫 DSSM,是推荐系统中最重要的召回通道,没有之一。双塔模型有两个塔:用户塔、物品塔。两个塔各输出一个向量,作为用户、物品的表征。两个向量的内积或余弦相似度作为对兴趣的预估。有三种训练双塔模型的方式:pointwise、pairwise、listwise。

双塔模型训练:

pointwise:

pariwise:

listwise:

召回07:双塔模型–正负样本选择

双塔模型(two-tower,也叫 DSSM)正负样本的选取。正样本是有点击的物品。负样本是被召回、排序淘汰的物品,分为简单负样本和困难负样本。

负样本:

简单负样本:Batch内负样本

热门样本成为负样本的概率过大,解决办法:

困难负样本:

召回08:双塔模型的线上服务和模型更新

在开始线上服务之前,需要把物品向量存储到Milvus、Faiss、HnswLib这类向量数据库,供最近邻查找(KNN 或 ANN)。当用户发起推荐请求时,用户塔用用户ID和用户画像现算一个用户向量,作为query,去向量数据库中做最近邻查找。

模型需要定期做更新,分为全量更新(天级别)和增量更新(实时)。全量更新会训练整个模型,包括embedding和全连接层。而增量更新只需要训练embedding层。

模型更新:

全量更新:跟新用户和物体向量

增量更新:每隔几小时实现用户模型更新

为什么需要这个:用户的兴趣可能会随时改变,因此需要随时做用户的更新,且只更新用户embedding参数,其他参数不需要更新。

注意:每天的全量更新是基于昨天的全量更新后的模型进行训练的。

问题:能否只做增量更新,不做全量更新

召回09:双塔模型的改进–自监督学习

改进双塔模型的方法,叫做自监督学习(self-supervised learning),用在双塔模型上可以提升业务指标。这种方法由谷歌在2021年提出,工业界(包括小红书)普遍验证有效。

长尾效应:

参考文献: Tiansheng Yao et al. Self-supervised Learning for Large-scale Item Recommendations. In CIKM, 2021.

自监督学习:

对物品进行不同的特征变换得到的特征向量同类之间尽可能的相同,不同物体之间尽可能不同。

特征变换方法:

1、Random Mask

2、Dropout

3、互补特征

最好的办法 :Random mask(将一组相关联的特征全部mask)

召回10:其他召回通道

地理位置召回包括GeoHash召回和同城召回作者召回包括关注作者、有交互作者、相似作者。缓存召回是储存精排打分高、而且未曝光的笔记。

6个其他召回通道:

推荐系统的基本概念

王树森大佬又开了一门公开课:推荐系统,抱着学习的心态来学习下王老师的课。并做个笔记。

视频地址

github课件:https://github.com/wangshusen/Recomme…

基本概念:

曝光:类似系统给你的推荐的内容

点击:用户点击推荐的内容

阅读:用户点击后在页面停留一段时间

转化流程:

用户行为:点击、点赞、收藏、转发

消费指标:用于反应消费侧对推荐系统的满意程度(非最重要)

消费指标:点击率 (click rate)、交互率 (engagement rate)

北极星指标(最核心指标):用户规模、消费、发布 (关键指标)

DAU:日活跃用户数,用户本日登入小红书,就算一个DAU(且不重复计数)

MAU: 用户本月登入小红书,就算一个MAU(且不重复计数)

实验流程:离线实验、AB测试、推全

离线实验只能反映部分指标,还需要线上实验。

推荐系统链路

链路包括召回、粗排、精排、重排。

– 召回(retrieval):快速从海量数据中取回几千个用户可能感兴趣的物品。

– 粗排:用小规模的模型的神经网络给召回的物品打分,然后做截断,选出分数最高的几百个物品。

– 精排:用大规模神经网络给粗排选中的几百个物品打分,可以做截断,也可以不做截断。 – 重排:对精排结果做多样性抽样,得到几十个物品,然后用规则调整物品的排序。

当用户刷新页面时候,系统就会调用几十条召回通道,每个通道取回几百篇笔记内容,然后使用 用小规模的模型的神经网络给召回的物品打分,然后做截断,选出分数最高的几百个物品。 在下一部精排: 用大规模神经网络给粗排选中的几百个物品打分,可以做截断,也可以不做截断。最后:对精排结果做多样性抽样,得到几十个物品,然后用规则调整物品的排序。

重排

做多样性抽样(⽐如MMR、DPP),从⼏百篇中选出⼏⼗篇。
• ⽤规则打散相似笔记。
• 插⼊广告、运营推广内容,根据⽣态要求调整排序。

总结:

推荐系统的小流量A/B测试 (线上实验)

推荐系统算法工程师的日常工作就是改进模型和策略,目标是提升推荐系统的业务指标。所有对模型和策略的改进,都需要经过线上 AB 测试,用实验数据来验证模型和策略是否有效。

小流量:比如只对10%的用户开放该算法,观测用户的反馈,这样避免大范围的影响。

使用随机分桶测试不同的实验参数效果:

分层实验:解决流量不足的问题(测试的用户不足)

同层互斥,不同层正交:

实验推全和反转实验

小红书推荐系统 —公开课

推荐系统课件:https://github.com/wangshusen/RecommenderSystem

工业界的推荐系统

这门课程结合小红书的业务场景和内部实践,讲解主流的工业界推荐系统技术。

  1. 概要
  2. 召回
  3. 排序
  4. 交叉结构
  5. 用户行为序列建模
    • 用户行为序列特征
    • DIN 模型
    • SIM 模型
  6. 重排
    • 多样性 MMR
    • 多样性 DPP
    • 多样性 MGS
  7. 物品冷启动