Repository: Wzy1007007/recommend-system-knowledge-summary
Branch: main
Commit: 644e1c140fab
Files: 6
Total size: 27.4 KB
Directory structure:
gitextract_exbncxcg/
├── README.md
└── 推荐系统八股160问/
├── 1. 推荐系统基础.md
├── 2. 召回.md
├── 3. 排序.md
├── 4. 冷启动.md
└── 5. 涨指标的方法.md
================================================
FILE CONTENTS
================================================
================================================
FILE: README.md
================================================
# 推荐系统八股160问
总结了推荐系统相关的160个问题,包括基础知识,召回,排序,冷启动,涨指标的方法。知识来源于王树森《推荐系统公开课》和赵传霖《互联网大厂推荐算法实战》部分知识。 如有错误和漏洞敬请指正!
================================================
FILE: 推荐系统八股160问/1. 推荐系统基础.md
================================================
# 推荐系统基础
**1、推荐系统的转化流程是什么?**
先曝光,后点击,点击以后分为滑动到底+评论,点赞,收藏,转发四种(抖音没有曝光和点击)
**2、推荐系统的短期消费指标?**
点击率、点赞率、收藏率、转发率,点击率是点击次数/曝光次数,后三个是除以点击次数
阅读完成率=滑动到底次数/点击次数×f(归一化函数,与笔记长度有关)
**3、推荐系统的北极星指标(最关键指标)?**
日活/月活用户数(DAU/MAU),人均使用推荐时长,人均阅读笔记数量,发布渗透率(当日发布人数/日活人数)和人均发布量(当日发布笔记数/日活人数)
最核心的指标是DAU和留存(LT7、LT30,代表7天/30天内用户对app的使用率)
北极星指标有利于提升内容多样性,提高用户的活性和数量
**4、推荐系统实验流程分为哪几种?**
离线实验(线下,无用户交互)
小流量A/B测试、全流量上线(线上,有用户交互)
**5、推荐系统的链路(重点)**
过程: 召回——>粗排——>精排——>重排
物品数:几亿——>几千——>几百——>几百——>几十
召回:从物品数据库中快速取回一些物品
粗排:用规模较小的机器学习模型对笔记打分,得到几百篇笔记(需要截断)
精排:用大规模神经网络对粗排的几百篇笔记打分,反映用户兴趣(不用截断)
重排:根据精排分数和多样性分数抽样得到几十篇笔记,并把内容打散
链路当中哪个被公司投入的资源最多:精排
**6、A/B测试的分桶方式是什么?**
先用哈希函数把用户ID映射到某个区间内整数,然后采用随机分桶,把n位用户(这些整数)分到b个桶。设置一个桶作为对照组,其它若干桶作为实验组,实验组指标明显优于对照组,将策略推全。
**7、分层实验的目的是什么?两个原则?**
目的是增加同时做的实验数量,解决流量不够用的问题
两个原则:同层互斥(一个桶不受多种实验策略影响),不同层正交(相互独立)
**8、holdout的策略?**
holdout是考虑整个推荐系统对业务指标的贡献,取10%用户作为holdout桶作为对照,对剩余90%用户进行实验,90%实验桶和10%holdout桶的diff就为整个部门业务指标收益。
每个考核周期结束后清除holdout桶,将实验推全到100%用户,下一周期重新随机划分得到新的holdout桶,开始新一轮考核。
**9、反转实验的必要性?实验方式?一个考核周期结束后对反转桶有无影响?**
必要性:有的指标需要长期观测才能获得稳定指标,反转实验既保证了新策略推全,也可以长期观测实验指标。
方式:推全的新层开个旧策略的桶,对比观测新策略和旧策略的diff。
一个考核周期结束后,会清除holdout桶,但只要反转实验没有结束,反转桶就不会受影响,反转结束后才把新策略用到反转桶上,实验得到真正推全。
**10、推荐系统的架构分为哪两方面?**
功能架构和数据架构,功能架构就是推荐系统链路中的四个过程,数据架构运用Lambda架构,包含离线层、近线层、在线层。
**11、冷数据和热数据的含义?**
冷数据:已经存储在Hadoop分布式文件系统(HDFS)的数据日志
热数据:没来得及生成用户日志的数据,或没来得及落盘在HDFS上的数据
**12、Lambda架构如何处理数据?**
离线层:冷数据在该层进行定时批量计算,每小时统计每个视频的曝光数、点击数并保存结果,一周的CTR就是这168(24x7)个中间结果的汇总,采用Hadoop、Spark、Flink等大数据框架完成。
近线层:离线层计算完毕后视频CTR还在HDFS上,HDFS不利于快速读写,因此将离线批量计算的结果导入Cassandra、Redis这种键值型数据库,缓存离线层结果,便于快速读取。
在线层:离线层中的统计存在时间缺口(例如1-2小时),因此需要让热数据在该层进行流式更新,弥补时间缺口下的数据,计算结果也缓存在Redis中。该层采用Storm、Flink等流式计算框架。
**13、推广搜的作用?有哪些相同点?**
推荐和搜索:负责留住用户,生产流量;广告:负责将流量变现。
相同点:功能架构上都遵循召回粗筛,排序模块精挑细选;数据架构都遵循Lambda结构,算法上三者很多都通用,且都需要很强的个性化。
**14、推荐和搜索的区别?**
第一个区别:用户表达意图的方式不同,搜索依赖输入的查询语句显示表达意图,推荐无需用户显示表达意图,而是通过系统长期观察猜测用户意图。
第二个区别:搜索对结果准确性更加严格,搜索的结果是交集,推荐的结果是并集。
**15、推搜和广告的区别?**
广告对用户的行为考察更多:点击、下载、注册、成功下单等,行为链比推搜更深,且广告和利益相关,因此对预测的精度有绝对准确性的要求。
================================================
FILE: 推荐系统八股160问/2. 召回.md
================================================
# 召回
**1、基于物料属性的召回过程?**
离线时按把相同属性的物料集合起来,构成属性-物料的map结构,线上提取用户喜欢的标签、关注的作者等信息,在map中检索返回相应物料。
**2、ItemCF的原理?如何计算用户对物品的兴趣评分?**
某用户喜欢物品1,物品2和物品1相似,那么该用户很可能喜欢物品2。
用户对某物品的兴趣=Σ用户对其它若干物品的评分×若干物品与该物品的相似度。
评分:点击、点赞、收藏、转发各为1分。
**3、如何计算两个物品的相似度?从矩阵的角度如何考虑?**
计算喜欢物品1的用户数量W1,喜欢物品2的用户数量W2,相似度=(W1∩W2)/sqrt.(W1·W2)。
若考虑喜欢程度,分子改为交集用户对物品1的评分×对物品2的评分再求和,分母W1项改为喜欢物品1的所有人喜欢程度的平方和再取模,W2项同理。
考虑用户反馈矩阵A(mxn),m是用户总数,n为物品总数,矩阵每个元素代表用户对物品的评分,计算 $S=A^TA$得到n×n矩阵,即可得到物品之间的相似度。为用户召回时,根据用户的历史交互,选出相似度最高的若干物品作为结果。
**4、ItemCF完整的召回流程?**
离线计算:建立用户→物品的索引,得到用户近期感兴趣的物品评分,以及物品→物品的索引,得到物品间的相似度。
线上召回:给定用户id,找到该用户近期感兴趣的last-n物品,每个物品找到top-k相似的物品,得到一共nk个相似物品,根据公式预估每个物品的兴趣分数,返回分数最高的若干物品作为结果。
**5、Swing模型的作用?利用Swing如何改写ItemCF相似度公式?**
Swing模型是为了降低小圈子的权重,防止物品的重合用户是来自同一小圈子对计算带来误差。
Swing要考虑重合用户集合V里两两之间喜欢的物品重合度。假设用户u1喜欢的物品为J1,用户u2喜欢的物品为J2,定义重合度overlap(u1,u2)=J1∩J2,重合度高,说明可能来自一个小圈子,要降低它们的权重。改写相似度公式= $Σ_{u_1∈V}Σ_{u_2∈V}1/α+overlap(u_1,u_2)$。
**6、ItemCF的优点?**
物料数量更少且特征更稳定,因此nxn的矩阵S不会很大,且可以提前计算好。以及S的计算有MapReduce分布式算法,计算方便。
**7、UserCF的原理?如何计算用户对物品的兴趣评分?**
用户1和用户2相似,用户2喜欢某物品,那么用户1很有可能喜欢这个物品。
用户对某物品的兴趣=Σ该用户和其它用户的相似度×其它用户对该物品的评分
**8、如何计算两个用户的相似度?公式如何优化?**
用户u1喜欢的物品为J1,用户u2喜欢的物品为J2,相似度=(J1∩J2)/sqrt.(J1·J2)。
公式的不足在于同等对待热门和冷门的物品,两个用户同时喜欢热门物品,不能完全说明两个用户相似,因此优化公式,将分子变为 $Σ_{l∈I}1/log(1+n_l)$。I是两个用户共同喜欢的物品,$n_l$代表喜欢物品l的用户数量。
**9、UserCF完整的召回流程?**
离线计算:建立用户→用户的索引,得到用户间的相似度,以及用户→物品的索引,得到用户对物品的兴趣评分。
线上召回:给定用户id,找到与该用户最相似的top-k用户;对这些用户,找到它们近期感兴趣的last-n物品,得到一共nk个相似物品,根据公式预估每个物品的兴趣分数,返回分数最高的若干物品作为结果。
**10、如何得到One-hot编码和Embedding向量?**
One-hot:把特征类别映射成序号,再把序号映射成高维稀疏向量,根据序号得到对应位置为1,其它全为0。
Embedding:把序号映射成低维稠密向量。Embedding参数以矩阵形式保存,大小为向量维度×类别数量。Embedding可由参数矩阵×One-hot向量得到。
**11、LR模型的内容?特点?问题?解决该问题的方式?**
内容:LR是一种评分卡,代表一些特征值构成的组合成交概率,分数越高越容易成交,LR最终得分是一条样本能够命中的评分卡中所有条目的得分总和。
特点:强于记忆,依赖人工输入,不能挖掘新模式,能通过正则剔除得分较低的罕见模式。
问题:弱于扩展,记住的是高频、大众的模式,缺乏挖掘小众需求,推荐个性化弱。
解决方式:将概念拆分成向量,实现将细粒度特征拆分成粗粒度的特征,从而使概念得到扩展,包含内容更加丰富。
**12、Embedding有哪两种类型?各自的内容?**
两种类型:共享Embedding和独占Embedding。
共享Embedding:能缓解由于特征稀疏,数据不足导致的训练不充分;复用Embedding能节省存储空间。例如:双塔模型中,候选物品和用户历史行为序列,以及特征交叉时会用到共享Embedding。但共享Embedding存在特征之间的互相干扰。
独占Embedding:避免特征之间的干扰,特征交叉时Embedding的独占(FFM/CAN)。
**13、FFM的内容?**
不同于FM的地方在于:FM中 $w_{ij}=v_iv_j$的v是在同一embedding中,而FFM的v是要在对方的embedding中找对应向量。它的embedding是独占的,但会引起参数爆炸。
**14、CAN的目标?模型内容?**
目标:让每个特征在与其他不同特征交叉时使用完全不同的embedding,同时不引入FFM那样那么多的参数导致空间爆炸和训练难度。
内容:将item的embedding拆解成若干个小矩阵,分别与user embedding通过MLP进行加权融合,从而实现特征交叉。也就是同一物品和不同用户交叉时,物品向量的不同位置发挥作用,相当于使用了不同的物品embedding,减少了不同交叉之间的相互干扰。
**15、矩阵补充模型结构?训练思路?**
结构:用户ID经过embedding层得到用户向量,物品ID经过embedding层得到物品向量(两个embedding不共享参数),两个向量进行内积,得到用户对物品的兴趣。
训练:有用户embedding和物品embedding两个参数矩阵A和B,第u号用户对应矩阵第u列,第i号物品对应矩阵第i列。将两个矩阵相乘,最小化平方和损失,即真实兴趣分数y与两个向量内积之差。
两个矩阵相乘的结果里有很多空白值,我们的目标是通过学习矩阵A和B,来预测空白位置的值,补充结果矩阵的内容,补全后就可将分数较高的物品推荐给用户。
**16、矩阵补充的缺点?**
(1)只用了用户和物品的ID embedding,没利用物品和用户的属性,改进方法是采用双塔模型。
(2)负样本的选择方式不对:不能用曝光未点击的方式作为负样本。
(3)内积不如余弦相似度反映用户兴趣,平方和损失不如交叉熵损失效果好。
**17、如何利用矩阵补充做线上召回?会出现什么问题?如何改进?**
模型存储:训练得到用户矩阵和物品矩阵A和B,A的每一列代表一个用户,B的每一列代表一个物品。矩阵A存储在key-value表,B的存储比较复杂。
线上服务:采用最近邻查找(KNN)——给定用户ID得到他的向量a,查找他最感兴趣的k个物品作为召回结果。这种方法需要对B矩阵的每一列进行内积,计算量巨大。
改进方式:近似最近邻查找(ANN),采用聚类思想。对物品数据进行预处理,将相似的物品聚在一起作为同一扇形区域,每个扇形区域用一个单位向量表示。每个扇形区域向量作为key,区域内的点(物品)作为value。于是用户a与物品的内积转变为与扇形单位向量内积,得到相似度最大的向量,返回向量内的所有物品。
**18、向量化召回的4个维度?**
如何定义正样本,如何定义负样本,如何将用户、物品特征转为embedding,如何定义损失函数。
**19、如何定义正样本?存在问题?解决方案?**
正样本的定义:
对用户和物品而言,曝光且有交互(如点击、点赞、购买等)的用户-物品二元组构成正样本;
对物品和物品而言,在同一会话(间隔时间较短的用户行为序列)交互过的两个物品构成正样本;
对用户和用户而言,两个用户的交互历史相近,构成一堆正样本。
存在问题:少部分物品占据了大部分点击,导致正样本大多是热门物品,导致热门物品更热,冷门物品更冷。
解决方案:过采样冷门物品,降采样热门物品。
**20、如何定义负样本(两种类型)?两种采样方式及具体内容?**
简单负样本:未被召回的物品。
复杂负样本:与正样本有几分相似,但细节有所不同,或者说用户对这些样本多少有点兴趣,但兴趣不够(召回但在排序阶段被淘汰的物品)。
采样方式:随机采样或batch内负样本。
(1)随机采样:分为均匀采样和非均匀采样,均匀采样对冷门物品不公平,因此要用非均匀采样过采样热门物品,抽样概率正比于点击次数的0.75次方。
(2)batch内负样本:每个用户对应点击的物品构成用户-物品正样本,该用户与其它用户点击的物品构成负样本(都是简单负样本)。batch内负样本的问题在于热门物品成为负样本的概率过大,过采样程度过大,缺乏冷门样本(easy negative)。因此需要引入 $-logp_i$纠偏,将预估值抬高,注意纠偏只在训练中起作用。
**21、能否将曝光未点击的物品作为负样本?为什么?**
不能。召回的目标是将用户可能喜欢的和完全不感兴趣的物品区分开,不是优中选优。曝光未点击的物品实际上用户是有兴趣的,只是兴趣不够。将这部分物品作为召回负样本,违背了召回的目的,无法让模型见世面(既看到最匹配的组合,也看到最不靠谱的组合),它们应当在排序阶段被区分。
**22、召回要求解耦指的是什么?原因?具体方式?**
解耦:将用户信息和物料信息隔离,先各自处理,最后再将两个embedding交叉得到结果。
原因:召回的样本数量很大,如果每个用户都进行DNN那样的复杂运算,会使推荐系统负担过重,效率过低,不能满足在线实时性的要求。
方式:先将物品向量离线计算好,存储并建立好索引。在线时利用近似最近邻快速搜索与用户最相似的物品向量。
**23、召回损失函数有哪些?**
NCE Loss:基于交叉熵损失函数,与正样本的内积和负样本的内积(随机采样一部分物料)相关,同时引入纠偏项。
NEG Loss:NCE的简化,忽略纠偏项。
Sampled Softmax Loss:基于softmax函数,分子反映正样本的相似度值,分母包含正样本和负样本的相似度值,同时引入纠偏。
Pairwise Loss:鼓励正样本的余弦相似度大于负样本的余弦相似度,分为triplet hinge loss(MH Loss,直接考虑内积)和triplet logistic loss(BPR Loss,将内积作为指数)。
**24、借助Word2Vec的召回方式有哪些?Word2Vec分为哪两类?比较异同?**
召回方式:Item2Vec、Airbnb、EGES召回。
Word2Vec:Skip-Gram和CBOW。前者是用中心词预测上下文,后者是用上下文预测中心词。采用NEG Loss进行训练,正样本是中心词上下文的目标词汇,负样本是为中心词随机采样的一批单词。
比较:Skip-Gram预测次数更多,对大规模数据集,生僻词/专业术语较多的情况更适合。
**25、Item2Vec的原理?如何利用4个维度进行召回?Item2Vec存在的问题?**
原理:将用户某一行为序列(一个会话内点击过的物料)当成一个句子,序列中的每个ID当成一个单词。套用Word2Vec训练就能得到每个物料的embedding,用于I2I召回。
召回:
(1)如何定义正样本:利用滑窗技术,对同一用户同一会话交互过的物料,某个物料前后出现的其他物料认为彼此相似,成为正样本。
(2)如何定义负样本:从整个物料库中随机采样一部分物料作为负样本。
(3)如何embedding:定义待学习的矩阵V,装载物料的embedding。
(4)如何定义损失函数:采用NEG Loss。
问题:滑窗导致Item2Vec缺乏对长时间序列的相关性探究,但在推荐系统里面,点击的第一个物料和最后一个物料存在高度相关的可能。
**26、Airbnb召回在Item2Vec基础上做了哪些改进?**
Airbnb以民宿房间为背景,对I2I召回:
(1)正样本:点击序列的每个房屋和最终成功预订的房屋是相似的。
(2)负样本:引入hard negative,将每个房屋与其它同城的房屋作为负样本。
(3)损失函数:同样采用NEG Loss,但增加了额外的正负样本。
对U2I召回(拓展至冷启动领域):
(1)正样本:某用户u预订过某房间l,u属于的类别U和l属于的类别L的向量相似,成为正样本。
(2)负样本:对一个用户类别U,随机选择一部分房屋作为easy negative;同时引入hard negative,将被房东拒绝的用户类别U与该房屋类别L作为负样本。
(3)如何embedding:考虑了第i类用户和第i类房屋的embedding,利用人工先验规则进行分类。
(4)损失函数:同样采用NEG Loss,但增加了额外的负样本。
**27、EGES是针对什么背景的召回?如何利用4个维度进行召回?**
EGES相比Airbnb I2I,Item2Vec破除了同一用户同一会话的限制,考察了跨用户,跨会话的情况。
EGES召回:
(1)正样本:根据用户行为序列构建物料关系图,每一条边代表两个物料被顺序交互过,根据关系图随机游走生成若干新的序列,对这些新序列利用Word2Vec定义滑窗,窗口内的两个物料认为相似,构成正样本。
(2)负样本:采用随机采样的方式。
(3)如何embedding:将物品ID的embedding和属性的embedding合成新物料的embedding,合并方法有简单平均和加权平均,融合过程是由算法自动学习。
(4)损失函数:采用NEG Loss。
**28、FM如何运用于召回中?**
对给定用户,考虑 $F(u,t)=W_t+V_{tt}+V_{ut}$,第一项是所有物品的权重,第二项是物料特征内部的两两交叉,第三项是每个用户特征和每个物料特征的两两交叉(各自要预先得到),采用BPR Loss进行评估。预测时将物品特征和用户特征拆开($E_u×E_t$)。
**29、双塔模型的内容?如何负采样?混合负采样的原理?**
分为用户塔和物品塔:用户塔将用户ID、用户离散特征、用户连续特征通过特征变换,再进入神经网络学习得到用户表征向量,物品塔同理得到物品表征向量,将两个向量求得余弦相似度作为用户对物品的兴趣评估。
负采样方式:batch内负采样,混合负采样。
混合负采样:额外建立一个向量缓存,存储训练中得到的最新物料向量,除了batch内负采样得到的hard negative,再从向量缓存中采样一些向量作为easy embedding。
**30、双塔模型的特点?生成用户向量过程中如何将历史行为赋予不同权重?**
特点:双塔模型要求严格解耦,单塔可以很复杂,求余弦相似度前不允许用户和物品特征进行交叉。
如果想将用户不同历史行为赋予权重作为用户向量,将物料作为query进行attention行不通,可以做出如下替代方案:
(1)用户输入的搜索文本最能反映用户当下意图,作为query;(2)将用户画像作为query给历史行为打分;(3)将用户最后点击的物料作为query衡量历史行为重要性。
**31、双塔模型的训练方式?**
训练方式:
pointwise:独立看待每个正样本和负样本,做简单二元分类;
pairwise:对给定用户,每次取一个正样本和一个负样本,鼓励用户与正样本相似度越大,与负样本相似度越小,采用Pairwise Loss;
listwise:对给定用户,取一个正样本和多个负样本,鼓励正样本余弦相似度尽量大,负样本余弦相似度均尽量小,采用Sampled Softmax Loss。
**32、Sampled Softmax Loss的训练技巧?**
(1)L2正则化:用户和物品的向量点积采用余弦相似度,体现出归一的过程;
(2)引入温度调整系数:用户和物品的相似度乘上1/τ,用于放大没被训练好的负样本,损失增加,该样本被重点关注。
τ如果太小,会导致推荐精度高,但对用户潜在兴趣探索不够(用户没点击某物品并不完全因为不感兴趣,还可能是还未被曝光),导致进入信息茧房。
τ如果太大,召回把关太松,影响用户体验,但有利于实现推荐多样性。
(3)采样概率修正:负样本包括batch内负样本和向量缓存的负样本,纠偏的概率变成两种负样本的组合概率。
**31、双塔模型的线上召回过程?为什么要分为离线存储和在线存储?**
物品塔:离线存储,将训练好的物品向量存入向量数据库,并建立向量-ID索引,加速最近邻查找。
用户塔:给定用户ID和特征线上计算用户向量,将其作为查询在数据库中做最近邻查找,返回与用户向量余弦相似度最高的物品向量。
原因:线上计算几亿物品向量代价过大;且用户兴趣是动态变化的,必须线上计算,而物品特征相对稳定,因此可以线上计算物品向量。
**32、双塔模型的两种更新方式?**
全量更新:今天凌晨用昨天全天的数据,训练1 epoch,即每个数据只用一次(要randomshuffle打乱),目的是消除偏差。
增量更新:做online learning更新模型参数,实时捕捉用户变化的兴趣,按数据从早到晚的顺序训练1 epoch。增量更新对数据流要求高,同时对时间延迟有严格要求。
**33、双塔模型的问题?如何进行改进?改进方式的目标是什么?**
双塔模型对高点击物品学习得好,长尾物品(低曝光物品)学习不好。可采用自监督学习方法,做data augmentation,把长尾物品向量表征学得更好,把低曝光物品、新物品推荐更准。
**34、特征变换的方式有哪些?**
random mask:随机选一些离散特征,把它们遮住;
dropout:随即丢弃特征中的50%值;
互补特征:把特征随机分成两组输出两个物品表征;
关联特征:随机选择一个特征作为种子,利用互信息大小将相关性大(互信息大)一组关联特征mask,保留剩下的特征。
**35、自监督训练的过程?**
将物品i做数据增强,得到特征i1和i2,物品j同理得到特征j1和j2,目标是同一物品i1和i2的向量(正样本)相似度大,不同物品之间i1和j1/j2向量(负样本)的相似度小,采用交叉熵损失函数衡量。
**36、Deep Retrieval的内容?四要素?**
内容:把物品表征为路径,先上查找用户最匹配的路径。
(双塔模型以向量作为中介,Deep Retrieval以路径作为中介)
四要素:索引,神经网络预估路径,线上召回,训练。
**37、Deep Retrieval的索引分为哪两部分?**
(1)物品→路径:一个物品对应多条路径。
(2)路径→物品:一条路径对应多个物品。
**38、Deep Retrieval如何利用神经网络预估路径?**
用3个节点[a, b, c]表示一条路径,a代表给定用户特征x,预估用户对节点a的兴趣 $p_1(a|x)$;b代表给定x和a,预估用户对节点b的兴趣 $p_2(b|a;x)$;c代表给定x、a和b,预估用户对节点c的兴趣 $p_3(c|a,b;x)$,将3项乘起来则代表用户对该路径的兴趣 $p(a,b,c;x)$。
**39、Deep Retrieval如何进行线上召回?beam search的内容?如何选择beam size?**
召回过程:给定用户特征,用神经网络做预估,用beam search召回一批路径;然后利用索引路径→物品召回一批物品;再对物品打分排序,选择一个子集。
beam search:设置参数k作为beam size,代表从一个节点出发选择k条最优路径。它本质是一种贪心算法,分别让p1,p2,p3最大化,但单独最大化这3项得到的结果不一定是最优路径。k越大,越容易选出最优路径。
**40、Deep Retrieval训练步骤?正则项的作用?**
训练步骤(以下两个步骤是同时进行的):
(1)学习神经网络参数(用户到路径):要让物品表征的路径兴趣分数更大,损失函数则为兴趣分数取对数再取相反数。
(2)学习物品表征(以用户为中介,探究物品和路径的关联):用户→物品看的是用户是否点击过物品,用户→路径则为(1)中内容,两者相乘即为物品和路径的相关性,损失函数方法同(1)。
正则项:在学习物品表征时,避免过多item集中在一条路径上,在损失函数中加上正则项,做到路径上item数量的平衡。
**41、说出其它的一些召回通道?**
地理位置召回:GeoHash召回(经纬度编码)和同城召回。
作者召回:关注的作者,有交互的作者召回,相似作者召回。
缓存召回:精排没有被曝光的缓存起来,作为一条召回通道,缓存要实行退场机制(成功曝光、超出缓存大小、超过召回次数、达到保存最多日期)
**42、曝光过滤问题指的是什么?采用什么方式?**
曝光过滤问题:如果用户看过某个物品,则不再把该物品曝光给该用户,曝光过的物品会从召回结果中被排除,采用Bloom Filter的方式。
**43、Bloom Filter的作用?有什么问题?**
作用:判断一个物品ID是否在已曝光的集合中,如果判断为no,则一定不在集合中(一定没被曝光);如果判断为yes,则很可能在集合中(有可能被曝光,有可能没被曝光),将被舍弃。
问题:这种方式一定可以避免物品重复曝光,但容易误伤,把未曝光物品视为已曝光物品过滤掉。
**44、Bloom Filter具体做法?如何定性分析误伤概率?**
具体做法:把每个物品映射到0到m-1的向量空间内,设置哈希函数k代表映射的空间位数。每往集合添1个曝光物品,只需把向量k个位置设为1,原本为1则不变。k>1时,必须映射的每一位都为1才会被判断为已曝光。
误伤概率:设曝光物品集合大小为n,二进制向量维度为m,使用k个哈希函数。如果n越大,向量中的1越大,误伤概率越大;m越大,向量越长,越不容易发生哈希冲突,误伤概率越小;k太大或太小都不好。
(由于年龄大于1个月的物品不可能被召回,因此没必要把它们记录在Bloom Filter中,将它们移除可以减少n,降低误伤率)
**45、Bloom Filter曝光过滤的完整链路?**
前端记录下所有被曝光的物品,写入Kafka队列;用Flink对队列内容实时读取,并实时将结果写入向量空间;再将得到的向量空间应用于召回物品中,过滤掉判断为已曝光的物品,剩下的进入排序和曝光环节。
**46、Bloom Filter曝光过滤的缺点?**
只支持添加物品,不支持删除物品,从集合中移除物品,无法消除它对向量的影响(不能简单地把对应位置从1改为0)。
**47、GCN的内容?特点?如何定义正样本、负样本及损失函数?**
内容:将推荐系统构建成一张图,各种实体(用户、商品、店铺、品牌等)构成图的顶点,各种互动关系(浏览、点击、购买等)构成图的边。GCN将召回建模为边预测问题,预测两节点之间是否有边存在。
特点:GCN考虑了图中的拓扑连接关系,有传递信息的作用。它能让两个用户的信息,通过共同购买过的商品、共同关注的品牌和商店进行相互传递;也能让两个物料的信息,通过同属的标签、品牌等相互传递,从而丰富用户和物料建模时的信息来源。
定义:一条边上两端节点v1和v2构成正样本,v1+随即采集的顶点构成负样本,损失函数利用NEG、SS、MH、BPR等都可以。
**48、GraphSAGE的原理?和GCN相比有什么优势?**
GraphSAGE是GCN的一种实现思想。它并不直接学习图上各节点的向量,而是学习出一个转换函数,只要输入节点的特征和它的连接关系,它就能返回该节点的向量表示。
优势:GCN需要将整个图的邻接矩阵输入模型,这意味着它在处理大规模图时会遇到内存和计算资源的瓶颈,遇到未见过的新节点时存在预测局限;而GraphSAGE是采样固定数量邻居节点进行聚合,避免了GCN需要整个图的限制,能很好的处理未见过的新节点,提高模型拓展性。
**49、GCN的具体实现过程(定性,以推荐算法实战p133为例)?GAT如何改进GCN?**
总结:自上而下生成节点,自下而上逐层卷积。
生成节点:考虑节点A(最高层),先生成和它直接相邻的节点B、C、D(次高层),再对B、C、D生成它们各自相邻的节点(底层)。
逐层卷积:从底层开始聚合邻居节点的信息(AGG聚合+PROJW1权重分配),并和本节点信息(PROJB1权重分配)合成,逐层操作得到最高层节点A的信息。聚合邻居节点信息时可以考虑拼接、attention等方式。
GCN的聚合权重是固定的,而GAT通过attention生成权重,让模型自己学习,使处理更加灵活。
**50、GCN召回的实例?目标是什么?同构图的含义?**
实例:PinSage,图中有Pin和Board两种节点,分别代表网址和收藏夹,两节点的连接边代表收藏这一动作,它的目标是学出高质量的Pin Embedding。
同构图:一类节点和一类边的关系图。
**51、PinSage的训练和推理技巧?**
训练:(1)Mini-Batch训练,将关联的节点有限化,减少计算时间和内存,提高效率;(2)选取邻居关联节点的方式是随机游走,选取被访问次数最多的若干个节点,剩余的节点可以作为Hard negative样本(相关但是相关性不够)。
推理:MapReduce分布式推理,map是指各节点独立将上一轮卷积得到的旧向量映射成新向量,并发送给邻居节点;reduce是指各节点聚合邻居节点发来的向量,再映射成新向量。
**52、异构图的GCN两种方式是什么?**
MuitiBiSage:多个同构图卷积,思路是先考虑单一关系的同构图的节点信息传递,然后再将每种单一关系得到的结果融合(用到self-attention)起来生成节点向量。
GraphTR:直接在异构图上进行卷积,先用transformer实现同一类型的邻居节点内部信息交叉,再用FM实现不同类型邻居节点之间的信息交叉。
================================================
FILE: 推荐系统八股160问/3. 排序.md
================================================
# 排序
### 推荐系统公开课第三章:排序+推荐算法实战第二章:特征工程
**1、多目标排序模型可以有哪些指标?最终排序的依据?针对的排序类型?**
指标:点击率、点赞率、收藏率、转发率等,最终是将每个指标得到的分数加权融合得到总分,对其进行排序,针对精排模型。
**2、简要说明多目标排序模型的结构?和双塔模型有什么不同?**
结构:将用户特征、物品特征、统计特征、场景特征串接融合进入神经网络,通过处理得到融合的特征向量,再通过全连接层+非线性输出指标分数(全连接层对每个指标而言是独立的)。
不同:双塔模型是用户向量和物品向量先各自进行神经网络处理,再将输出进行相似度求解操作,神经网络是独立的;而多目标排序是一开始将用户和物品向量进行融合,神经网络是共享的。
**3、排序模型的训练采用什么损失函数?训练难点在哪里?**
采用交叉熵损失函数,难点在于正负样本的类别数量极不平衡,需要对负样本降采样,由于负样本变少,预估点击率将大于真实点击率。
**4、MMoE的作用?模型结构?一般专家神经网络数量为多少?**
作用:采用若干个专家神经网络,能够实现不同的指标交由不同神经网络,通过每个网络的门控(分配不同权重)处理,减少指标间的干扰;且处理某个指标的神经网络规模减小,防止了过拟合。
模型结构:将用户、物品、统计、场景特征融合后,用若干个专家神经网络处理得到若干个向量,将这些向量依据权重加权平均得到最终的融合向量,进行后续处理,权重通过神经网络和softmax函数生成。专家神经网络数量一般为4或8。
**5、什么是极化现象?如何解决?**
极化现象:专家神经网络的权重一个接近1,其余接近0,导致没有将多个专家神经网络充分利用,没有被利用的专家神经网络处于“dead”状态。
解决方法:对softmax的输出使用dropout,强迫每个任务根据部分专家做预测,但结果可能偏差较大(特别是权重接近1的专家被dropout)。
**6、视频排序的依据?播放时长建模公式?**
依据:在多目标排序模型指标的基础上,还有播放时长和完播。
建模:用z代表经过全连接层输出的播放时长,p代表z经过sigmoid函数得到的值,p=exp(z)/1+exp(z),用户真实播放时间为t,则y=t/1+t,对p和y用交叉熵函数使p接近于y。
**7、衡量视频完播的两种方法?完播率调整的原因?如何调整?**
两种方法:(1)回归方法,用实际播放时间/视频长度衡量播放率;(2)二元分类方法,定义完播指标(百分比),超过这个百分比代表完播,作为正样本,反之为负样本。全连接层输出的概率代表视频播放超过这个百分比的概率。
完播率调整:不能把预估的完播率用到融分公式中,否则有利于短视频,对长视频不公平;调整方式是将预估播放率/f(视频长度)作为融分公式的一项参与排序。
**8、物料画像由哪些组成?**
物料属性(即Item ID)、物料的类别和标签、基于内容的embedding、动态画像(限定时间下的点击数、点赞数等指标)、作者特征(发布笔记数、粉丝数、笔记消费指标等)、用户给物料反向打的标签。
**9、用户画像由哪两部分组成?**
用户的静态画像:人口统计学属性,如性别、年龄,以及其它稳定的数据信息,对推荐算法作用不大,用户唯一标识User ID是很重要的信息。
用户的动态画像:从用户历史交互行为提取出的用户兴趣爱好,如物料属性、用户动作类型(结合时间),可以采用简单平均、DIN、SIM等方法。
**10、物料画像和用户画像特征通常用什么方式来提取和查询?优缺点?**
方式:离线提取,在线查询。
优点:线上提取用户兴趣/物料特征只需要一个查询操作,耗时短,适合召回、粗排这种候选集庞大的任务。
缺点:提取出的用户兴趣不会随候选物料的不同而改变,针对性不强。
**11、偏差特征的定义?举例?如何处理这些特征?**
偏差特征:用户的选择并非完全出自他的兴趣爱好,而是受了场外不公平因素的影响,这些因素就是偏差。
例如位置偏差:用户对某笔记/视频没有点击,不是因为他不喜欢,而是笔记/视频出现的位置太偏不醒目,影响了用户的行动,造成了用户兴趣和反馈的不匹配。
处理方式:偏差特征通过一个线性层接入模型,保证无论这些特征取值如何,都不改变排序结果,实现偏差特征不起作用的效果。
**12、数值特征处理的方式?**
处理缺失值:用均值/中位数代替,或训练一个模型来预测缺失值。
标准化:将不同量纲,不同取值范围的数值特征压缩到同一数值范围内。对于长尾数据,常采用开方、取对数等非线性变换后再标准化。
数据平滑与消偏:威尔逊区间平滑(克服小样本的负面影响,提高计算置信水平)、CoEC(用某位置的点击数量均值代替,消除位置带来的偏差)。
分桶离散化:将连续特征值划分为多个区间,看数值落在哪个区间,就以那个桶的桶号作为特征值。
**13、类别特征有哪些?特点?**
用户画像、物料画像中的一二级分类、标签都是类别特征,特别关注User ID和Item ID。类别特征有高维、稀疏的特点。
**14、服务于类别特征的技术?**
(1)用embedding扩展特征内涵,多特征交叉;(2)利用Parameter Server的分布式集群并行处理;(3)利用FTRL(调节学习率)、DIN(调节正则系数)、FM(交叉特征其中一个不为0就能参与训练)等方法解决罕见特征受训不充分的问题。
**15、处理类别特征的数学方式?**
数学方式:映射(利用映射表映射到embedding矩阵,维护难度大)、特征哈希(根据整数大小映射到embedding矩阵,哈希冲突影响不大)。
**16、粗排和精排的区别?**
粗排是给几千篇笔记打分,单次推理代价很小,预估准确性不高,有截断;
精排是给几百篇笔记打分,单次推理代价很大,预估准确性更高,无截断。
**17、前期融合和后期融合的区别?分别适用什么场景?**
区别:前期融合是将所有特征串接一并输入神经网络(多目标排序模型),线上推理代价很大;后期融合是特征分别输入各自神经网络处理,得到各自处理结果最后再融合,线上推理代价很小。
场景:前期融合适用于精排,后期融合适用于召回。
**18、粗排使用的三塔模型结构?下层塔分别有什么大小关系?**
三塔模型介于前期融合和后期融合之间。下层分为用户塔、物品塔和交叉塔,分别对用户/场景特征、物品特征、统计/交叉特征进行处理,得到不同向量;上层将这些向量串接融合,分别输入不同指标的全连接层,最终输出指标结果,粗排推理绝大部分计算量在模型上层。
用户塔很大,一个用户只做一次推理;物品塔较大,利用缓存向量减少大部分推理;交叉塔较小,交叉特征是动态变化的,不能用缓存,必须每次做推理。
### 推荐系统公开课第四章:交叉结构+推荐算法实战第四章:精排(4.2)
**19、LR的基本原理?特点?**
LR是将输入和权重相乘,通过sigmoid函数输出。对类别特征而言,LR是非零输入对应的权重相加。
特点:LR强于记忆,将每个特征(主要是大众的,普遍的)的重要性(权重)牢牢记住,没有embedding和交叉作特征外延,无引申含义。
**20、FTRL原理的定性描述?损失之和如何定义?**
FTRL原理:为减少单个样本的随机抖动,第t步的最优参数不单单要最小化第t步的损失,而是让之前所有步的损失之和最小,在此基础上还增加正则项,即构成FTRL。
损失之和分为两项:第一项是前面t步的梯度向量之和与被前t条样本优化后的权重相乘;第二项是当前步被优化权重与历史权重之差的平方和,要求它们不能相差太远,以防损害对旧样本的拟合能力。
**21、FTRL是如何兼顾了预测精度和解的稀疏性的?**
预测精度:采用梯度累积的方式,防止单个样本的随机抖动,并为每个特征单独设置学习步长(特征出现频率与学习率成负相关)。
解的稀疏性:权重更新时设置了阈值λ,当梯度和权重计算的中间量z小于阈值时,权重会置零。
**22、FM的基本原理?空间上如何改进?**
FM对两个特征进行交叉,产生$w_{ij}x_ix_j$交叉项。由于n个特征交叉将引入n的平方个参数,因此将n×n矩阵拆分成两个n×k的矩阵相乘(其中一个为转置),k代表每个特征embedding的长度。于是,FM改进为 $(v_i^Tv_j)x_ix_j$。
**23、Wide&Deep的模型内容?**
Wide侧:处理普遍大众的特征,以及一些偏差特征(如位置偏差),利用LR计算。
Deep侧:将稀疏特征映射成稠密向量,通过DNN层得到输出结果。
Wide&Deep模型中,Deep是主力,Wide是辅助。
**24、DeepFM在Wide&Deep基础上做了什么改进?**
将Wide侧改为FM特征交叉,即模型由FM层和DNN层构成,FM和DNN的输入都是稠密的embedding向量。
**25、DCN交叉层的数学原理描述?如何做空间优化?**
原理:对向量$x_i$,将其进行Wx+b的操作后,与初始向量$x_0$按位相乘,并加上$x_i$,得交叉结果$x_{i+1}$。
空间优化:将n×n的W拆分成两个n×r的小矩阵。
**26、DCN-V2分为哪两个部分?两种不同的结构?**
分为交叉网络和DNN两个部分,两种结构为串联和并联。
**27、LHUC的基本原理?如何用于推荐系统的特征交叉?**
LHUC用于语音识别:将语音信号和说话者特征各自进行处理后相乘得到交叉向量,再将交叉向量和说话者特征相乘,以此不断交叉下去。
将语音信号、说话者的特征两个输入分别变成物品特征,用户特征,可用于推荐系统的特征交叉。
**28、SENet的模型内容?**
对m个特征进行embedding(长度可以不同),通过平均池化、非线性、全连接层等得到m个特征的权重,即每个特征的重要性,再将权重与对应embedding相乘得到新的向量作为结果,可以起到去噪的作用,可用于粗排和精排。
**29、双线性交叉的两种方式?**
内积:向量转置相乘;哈达玛乘积:向量对应位相乘。
**30、FiBiNet的模型结构?**
将SENet和双线性交叉进行结合,离散特征向量embedding以后分成三路,一路是直接串接,一路是双线性交叉,另一路是SENet+双线性交叉,三路向量串接融合,和连续特征一起输入上层神经网络进行后续处理。
### 推荐系统公开课第五章:用户行为序列建模+推荐算法实战第四章:精排(4.3)
**31、用户行为信息的构成有哪几个部分?**
每个视频ID的embedding组成的向量,观看该视频的时刻距离本次请求时刻的时间差,视频元信息(作者、来源、标签),动作程度(观看时长、完成度)等。
**32、简单平均的操作过程?适用模型?缺点?**
操作过程:对用户历史交互的LastN物品得到n个embedding向量,再对向量取平均表示用户特征。
适用模型:召回双塔模型、粗排三塔模型、精排模型。
缺点:简单平均提取出的兴趣是固定的,不会随候选物品的变化而变化。
**33、DIN模型的基本思想?内容?实现目标?适用模型?**
DIN利用注意力机制的思想,将用于精排的候选物品的向量作为查询,将用户历史交互的LastN物品作为键和值,依次计算候选物品与历史交互物品的相似度(查询-键的权重),再将相似度(权重)与对应LastN物品向量相乘,加权融合得到最终用户的行为特征。这种方法能实现用户的行为序列特征随候选物品的不同而改变,实现“千物千面”。
适用模型:DIN适用于精排模型,不适用于双塔、三塔模型,因为注意力机制要用到LastN+候选物品的融合,然而这两种模型用户塔和物品塔是解耦的。
**34、如何将双层attention用于DIN模型?**
在候选物品与历史交互物品attention之前,加一个自注意力机制模块,输入是用户历史交互的LastN物品原始向量,进入自注意力机制模块后输出的N个向量都融合了其它物料的信息,实现了特征交叉(类似autoint的原理),这里的self-attention可以用多头。
**35、DIN模型的缺点?SIM做了如何改进?**
缺点:建模的序列太短,容易有噪声;用户更早的交互行为可能对用户特征向量影响较大,而DIN将这类行为给忽略了,遗忘了用户的长期兴趣。
改进:SIM将用户历史交互的物品数量n变得很大(可以是几千),从这n个物品中选出k个相似物品作为注意力层的键/值输入,使得LastN变为TopK,实现了用户长期兴趣的关注和计算量的减少。
**36、选出k个相似物品的两种在线提取方式?维护的索引是否和主模型完全一致?**
硬搜索:根据候选物品的类目,在用户完整的长期历史序列中搜索与其有相同属性的历史物料。实际有数据库(如UBT)将用户长期行为序列缓存(用户ID-物料属性-物料属性对应的物品),所以只需在缓存中查找筛选。
软搜索:把候选物品向量作为query,做k近邻查找(也可用近似最近邻ANN),保留相似度最高的k个。实际是将物品的embedding存入向量数据库并建立索引,加速软搜索。
注意:离线索引中的embedding是另一套模型训练出来的,可能与推荐主模型不一致,且索引中的embedding更新频率不如主模型,所以会带来软搜索和SIM模型的差异。
**37、离线训练用户兴趣采用什么方式?简要原理?优缺点?**
采用双塔模型:一个塔用于提取用户长期兴趣,输入为用户A的画像和长期行为序列;另一个塔用于提取用户短期兴趣,输入为另一用户B的画像和短期行为序列。训练目标是鼓励同一用户的长短期向量相近(余弦相似度更大),不同用户的长短期向量较远(余弦相似度更小)。这种方式每天只需要更新一次即可,然后把用户兴趣向量存入数据库,预测时就拿用户的ID去数据库里检索得到用户兴趣向量。
优点:实现简单,耗时较少;缺点:得到的用户长期兴趣不会随候选物料变化。
### 推荐系统公开课第六章:重排
**38、如何基于物品属性标签度量相似度?**
由CV、NLP算法推断出类目、品牌、关键词等信息,再根据这些类目、关键词等设置的权重,加权计算总的相似度。
**39、基于物品向量表征衡量相似度中,学习物品向量有哪两种方式?各自特点?哪种更好?**
用召回的双塔模型学习物品向量,问题在于对新物品/长尾物品的学习效果不好。
根据CV、NLP模型提取出文字和图片的向量作为向量表征,思想是对于图片-文本二元组,预测图文是否匹配。优势是无需人工标注,且大部分笔记图文相关,这种方法优于双塔模型学习物品向量。
**40、重排在推荐系统链路中的位置?思想是什么?**
重排在精排给几百个物品打分之后,其思想在于保证被推荐物品的多样性。对于精排的几百个物品,既要考虑它们的打分,也要考虑物品之间的相似度,从而选出曝光的k个物品以及曝光顺序。
**41、简述MMR多样性算法的流程?**
设已选中物品的集合为S(一开始为空),未选中的物品集合为R;从R中选择精排分数最高的物品移到S,再计算集合R每个物品的MR分数(与它的精排分数和它与集合S中的物品的最大相似度有关,利用θ给两个因素分配权重,最大相似度一项起抑制作用),选择最大的MR作为MMR,对应物品从R移动到S;对上述操作进行k-1轮循环,结束后即可得到k个物品,每次MR和MMR都要重新计算。
**42、MMR计算的问题?如何解决?**
问题:当选中的物品越多(集合S越大),越不容易找出物品i,使得它与S中的物品都不相似,即最大相似度总是约等于1,导致MMR算法失效。
解决方法:引入滑动窗口,原本计算最大相似度的集合为S,现在改为滑动窗口对应集合W,表示最近选中的若干个物品。
**43、重排有哪些规则?如何将这些规则应用到MMR算法中?**
规则:(1)最多连续出现k篇同类型笔记(图文、视频);(2)每k篇笔记最多出现1篇某种笔记(如每9篇笔记中最多只能出现1篇运营推广笔记);(3)前t篇笔记最多出现k篇某种笔记(如前4篇笔记最多出现1篇带电商卡片的笔记)。
方式:重排结合MMR与规则,每轮先根据上述规则排除R中的部分物品,再对排除后的集合应用MMR公式。
**44、DPP的目标?利用其作为多样性衡量的依据?超平行体的体积和物品向量构成的行列的关系?**
目标:从集合中选出多样的物品,考虑选出物品集合的多样性。
依据:利用超平行体的体积衡量物品多样性,给定k个物品及其向量(单位化),如果这些向量两两正交,此时体积最大化,物品多样性好;如果向量之间线性相关,此时体积最小化,物品多样性差。
关系:超平行体的体积平方=det(物品向量构成的矩阵转置×它本身)。
**45、简述DPP多样性算法的流程?**
先精排给n个物品打分,从n个物品中选出k个物品组成集合S,保证精排分数之和越大越好,且k个向量组成的超平行体的体积越大越好。将选中的物品集合设为S,未选物品集合为R,每次从R中选出物品i加入S,在i的精排分数和加入S后超平行体的体积(即行列式一项)之间分配权重,每次要使求解公式值最大,进行k次循环即可选出k个物品作为重排结果。
**46、Hulu快速算法如何加快行列式的计算速度?**
可将行列式一项变成$A_{S∪{i}}$。它是在矩阵$A_S$基础上多一行和一列,计算该矩阵行列式时,可以利用Cholesky分解:有$A_S=LL^T$,其中L为下三角矩阵(对角线以上元素全为0)。每次多一行和一列时Cholesky分解情况变化不大,这样算行列式就会非常方便,减少运算。
**47、DPP如何结合滑动窗口和规则约束?**
当S集合中的物品越来越多时,行列式一项将趋近于0,导致DPP算法效果不好。于是将S变为滑动窗口集合W代表最近的若干个物品;以及在加入物品到S前,先从R中把不符合要求的物品排除,再从排除后的集合中选择物品加入S。
================================================
FILE: 推荐系统八股160问/4. 冷启动.md
================================================
# 冷启动
**1、什么是物品冷启动?冷启动的两种类型?哪种更复杂?**
物品冷启动:针对新发布的笔记和视频;分为用户上传的内容UGC和平台采购的PGC;UGC更复杂,物品质量差异更大。
**2、为什么要特殊对待新笔记?**
可以促进作者发布,增加作者发布笔记的动力,进而增大内容池;挖掘优质笔记,让每篇新笔记得到足够曝光。
**3、优化冷启动的目标?**
精准推荐:把新笔记推荐给合适用户;激励发布:流量向低曝光新笔记倾斜,激励作者发布;挖掘高潜:通过初期的流量试探,给每篇新笔记曝光机会,找到高质量笔记给予流量倾斜。
**4、作者侧的两大指标含义?反映了什么?**
发布渗透率=当日发布人数/日活人数,即每天发布笔记的作者比例;
人均发布量=当日发布笔记数量/日活人数,即平均每个人当日发表多少篇笔记。
作者侧指标反映了作者发布积极性,低曝光新笔记扶持越好,作者侧指标越高。
**5、用户侧的两类指标?反映了什么?大力扶持低曝光新笔记会发生什么?**
新笔记消费指标:新笔记的点击率、交互率。
大盘消费指标:消费时长、日活、月活。
大力扶持低曝光新笔记,作者侧发布指标变好,用户侧大盘消费指标变差。因为低曝光笔记缺乏用户交互,推荐不准,大力推荐这些笔记会使用户体验下降。
**6、内容侧指标指的是什么?**
内容侧指标指的是高热笔记占比(30天超过1000点击的笔记),高热笔记占比越高,冷启动阶段挖掘优质笔记的能力越强。
**7、冷启动的两大优化点?**
优化全链路:包括召回、排序,保证低曝光/新发布笔记能正常走完链路,且能被准确推荐;
流量调控:如何在新物品、老物品中分配流量。
**8、冷启动召回的难点?**
新笔记包含图片、文字、地点等信息,但缺乏用户交互信息,导致物品ID embedding没学好,进而使双塔模型效果不好,且ItemCF不适用。
**9、冷启动召回可以从哪些方面改进?**
双塔模型召回、类目和关键词召回、聚类召回、Look-Alike召回。
**10、如何对双塔模型进行改进,从而有利于冷启动?**
(1)新笔记使用default embedding,共享一个向量,default embedding是学习出来的;(2)查找topk个内容最相似的高曝光笔记,将它们的embedding取平均,作为新笔记的embedding;(3)采用多召回池(设置笔记的不同时限,如1小时内,5小时内等)让新笔记有更多曝光机会。
**11、类目/关键词召回的原理?有什么缺点?**
系统维护类目/关键词→笔记列表的索引,笔记列表中的笔记是按时间倒排的。根据用户画像中感兴趣的类目以及关键词,取对应笔记列表中最新的k篇笔记,作为召回结果。
缺点:只对刚刚发布的新笔记有效,过期限后就没法被召回;且根据类目/关键词做召回太宽泛,不够具体,缺乏个性化。
**12、聚类召回的基本思想?实现聚类的具体步骤?维护索引?**
基本思想:如果用户喜欢一篇笔记,那么他会喜欢内容相似的笔记。
具体步骤:采用k-means聚类法,根据笔记的类目和图文内容,把笔记映射成向量,对这些向量做聚类,划分为1000个cluster,记录每个cluster的中心方向。当一篇新笔记发布以后,将它映射成一个向量,从1000个cluster对应的向量中选择最相似的一个,作为新笔记的cluster。
维护索引:cluster→笔记ID列表(按时间倒排),召回时选择列表前几篇笔记。
**13、聚类进行线上召回的步骤?缺点?**
步骤:(1)给定用户ID,找到他的last-n交互的笔记列表,把这些笔记作为种子笔记;(2)把这些种子笔记映射到向量,寻找最相似的n个cluster;(3)从这些cluster中各取出最新的m篇笔记,因此最多取出mn篇新笔记。
缺点:只对刚刚发布的新笔记有效。
**14、聚类召回的训练步骤?如何选取正负样本?**
训练步骤:选择种子笔记和正负样本笔记求解余弦相似度,鼓励种子笔记和正样本相似度接近于1,和负样本相似度接近-1,采用Pairwise loss(triplet hinge loss或triplet logistic loss)训练。
正样本:算法选择高曝光/相同二级类目的笔记作为正样本,也可以利用ItemCF中的物品相似度选择正样本;负样本:随机选出字数较多(神经网络提取出的文本信息有效),笔记质量高的(避免图文无关)作为负样本。
**15、Look-Alike召回的基本思想?具体步骤?**
基本思想:考虑的是用户之间的相似度。把和新笔记有交互的用户作为新笔记的种子用户,若一个用户可能和种子用户相似,就用Look-Alike把新笔记在这些相似用户中扩散,两个用户的相似度用UserCF或用户ID embedding求余弦相似度得到。
具体步骤:将与新笔记交互的用户向量平均,作为新笔记的特征向量,每当有用户交互该笔记,就将它的特征向量更新,然后存入数据库中。每次将用户向量作为query在数据库中做查找,将相似度最高的几十个向量对应笔记给用户推送。
**16、流量调控有哪些技术?**
(1)在推荐结果中强插新笔记;(2)对新笔记的排序分数做提权;(3)通过提权,对新笔记做保量,保证新笔记的曝光达到一定数量;(4)差异化保量。
**17、新笔记提权的方式?提权的缺点?**
方式:在粗排和重排环节,对新笔记提权,使其占比和分数大幅提升。
缺点:曝光量对提权系数很敏感,不易精确控制曝光量,容易过分曝光或不充分曝光。
**18、新笔记保量的内容?方式?**
内容:不论笔记质量高低,都保证前24小时获得100次曝光。
方式:在原有提权系数的基础上,乘以额外的提权系数,发布时间越长,当前曝光次数越少,提权系数越高。
**19、新笔记保量的难点?给新笔记分数提权越多,是否对新笔记越有利?**
难点:由于提权系数调整较难,以及召回、排序存在不足等问题,保量成功率远低于100%;且线上环境变化(召回通道、排序模型、重排规则等)会导致保量失败。
给新笔记分数提权越多,会使新笔记曝光次数越多,但会把笔记推荐给不合适的受众,导致互动指标降低,被推荐系统打压,难以成为热门笔记。
**20、差异化保量的内容?具体做法?**
内容:不同笔记有不同的保量目标,普通笔记获得100次曝光,优质笔记获得100-500次曝光。
做法:先让笔记获得基础保量,即24小时100次曝光,再根据笔记内容的质量高低,和作者历史笔记的质量高低,给予额外保量,上限分别是200次曝光。
**21、冷启动用户侧AB测试方法?缺点?推全后diff缩小的原因?**
方法:将用户侧分为50%的实验组和50%的对照组,实验组采用新策略,将新笔记权重增大两倍,从而使实验组用户看到更多新笔记,对照组采用原策略,考察新笔记的CTR和用户消费时长的diff。
缺点:观测的结果是消费指标会变差,AB测试的diff是负数,这是因为新笔记虽然曝光变多,但曝光不精准,带来用户使用app时长贬低,体验变差。
推全后diff缩小的原因:推全后会面向更多用户群体,新笔记曝光更有可能获得用户的点击、点赞、收藏等。
**22、冷启动作者侧AB测试的三种方案简述?各自的缺点?**
方案一:用户侧100%用户面向100%的老笔记和两种策略的新笔记,新笔记分为50%的实验组和50%的对照组,实验组采用差异化保量,新笔记权重增大两倍,对照组用简单保量。缺点:(1)新笔记之间会抢流量;(2)新笔记会抢老笔记流量。最终导致推全后diff会减小甚至消失。
方案二:将用户侧分为50%实验组和50%对照组,实验组用户面向新笔记中50%的实验组(差异化保量),对照组用户面向新笔记50%的对照组(正常保量),避免了新笔记之间抢流量的问题。缺点:(1)新笔记会抢老笔记流量;(2)新笔记内容池减少一半,需要从差一点的笔记中选一半补上来,影响用户体验,消费指标下降。
方案三:在方案二的基础上把老笔记也分为50%的实验组和50%的对照组,实现老笔记、用户侧、新笔记实验组和对照组的50%-50%-50%对应。这种方式就像把app切成两半,消费指标会大跌。
================================================
FILE: 推荐系统八股160问/5. 涨指标的方法.md
================================================
# 涨指标的方法
**1、推荐系统最核心的两个指标?简要解释留存的含义?其它核心指标和非核心指标?**
最核心的两个指标:日活用户数和留存。
留存的含义:以LT7为例,它代表的是某用户今天登录APP,未来7天有4天登录APP,那么该用户今天的留存LT7为4。留存通常是所有用户LT的平均,它的增长通常意味着用户体验提升,但阅读数、曝光数可能会下降。
其它核心指标:用户使用时长、总点击数、总曝光数、发布量、发布渗透率等;非核心指标:点击率、交互率等。
**2、简述涨指标有哪些方法?**
(1)改进或增加召回模型;(2)改进排序(粗排和精排)模型;(3)提升召回、粗排、精排的多样性;(4)特殊对待新用户,低活用户人群;(5)利用关注、转发、评论三种交互行为。
**3、简述如何改进召回模型?**
改进召回模型,从双塔模型和item-to-item两大最重要的模型入手,也可以添加某些召回模型和内容池(按时限划分),得到多条召回通道。
**4、双塔模型的改进方向有哪些?**
(1)优化正负样本的选取:简单正样本、简单&复杂负样本;(2)改进神经网络结构(实际不提倡):如用户塔、物品塔的全连接网络用DCN代替,在用户塔中采用用户行为序列(通常要离线训练和储存),使用多向量模型等;(3)改进模型训练方法:如batch内负采样(要纠偏),采用自监督学习方法等。
**5、item-to-item的常见变体有哪些?**
U2I2I(物品间的相似)、Swing(考虑小圈子因素)、U2U2I(用户间的相似)、U2A2I(考虑用户感兴趣的作者)、U2A2A2I(考虑作者间的相似)等。
**6、如何改进精排模型?**
基座部分(特征神经网络处理部分):将基座加宽加深,增加预测准确性;做特征交叉,如bilinear、LHUC等;特征工程,如添加统计/多模态内容特征。
多目标预估部分:增加新的预估目标;使用MMoE、PLE等结构、引入偏差特征的处理模块。
**7、如何改进粗排模型?这种方法的缺点?**
采用粗精排一致性建模,让粗排和精排更一致,能提升核心指标:(1)pointwise蒸馏:设y为用户真实行为,p为精排预估,将(y+p)/2作为粗排拟合目标;(2)pairwise/listwise蒸馏:粗排阶段做LTR,去拟合物品精排的排序,若排序和精排不同则给予惩罚。
缺点:如果精排出问题,会对粗排的训练和预测带来影响。
**8、如何对用户行为序列建模方式改进?**
(1)增加序列长度(SIM);(2)用类目、物品向量表征聚类,线上排序时保留候选物品对应聚类序号的物品;(3)对行为序列中的物品,使用ID以外的一些特征。
**9、在线学习指的是哪种更新?资源消耗和额外算力情况?**
在线学习,即增量更新。每天既要在凌晨做全量更新,也要不间断做增量更新,因此需要额外算力。如果线上有m个模型,则需要m套在线学习的机器。其中1个是holdout,1个是推全模型,剩下m-2个即为测试新模型。在线学习对指标提升很大,但会降低模型迭代升级效率。
**10、老汤模型的内容?如何判断新模型结构优于老模型?如何更快追平、超过线上老模型?**
内容:每天新产生的数据对模型做1 epoch训练,久而久之,老模型训练的非常好,很难被超过。
判断新模型优于老模型,只需要判断新老模型谁的结构更优,新模型的全连接层和embedding层可以采用老模型相同的参数,用n天的数据训练新老模型,如果新模型显著优于老模型,新模型很可能更优。
要追平、超过线上老模型,可以尽量多复用老模型训练好的embedding层,避免随机初始化;也可以用老模型做teacher,蒸馏新模型(真实行为y,老模型预测p,新模型用(y+p)/2作为训练目标)。
**11、如何提升精排多样性?**
结合兴趣分数和多样性分数对物品排序,常用方法是MMR、DPP,并结合滑动窗口和打散规则。
**12、如何提升粗排多样性?**
将粗排打分的几千个物品,选择分数最高的几百个物品送入精排,剩余物品计算兴趣分数和多样性分数再进行排序,再选出几百个物品送入精排,实现最终精排有这两个部分。
**13、提升召回多样性的两种模型?对应方式?**
双塔模型:(1)添加噪声:线上召回计算出用户向量之后,在ANN检索之前往用户向量中添加随机噪声,用户兴趣越窄,添加噪声更强,使得召回的物品更多样。(2)抽样用户行为序列:将用户最近交互的n个物品,保留最近的r个,再从n-r个物品中随机抽样t个,将r+t作为用户行为序列。这种方式可以注入随机性,且n可以非常大,得到用户很久以前的兴趣。
U2I2I:选出用户最近交互的n个物品之一,可能得到的类目数量很少。因此做非均匀随机采样,从n个物品(n可以很大)中选出t个让类目平衡。
**14、探索流量的内容?具体做法?依据是什么?**
内容:每个用户曝光物品有2%是非个性化的,做兴趣探索。
具体做法:维护一个精选内容池,里面的物品均为交互指标高的优质物品,从这个池中随机抽样几个物品,跳过排序,直接插入作为排序结果。
依据:用户个性化欠缺,就要通过提升物品质量来吸引用户,用高质量弥补个性化的损失,这样短期对核心指标会有负向影响,长期会带来正面影响。
**15、为什么要特殊对待特殊人群?**
(1)新用户、低活用户行为很少,个性化推荐不准确;(2)新用户、低活用户容易流失,要想办法促使他们的留存;(3)特殊用户的交互行为和主流用户有差异,用主流用户训练出的模型在他们身上有偏差。
**16、构造特殊内容池的目标?方式?**
目标:用于特殊人群的召回,保证内容质量好,提升用户满意度。
方式:(1)先圈定人群,然后用该人群对物品交互次数、交互率打分,选出分数最高的物品进入内容池。内容池要定期更新加入新物品,排除交互率低和失去时效性的老物品。(2)判断物品对人群留存率的贡献,根据贡献值选择物品。
**17、构建特殊内容池召回的模型?会带来哪些额外代价?**
模型:双塔模型。注意对于新用户而言,双塔模型个性化不准确,所以要高质量内容来弥补。
额外代价:(1)训练代价:正常用户不论多少个内容池,都只训练一个双塔模型,而新用户需要单独训练模型;(2)推理代价:内容池要定期更新,ANN索引也要更新,然而特殊内容池比较小,额外算力不大。
**18、如何使用特殊排序策略?**
(1)排除低质量物品:新发布物品不在新用户、低活用户上做探索,只在活跃的老用户上做探索,防止推荐不准损害新用户、低活用户的体验;(2)差异化融分公式:改变指标(如点击率)的权重,或直接保留该指标最高的几个物品,甚至直接把指标最高的物品放在第一位给用户推荐。
**19、使用特殊排序模型的方法有哪些?**
大模型+小模型:用全体用户训练大模型,大模型的预估p拟合用户真实行为y;再用特殊用户训练小模型,小模型的预估q拟合大模型残差y-p(类似GBDT),起到大模型纠偏的作用。主流用户只用大模型预估p,特殊用户用大模型和小模型预估p+q。
融合多个experts:用多个experts输出向量,再根据用户特征(新老、活跃度等)输出权重,对experts加权平均。
**20、关注和留存率的关系?**
关系:关注作者数量和留存率成正相关,关注的作者越多,该平台对他的吸引力越强。关注的作者少,就需要促使用户关注更多作者。
**21、如何利用关注行为提升留存和发布?**
提升留存:(1)优化排序策略:定义单调递减函数w(f),用户关注作者越少,该函数越大。将该函数与对某物品的关注率p相乘,实现促进用户对该物品作者的关注;(2)构造促关注内容池和召回通道:物品关注率高,能促进作者的关注。当用户关注作者数少时,对该用户使用该内容池。
提升发布:作者粉丝数越少,则每增加一个粉丝对发布积极性的提升越大。定义单调递减函数w(f),f为粉丝数量。将该函数与作者发布的物品关注率p相乘,帮助低粉作者涨粉。
**22、显式关注和隐式关注的含义?挖掘隐式关注的意义?**
显式关注:用户u关注了作者a,将a发布的物品直接推荐给u;
隐式关注:用户u喜欢看作者a发布的物品,但u未关注a。
隐式关注的作者数量远大于显式关注,挖掘隐式关注关系,构建U2A2I召回通道,可以提升推荐系统核心指标。
**23、如何利用转发提升推荐系统指标?目标是什么?识别方式?具体方法?**
简单提升转发次数,让转发率大的物品更容易获得曝光机会,但这样会负面影响交互情况,因此可采用KOL建模。
目标:不损害点击和其它交互的前提下,尽量多吸引站外流量,其它平台KOL(大V)转发的内容吸引流量更大。
识别方式:考察该用户历史转发能带来多少站外流量,例如转发到抖音的流量高,则可判断他可能是抖音的KOL。
具体方法:(1)在物品i的转发率p基础上乘一个k,如果用户在其它平台是KOL,则k更大,从而提升该用户发表的物品在本平台的流量,提升大盘指标;(2)也可以构造促转发内容池和召回通道,对站外KOL生效。
**24、评论的发布价值和留存价值?高质量评论的作用?**
发布价值:新物品获得评论能提升作者发布积极性,当新物品尚未获得很多评论时,则给预估评论率提权。
留存价值:给喜欢留评论和与作者互动的用户添加促评论内容池,促进他们在平台的互动和参与度,有利于提升用户留存。
高质量评论的作用:对作者、其他用户的留存有贡献,推荐系统常鼓励高质量评论用户多留评论。
gitextract_exbncxcg/
├── README.md
└── 推荐系统八股160问/
├── 1. 推荐系统基础.md
├── 2. 召回.md
├── 3. 排序.md
├── 4. 冷启动.md
└── 5. 涨指标的方法.md
Condensed preview — 6 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (74K chars).
[
{
"path": "README.md",
"chars": 108,
"preview": "# 推荐系统八股160问\n\n总结了推荐系统相关的160个问题,包括基础知识,召回,排序,冷启动,涨指标的方法。知识来源于王树森《推荐系统公开课》和赵传霖《互联网大厂推荐算法实战》部分知识。 如有错误和漏洞敬请指正!\n"
},
{
"path": "推荐系统八股160问/1. 推荐系统基础.md",
"chars": 2038,
"preview": "# 推荐系统基础\n\n**1、推荐系统的转化流程是什么?**\n\n先曝光,后点击,点击以后分为滑动到底+评论,点赞,收藏,转发四种(抖音没有曝光和点击)\n\n**2、推荐系统的短期消费指标?**\n\n点击率、点赞率、收藏率、转发率,点击率是点击次数"
},
{
"path": "推荐系统八股160问/2. 召回.md",
"chars": 11028,
"preview": "# 召回\n\n**1、基于物料属性的召回过程?**\n\n离线时按把相同属性的物料集合起来,构成属性-物料的map结构,线上提取用户喜欢的标签、关注的作者等信息,在map中检索返回相应物料。\n\n**2、ItemCF的原理?如何计算用户对物品的兴趣"
},
{
"path": "推荐系统八股160问/3. 排序.md",
"chars": 7480,
"preview": "# 排序\n\n### 推荐系统公开课第三章:排序+推荐算法实战第二章:特征工程\n\n**1、多目标排序模型可以有哪些指标?最终排序的依据?针对的排序类型?**\n\n指标:点击率、点赞率、收藏率、转发率等,最终是将每个指标得到的分数加权融合得到总分"
},
{
"path": "推荐系统八股160问/4. 冷启动.md",
"chars": 3423,
"preview": "# 冷启动\n\n**1、什么是物品冷启动?冷启动的两种类型?哪种更复杂?**\n\n物品冷启动:针对新发布的笔记和视频;分为用户上传的内容UGC和平台采购的PGC;UGC更复杂,物品质量差异更大。\n\n**2、为什么要特殊对待新笔记?**\n\n可以促"
},
{
"path": "推荐系统八股160问/5. 涨指标的方法.md",
"chars": 3958,
"preview": "# 涨指标的方法\n\n**1、推荐系统最核心的两个指标?简要解释留存的含义?其它核心指标和非核心指标?**\n\n最核心的两个指标:日活用户数和留存。\n\n留存的含义:以LT7为例,它代表的是某用户今天登录APP,未来7天有4天登录APP,那么该用"
}
]
About this extraction
This page contains the full source code of the Wzy1007007/recommend-system-knowledge-summary GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 6 files (27.4 KB), approximately 19.6k tokens. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.