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、评论的发布价值和留存价值?高质量评论的作用?** 发布价值:新物品获得评论能提升作者发布积极性,当新物品尚未获得很多评论时,则给预估评论率提权。 留存价值:给喜欢留评论和与作者互动的用户添加促评论内容池,促进他们在平台的互动和参与度,有利于提升用户留存。 高质量评论的作用:对作者、其他用户的留存有贡献,推荐系统常鼓励高质量评论用户多留评论。