推荐算法笔记

1.介绍下推荐系统的流程:
召回 -> 排序(对召回结果进行精排)-> 补充策略与算法层(兼顾结果的“多样性”,“流行度”,“新鲜度”等指标,结合一些补充策略和算法对推荐列表进行调整)

2.召回和排序比较大的差异点:
召回层的特点是:数据量大、速度响应快、模型简单、特征较少。 排序层的特点是:数据量少、排序精准、模型复杂、特征较多。

3.了解双塔模型吗:
用于推荐系统的召回or粗排环节。分为用户塔和物品塔,两个塔的参数不共享,将User特征和Item特征分别输入到特征提取网络(比如说DNN等)得到User Embedding和Item Embedding, 之后我们可以计算这两个Embedding之间的余弦距离, (用户点击过的Item其距离更近,用户没有点击过或者讨厌的Item其距离更远)。之后利用算得的loss来更新模型的参数。模型训练好后,我们可以离线将所有的Item通过Item塔得到其向量,并将Item向量保存在FAISS(一种向量检索工具)中。当来了一个用户后,我们首先利用User塔计算得到其用户向量,之后拿用户向量去FAISS中和Item向量进行相似度计算,并返回距离最近的Top K个Item作为个性化的召回结果。

4.为啥排序会比召回的结果要准呢?
用到的模型更复杂,特征更多

5.了解到的召回策略有哪些?
1.协同过滤 2.向量化召回
具体参考https://wenku.baidu.com/view/f21101fe7c192279168884868762caaedd33ba63.html

6.DIN模型的attention与score:

7.多路召回和embedding召回:

8.推荐系统冷启动问题,怎么解决?
基于流行度的召回,收集喜好的机制

9.AUC如何快速运算 不一致的情况怎么处理?
https://blog.csdn.net/ustbbsy/article/details/107025087
线上线下效果不一致,大概率是由线上线下预估环境不一致引起。 预估环境,一般涉及2个要素:模型和特征。 可参考 https://www.bilibili.com/read/cv16361867/

10.word2vec,及负采样训练方法?
经典的embedding方法。一种高效训练词向量的模型.上下文相似的两个词,它们的词向量也应该相似,比如香蕉和梨在句子中可能经常出现在相同的上下文中,因此这两个词的表示向量应该就比较相似.
负采样方法只需对采样出的负样本计算预测误差,这样word2vec的模型的优化目标从一个多分类问题退化成了一个近似二分类问题,每次更新的参数大大减少,加快了训练速度。

11.XGboost如何做特征筛选?和GBDT异同,提升在哪?

12召回模型:
规则召回(兴趣标签top,热门top,新品top等)
协同召回(基于用户的协同过滤,基于商品的协同过滤)
向量召回(FM召回,Item2vec,Youtube DNN向量召回,Graph Embedding召回,DSSM双塔召回)

13.双塔模型优势,缺点,如何改进?
双塔模型的优势是速度快,但模型精度还有待提升。
速度快是因为将所有Item转化成Embedding,并存储进ANN检索系统,比如FAISS,以供查询。类似FAISS这种ANN检索系统对海量数据的查询效率高。
而双塔模型为了速度快,必须对用户和Item进行特征分离,而特征分离,又必然导致上述两个原因产生的效果损失。
改进:SENet双塔模型,把SENet放在Embedding层之上,目的是通过SENet网络,动态地学习这些特征的重要性:对于每个特征学会一个特征权重,然后再把学习到的权重乘到对应特征的Embedding里,这样就可以动态学习特征权重,通过小权重抑制噪音或者无效低频特征,通过大权重放大重要特征影响的目的。

14.粗排的目的是什么?
粗排的任务就是要找到包含这10个item的一个更小的候选集,既保证了效果,又减少线上预测的负担。

