推荐系统 百面百搭 —— 1~11
作者简介
作者:Rulcy
原文:https://zhuanlan.zhihu.com/p/422464069
转载者:杨夕
推荐系统 百面百搭地址:
https://github.com/km1994/RES-Interview-Notes
NLP 百面百搭地址:
https://github.com/km1994/NLP-Interview-Notes
个人笔记:
https://github.com/km1994/nlp_paper_study
前言
本文是对之前总结的48个面试题做一个归类与总结,方便后续的大佬们自行学习与查漏补缺。主要包括五个部分:机器学习/深度学习基础;深度学习/机器学习进阶;推荐系统(模型相关);推荐系统(业务相关);其它。
文末给出总结的面试题链接,方便大家查找。
喜欢作者可以点个关注,之后还会发布有质量的文章!
Q1: 线下提升线上效果不好。
A: 原因是多样的,主要原因在于样本与评估指标、环境。
在样本上,线下样本为历史数据,而线上样本难免出现新数据,同理还有新特征等,如线上时间特征在线下是无法训练的。
在评估指标上表现为评估指标不对等,线下评估指标需要更贴近业务才能更好地表示真实推荐结果(或线上指标)。例如AUC表示的是所有user对所有item的评估指标,而线上更多需要单个user对其所有item的评估作为推荐结果,这时可以采用GAUC,即对每个user的AUC做量权求和作为评估指标。
另外即是线下训练很难还原线上环境。可以理解为线下训练无法捕获到全部的线上特征。
Q2: XGBoost和GBDT是什么?有什么区别?
A: GBDT:关键点在于Gradient和Boosting和DT(回归树)。在BDT中:Boosting——阶梯状训练,每棵树学习的是之前的树学习结果的残差。通过多棵树的预测结果求和,作为最终预测结果。而在GBDT中,采用损失函数梯度作为每棵树需要学习的预测结果(y)。
为什么使用损失函数的梯度?——基于残差的模型无法处理分类模型(类别数据无法取残差);基于损失函数梯度的模型,由于梯度是优化方向,那么就具备和残差同样的性质(使模型输出结果向着正确方向靠近),且损失函数类型多,可以根据模型业务选择合适的损失函数。实际上,BDT是GBDT的特例。
GBDT容易过拟合,故在推荐中采用GBDT+LR的模型,使GBDT的输出结果作为LR的特征输入。
关于回归树:叶子节点输出值常见采用的是当前叶子节点划分领域的值的均值,划分方式同分类树一样,根据特征划分计算当前指标(决策树的划分指标),选择最佳的特征作为当前划分。在推荐的GBDT+LR模型中,训练的是回归树,输出的是表示每棵回归树落到的节点的特征向量([1,0,0,...,0,1,0,0])。
GBDT是一种机器学习算法,而XGBoost是GBDT最广为人知的工程实现。XGB相对于GBDT,对实现方式更为详尽,能够得到更准确的结果。在实现方式上,相对于GBDT在损失函数构造上添加了二阶泰勒展开和正则项,并根据最小化损失函数构造了决策树的划分标准。
XGB相对于GBDT有以下优化:加入正则项(与叶子节点个数与节点输出权值有关)防止过拟合;采用二阶泰勒展开,相对于GBDT的一阶导数(梯度)更为准确;支持多种基分类器,不限于GBDT的CART决策树;XGB有缺失值处理方案,能够自动学习缺失值处理策略;Shrinkage(衰减)策略,每次迭代的新模型乘以一个衰减率降低优化速度,避免过拟合;借鉴了随机森林(RF)的两种抽样策略;并行处理。
Q3: 偏差与方差。延伸知识(集成学习的三种方式: Bagging、Boosting、Stacking)。
A: 偏差表示模型预测结果的期望与真实结果的区别。方差表示模型预测结果偏离真实预测结果的程度。
偏差小方差大的模型为强模型;偏差大方差小的模型为弱模型。强模型和弱模型是集成学习模型的基模型。
Bagging的基模型是强模型,常用投票法基于所有基模型预测结果输出最终结果,比较常见是的对每个基模型预测赋予相同的权重。Bagging能有效降低模型方差。
Boosting训练过程为阶梯状,基模型训练时有序的,每个基模型都会基于前一个基模型进行训练,使用的是弱模型。
Stacking将基模型的输出结果作为新的特征进行预测。使用的是强模型。
Q4: 随机森林是什么?
A: 随机森林是一种Bagging集成模型,基模型是决策树。随机森林的随机体现在:随机选择样本(Bootstrap自助法,有放回抽样),随机选择特征(每颗树使用不同的特征子集)。相当于综合了一群有偏见的分析师做决策。
随机森林的优点在于:算法表现优秀,易于并行,且在处理高维度数据上不需要做特征筛选。
Q5: Word2Vec常见的加速训练的方式有哪些?
A: 对高频词抽样,对于部分高频词(如“the”),很难对语义贡献有针对意义的信息,而学习高频词的样本又远远超过了训练该高频词emb所需的样本数。故通过“抽样”的方式,对于每个词都有一定概率被删除掉,而删除的概率与该词的词频有关。
负采样提高训练效率。在Word2Vec训练中,word词表(ont-hot向量)中每个训练样本会更新所有权重,如输出样本数据为[0,0,...,0,1,...,0,0],其中1代表正样本,而0代表其他的所有的负样本。此时对负样本的0进行筛选再反向传播。假设词表大小为1W,而负样本集合为10,则计算复杂度至少缩减到千分之一。出现频次高的样本更容易被选为负样本。
Hierarchical(层级) SoftMax。预测的输出词采用哈夫曼树编码表示(从[0,0,..,1,..0,0]转化为00..1的形式),词频高的位于哈夫曼树浅层,词频低的位于深层。此时输出层由原来的V分类(V代表词典大小,V分类指将隐层输出的值通过Softmax转化为预测的one-hot词向量结果)转为了logV次的二分类。该方法没有明显优于负采样方法,故较少采用。
Q6: LightGBM是什么?
A: LightGBM是一个基于决策树的Boosting(实现GBDT算法)的框架,对比于XGBoost具有更快的训练效率与更低的内存消耗。
Q7: AdaBoost思想?
A: Adaboost思想是对分类错误的样本提高权重,且在模型融合时,错误率低的模型具有更高权重。
Q8: 损失函数无法求导该怎么样进行优化?
A: 使用次梯度。
Q9: 召回模型中,评价指标怎么设定?
A: 召回的好坏决定模型的上限,召回的指标主要分为两部分:单路召回的效果;单路召回对剩余整体的影响。评价指标有:
1. 对召回集的直接评价指标:召回率、精确率和综合两者的F1。
2. 熵:Entropy=∑pi*log(pi)。pi表示类别i在召回集出现的次数,熵越大,代表该路召回的类别越多(多样性)。
3. 召回集和精确率这类指标会受到user-item交互的频数影响,可以使用F1 score作为替代(主要为了解决Recall和Precision受到N(TopN)的影响),另一方面,可以在评价召回模型时,对于不同的用户设置根据交互频数设置不同的N。
4. 另外,可以对于不同位置的召回集与未召回集,取少量数据进行排序模型的训练,使用精排评价指标判断该召回是否有明显优势。
Q10: 多路召回的作用?
A: 交叉与互补,满足用户兴趣多元化。
Q11: Skip-grim和Cbow的区别?Skip-grim优势在哪?
A: 使用中心词预测上下文与使用上下文预测中心词的区别。使用Sg的训练更为细致,从BP的角度看待,Sg的输出节点为Cbow的K倍,则在反向传播时的计算次数时Cbow的K倍(Cbow原理上对上下文向量做了Average)。对于数据量较少或生僻词较多的时候,Sg能展现出明显优势。简单而言,Cbow训练速度更快,但Skip-grim更为准确,实际上论文中也指出了Sg效果更好。