干货 | 携程秋招算法岗面试题分享!

七月在线实验室

共 3015字,需浏览 7分钟

 ·

2021-12-19 02:16


问题1:Jieba分词的原理是什么

1. 首先用正则表达式将中文段落粗略的分成一个个句子。

2. 将每个句子构造成有向无环图,之后寻找最佳切分方案。

3. 最后对于连续的单字,采用HMM模型将其再次划分。



问题2:特征工程的常用方法


1. 对时间戳处理

2. 对离散型变量进行独热编码

3. 对连续型变量进行分箱/分区

4. 特征缩放

5. 特征选择

6. 特征衍生(特征交叉)



问题3:随机森林和GBDT区别


随机森林采用的bagging思想,而GBDT采用的boosting思想。这两种方法都是Bootstrap思想的应用,Bootstrap是一种有放回的抽样方法思想。虽然都是有放回的抽样,但二者的区别在于:Bagging采用有放回的均匀取样,而Boosting根据错误率来取样(Boosting初始化时对每一个训练样例赋相等的权重1/n,然后用该算法对训练集训练t轮,每次训练后,对训练失败的样例赋以较大的权重),因此Boosting的分类精度要优于Bagging。Bagging的训练集的选择是随机的,各训练集之间相互独立,弱分类器可并行,而Boosting的训练集的选择与前一轮的学习结果有关,是串行的。


组成随机森林的树可以是分类树,也可以是回归树;而GBDT只能由回归树组成。

组成随机森林的树可以并行生成;而GBDT只能是串行生成。


对于最终的输出结果而言,随机森林采用多数投票等;而GBDT则是将所有结果累加起来,或者加权累加起来。


随机森林对异常值不敏感;GBDT对异常值非常敏感。


随机森林对训练集一视同仁;GBDT是基于权值的弱分类器的集成。


随机森林是通过减少模型方差提高性能;GBDT是通过减少模型偏差提高性能。



问题4:xgboost和lightgbm区别


1. 内存更小

XGBoost 使用预排序后需要记录特征值及其对应样本的统计值的索引,而 LightGBM 使用了直方图算法将特征值转变为 bin 值,且不需要记录特征到样本的索引,将空间复杂度大大降低,极大的减少了内存消耗;LightGBM 采用了直方图算法将存储特征值转变为存储 bin 值,降低了内存消耗;LightGBM 在训练过程中采用互斥特征捆绑算法减少了特征数量,降低了内存消耗。


2. 速度更快

LightGBM 采用了直方图算法将遍历样本转变为遍历直方图,极大的降低了时间复杂度;LightGBM 在训练过程中采用单边梯度算法过滤掉梯度小的样本,减少了大量的计算;LightGBM 采用了基于 Leaf-wise 算法的增长策略构建树,减少了很多不必要的计算量;LightGBM 采用优化后的特征并行、数据并行方法加速计算,当数据量非常大的时候还可以采用投票并行的策略;LightGBM 对缓存也进行了优化,增加了 Cache hit 的命中率。



问题5:LSTM的结构


解析:包括遗忘门,输入门和输出门三种。


GRU与LSTM区别

(1)LSTM和GRU的性能在很多任务上不分伯仲;

(2)GRU参数更少,因此更容易收敛,但是在大数据集的情况下,LSTM性能表现更好;

(3)GRU 只有两个门(update和reset),LSTM 有三个门(forget,input,output),GRU 直接将hidden state 传给下一个单元,而 LSTM 用memory cell 把hidden state 包装起来。



问题6:RNN BPTT的机制

BPTT(back-propagation through time)算法是常用的训练RNN的方法,其实本质还是BP算法,只不过RNN处理时间序列数据,所以要基于时间反向传播,故叫随时间反向传播。BPTT的中心思想和BP算法相同,沿着需要优化的参数的负梯度方向不断寻找更优的点直至收敛。综上所述,BPTT算法本质还是BP算法,BP算法本质还是梯度下降法。



问题7:RNN为什么会出现梯度消失或者梯度爆炸


在RNN中经常遇到梯度消失和爆炸现象的原因:很难捕捉到长期的依赖关系,因为乘法梯度可以随着层的数量呈指数递减/递增。


 

问题8:sigmoid和softmax的区别


Softmax函数是二分类函数Sigmoid在多分类上的推广,目的是将多分类的结果以概率的形式展现出来。最大的区别在于softmax的计算的是一个比重,而sigmoid只是对每一个输出值进行非线性化。



 

问题9:描述下DeepFM模型


在处理CTR预估问题中,传统的方法有一个共同的缺点:对于低阶的组合特征,学习到的比较少;但是低阶特征对于CTR也非常重要,于是Google为了同时学习低阶和高阶组合特征,提出了 Wide&Deep 模型:混合了一个 线性模型(Wide part)和 Deep 模型 (Deep part);这两部分模型需要不同的输入,其中Wide part部分的输入仍然依赖人工特征工程;


此时模型存在两个问题:

  • 偏向于提取低阶或者高阶的组合特征,不能同时提取这两种类型的特征;

  • 需要专业的领域知识来做特征工程;

DeepFM 在 Wide&Deep 的基础上进行改进,成功解决了上述这两个问题,并做了一些优化;


优点如下:

  • 不需要预训练FM得到隐向量;

  • 不需要人工特征工程;

  • 能同时学习低阶和高阶的组合特征;


FM模块和Deep 模块共享 Feature Embedding 部分,可以更快、更精确的训练;



 

问题10:训练集、测试集和验证集的作用,训练的时候为什么要进行shuffle


首先用训练集训练出模型,然后用验证集验证模型(注意:这是一个中间过程,此时最好的模型还未选定),根据情况不断调整模型,选出其中最好的模型(验证误差用于指导我们选择哪个模型),记录最好的模型的各项设置,然后据此再用(训练集+验证集)数据训练出一个新模型,作为最终的模型,最后用测试集评估最终的模型。


进行shuffle:打乱数据之间的顺序,让数据随机化,避免过拟合




— 推荐阅读 —

最新大厂面试题


干货资料


AI开源项目论文


NLP ( 自然语言处理 )


CV(计算机视觉)


推荐


阅读原文”领取PDF!

浏览 54
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报