15.wide&deep模型 为什么要有wide层结构,优缺点,如何改进?
一种混合模型,Wide部分让模型具有较强的记忆能力,Deep部分让模型具有泛化能力,兼具了逻辑回归和DNN的优点。Wide部分会进行交叉积变换,可以在二值特征中学习到组合特征,并且为模型增加非线性。
优化器:Wide使用FTRL(Follow-the-regularized-leader) + L1正则化学习;Deep部分使用AdaGrad(自适应学习率优化算法),Wide和Deep部分的输出通过加权方式合并到一起,并通过logistic loss function进行最终输出。Deep部分使用的特征:连续特征,Embedding后的离散特征,Item特征。Wide部分使用的特征:Cross Product Transformation生成的组合特征

16.deepfm中的fm怎么做的?
相比于Wide&Deep,把wide部分替换为了fm,加强了特征组合能力。
Deep部分就是将所有Field的Embedding向量,拼接起来作为神经网络的输入。
https://blog.csdn.net/Jeremiah_/article/details/120740877
linear_logits: 这一块主要是针对连续特征和离散特征,将连续特征和离散特征的onehot编码组成一维向量(实际应用中根据自己的业务放置不同的一阶特征),最后计算FM的一阶特征(即FM的前半部分 1 1+ 2 2… + 的线性计算)的logits值
fm_logits: 这一块主要是针对离散特征,首先过embedding,然后使用FM特征交叉的方式(只考虑两两特征进行交叉)得到新的特征向量,最后计算FM的二阶交叉特征的logits值
dnn_logits: 这一块主要是针对离散特征,首先过embedding,然后将得到的embedding拼接成一个向量,通过dnn学习特征之间的隐式特征交叉,最后计算DNN的高阶交叉特征的logits值

17.推荐领域GBDT + LR的做法了解吗?
GBDT+LR 由两部分组成,其中GBDT用来对训练集提取特征作为新的训练输入数据,LR作为新训练输入数据的分类器。
GBDT+LR的提出意味着特征工程可以完全交由一个独立的模型来完成,模型的输入可以是原始的特征向量,不必在特征工程上投入过多的人工筛选和模型设计的精力,真正实现了端到端的训练。

18.ROC,PR曲线含义,坐标轴代表什么?
ROC曲线以真正例率TPR为纵轴,以假正例率FPR为横轴,在不同的阈值下获得坐标点,并连接各个坐标点,得到ROC曲线。
PR曲线中的P代表的是Precision(精准率),R代表的是Recall(召回率),其代表的是精准率与召回率的关系,一般情况下,Precision设置为纵坐标,将Recall设置为横坐标。

19.如果在模型中加入了一个特征,怎么判断这个特征是有效的,可以从哪些指标来衡量:
皮尔逊系数和互信息系数(ch啊看特征和label的):用来衡量两个特征变量之间的关联程度。

20.为什么分类问题损失不使用MSE而使用交叉熵
在使用最小均方差Loss时,模型参数w会学习的非常慢。
https://zhuanlan.zhihu.com/p/104130889

21.双塔等向量化召回与协同过滤的区别?
1.协同过滤:基于统计
2.向量化召回:将召回建模成在向量空间内的近邻搜索问题

22.sigmoid和softmax的区别?
softmax的计算的是一个比重,而sigmoid只是对每一个输出值进行非线性化。
梯度消失带来的影响,靠近输入层的参数几乎不能被更新,靠近输入层的layer预测结果不准确,产生对整个后面的影响,最后无法训练。

23.L1正则和L2正则区别?
L1是模型各个参数的绝对值之和。
L2是模型各个参数的平方和的开方值。
L1会趋向于产生少量的特征,而其他的特征都是0。(参数的稀疏,在一定程度上实现了特征的选择。一般而言,大部分特征对模型是没有贡献的。这些没有用的特征虽然可以减少训练集上的误差,但是对测试集的样本,反而会产生干扰。稀疏参数的引入,可以将那些无用的特征的权重置为0)
L2会选择更多的特征,这些特征都会接近于0。(L2避免过拟合的原理是:让L2范数的规则项||W||2 尽可能小,可以使得W每个元素都很小,接近于零,但是与L1不同的是,不会等于0;这样得到的模型抗干扰能力强,参数很小时,即使样本数据x发生很大的变化,模型预测值y的变化也会很有限。)
在实际使用中,如果特征是高维稀疏的,则使用L1正则;如果特征是低维稠密的,则使用L2正则。

24.多分类损失函数有哪些?
交叉熵(待补充)

25.为什么逻辑回归需要先对特征离散化?
1.离散化后可以进行特征交叉,由M+N个变量变为M*N个变量,进一步引入非线性,提升表达能力。
2.特征离散化以后,起到了简化了逻辑回归模型的作用,降低了模型过拟合的风险。

26.UserCF的缺点:
1.需要维护用户相似度矩阵,只适合用户数量较少的场景。(而很多互联网场景下用户数十分巨大)
2.用户的历史数据向量往往很稀疏,找到相似用户的准确率并不高,不适合正反馈难获得的场景(如酒店预定、大件商品购买等低频率行为)
3.具有社交性质,适合于新闻推荐这种兴趣点发散的场景

27.ItemCF:
1.根据用户X物品(mXn)这个共现矩阵,计算得到nXn的物品相似度矩阵,再获取用户正反馈的物品列表,利用物品相似度矩阵,根据正反馈物品,得到相似度TopK的物品,产生推荐。
2.适合有稳定兴趣的场景,如亚马逊电商,用户在一段时间内倾向于找一类商品。

28.LR的优缺点:
1.简单直观易用,可解释性强
2.表达能力不强,无法进行特征交叉、特征筛选等操作,不可避免地造成信息损失。

29.FM相比于POLY2的改进:
引入了特征隐向量(为每一个特征学习一个隐权重向量),特征交叉时,使用两个隐权重向量的内积作为交叉特征的权重,把POLY2n方级别的权重参数降低到了nk(k为隐向量维度),FM的训练复杂度也降低到了nk,降低了训练开销。证明见(https://blog.csdn.net/xfxlesson/article/details/115314769)
隐向量的引入更好地解决了特征稀疏性的问题。

30.FFM(特征域感知因子分解机)相比于FM:
每个特征对应的不是唯一一个隐向量,而是一组。当Xj1特征和Xj2特征交叉时,Xj1特征会从他的一组隐向量中挑选出与特征Xj2的域f2对应的隐向量Wj1,f2进行交叉。同理,Xj2特征会从他的一组隐向量中挑选出与特征Xj1的域f1对应的隐向量Wj2,f1进行交叉。、
域是指特征域,域内的特征一般是采用one-hot编码形成的一段one-hot特征向量。例如,用户的性别分为男、女、未知三类,那么对一个女性用户来说,采用one-hot 方式编码的特
征向量为[0,1,0],这个三维的特征向量就是一个“性别”特征域。将所有特征域连接起来,就组成了样本的整体特征向量。

31.GBDT+LR:
FFM只能做到二维交叉,如果继续提高交叉维度,会组合爆炸。利用GBDT自动进行特征筛选和组合,进而生成新的离散特征向量,再把该特征向量当作LR模型的输入。GBDT构建特征工程和LR预估CTR是独立的,因此不存在LR的梯度回传到GBDT这种问题。

32.关于embedding:
embedding就是用低纬稠密向量表示一个对象。视频推荐往往使用用户的观看序列进行电影的embedding化,电商平台则会使用用户的购买历史作为训练样本。
经典方法:Word2vec:CBOW(连续词袋模型),认为每个词都是由相邻的词决定的。Skip gram(跳字模型),认为每个词都决定了相邻的词,输入矩阵每一行即为“词向量”。
Item2vec:Word2vec在推荐系统领域的推广,理论上可以使用任何序列型数据生成物品的embedding向量。
预训练:为了解决“Embedding层训练开销巨大”的问题,Embedding的训练往往独
立于深度学习网络进行。在得到稀疏特征的稠密表达之后,再与其他特征–起输
人神经网络进行训练。典型的采用Embedding预训练方法的模型是FNN模型。它将FM模型训练得到的各特征隐向量作为Embedding层的初始化权重,从而加快了整个网络的收敛速度。

你可能感兴趣的:(推荐算法,python,算法)