NLP面试
深度学习和NLP
过拟合欠拟合,偏差方差,正则化, 交叉验证
-
怎么判断过拟合, 过拟合如何处理
定义:过拟合(overfitting)是指在模型训练中由于训练数据包含抽样误差,对抽样误差也进行了很好的拟合。
表现:模型在训练集上效果好,在测试集上效果差(相差20%以上),模型泛化能力弱。
原因:(1)观察值与真实值存在偏差。(2)训练数据不足,数据太少,导致无法描述问题的真实分布。(3)训练模型过度,导致模型非常复杂。
处理方法:(1)数据层面上,增加数据或者数据增广 (2)模型层面,主要是降低模型的复杂度:减少数据特征,L1,L2,Droupout,BN,集成学习,早期停止策略 ,使用简单的模型 -
怎么判断欠拟合, 欠拟合如何处理
定义:欠拟合(underfitting)是指模型无法得到较低的训练误差。
表现:训练的模型在训练集上面的表现很差,在验证集上面的表现也很差。
原因:模型发生欠拟合的最本质原因是训练的模型太简单,最通用的特征模型都没有学习到
处理方法:(1)添加新的特征 (2)减少正则化参数 (3)使用更深或者更宽的模型 (4)使用集成方法
3. 偏差和方差的定义,为什么要在两者之间进行权衡
偏差(Bias)表示模型输出与真实值之间的误差,刻画模型的准确度,方差(Variance)表示模型在训练集和验证集之间的误差,刻画模型的稳定性。
在一个实际系统中,Bias与Variance往往是不能兼得的。如果要降低模型的Bias,就一定程度上会提高模型的Variance,反之亦然。造成这种现象的根本原因是,我们总是希望试图用有限训练样本去估计无限的真实数据。当我们更加相信这些数据的真实性,而忽视对模型的先验知识,就会尽量保证模型在训练样本上的准确度,这样可以减少模型的Bias。但是,这样学习到的模型,很可能会失去一定的泛化能力,从而造成过拟合,降低模型在真实数据上的表现,增加模型的不确定性。相反,如果更加相信我们对于模型的先验知识,在学习模型的过程中对模型增加更多的限制,就可以降低模型的variance,提高模型的稳定性,但也会使模型的Bias增大。因此通常需要在两者之间权衡。
-
L1和L2正则化的区别,为什么L1可以获得稀疏解,L2解接近于0?
L1正则化就是在loss function后边所加正则项为L1范数,加上L1范数容易得到稀疏解(0比较多)。L2正则化就是loss function后边所加正则项为L2范数的平方,加上L2正则相比于L1正则来说,得到的解比较平滑(不是稀疏),但是同样能够保证解中接近于0(但不是等于0,所以相对平滑)的维度比较多,降低模型的复杂度。 -
word2vec如何实现,实现方法有什么区别
-
基于业务的问答系统如何设计
-
如何训练基于知识图谱的问答系统
-
在训练KBQA时会用到例如freebase这样的开源知识图谱,他们过大的体积在训练中要如何进行优化
-
基于匹配的问答系统的关键技术是什么(文本相似度匹配)
-
文本相似度匹配有哪些实现方法(转特征求距离,或者使用自然语言推理的模型)
-
开放式的对话系统如何训练
-
transformer和RNN的区别
-
推荐系统了解吗,有那两部分(召回和排序)
-
怎么抓取热门
-
召回有哪些(微博召回怎么做),排序算法了解吗
-
小样本数据集怎么做
-
样本不均衡怎么搞(重点考核损失函数优化)
-
AUC的具体含义
-
介绍推荐系统的召回和排序系统,召回系统的输出是什么
-
RF和GBDT介绍、RF的属性采样时有放回还是不放回
-
手写LSTM的公式(手画LSTM图)
-
lightgbm对缺失值的处理方法
-
kmeans的K值确定方法
-
FM(factorization machine)模型的公式写一下,模型解决了什么问题
-
DIN(deep interest network)主要使用了什么机制,解释一下,画一下DIN的框图
-
DIN的activation unit的作用
-
一个模型的bais和variance的具体定义是什么,bais和variance哪个比较重要,为什么是trade-off
任何机器学习算法的预测误差可以分解为三部分,即:偏差+方差+不可约的误差(对于给定的模型,我们不能进一步减少的误差)。 -
泛化误差解释(bais^2+variance+noise)
-
dropout的工作机制,dropout在训练过程如何使用
-
聚类算法了解程度、kmeans介绍、K值选择、kmeans++算法)
-
推荐系统还有融合框架,假如通过两种不同的召回和ranking系统得到结果,如何在两种备选结果中最终给用户推荐出最适合的十个广告
-
XGBOOST ,LGB,GBDT 的区别
-
一阶优化器,二阶优化器
-
Attention怎么做,self-attention怎么做
-
Transformer细节,Bert细节(多头和缩放)
-
标签平滑怎么做的
-
交叉熵,相对熵
-
Bagging, boosting , 偏差,方差关系
二者都是集成学习算法,都是将多个弱学习器组合成强学习器的方法。
Bagging:从原始数据集中每一轮有放回地抽取训练集,训练得到k个弱学习器,将这k个弱学习器以投票的方式得到最终的分类结果。
Boosting:每一轮根据上一轮的分类结果动态调整每个样本在分类器中的权重,训练得到k个弱分类器,他们都有各自的权重,通过加权组合的方式得到最终的分类结果。 -
CRF理论与代码实现细节, CRF与HMM关系,区别
-
维特比,beam-search 时间复杂度,区别
-
XGBOOST ,LGB 生长策略,分类策略
-
少样本情况怎么缓解
-
实际场景做softmax很容易出现下溢问题, 怎么解决
可以用每个维度减去一个固定值 -
正则项为什么能减缓过拟合
-
过拟合解决方法,正则项为什么能减缓过拟合, 权重衰减等价于哪个正则项
-
随机森林的随机体现在哪里
-
tm和rnn的区别
-
LR和svm的区别是什么
-
lstm的优点,记忆单元是怎么工作的,他为什么可以克服梯度消失
-
bp的原理
-
bn的原理
-
解释一下AUC的计算方法和它代表的意义。问了一个相关的问题,当时没有答的很好,就是一个数据如果分成两份,分别在两份数据上计算出AUC为AUC_1和AUC_2,问整体数据的AUC是多少?面试的时候一直以为这个是能算出来的,所以一直在推导公式。最后的答案其实是无法得到,因为从局部的有序无法直接退出全局的有序,这个题目其实还是考查对于AUC这个指标的理解深度。
-
word2vec的两种优化方法,说下分层softmax是怎么做的。word2vec的优点和缺点,是如何解决oov的问题的,实际上word2vec如何使用
-
lucene搜索
-
关键字搜索如何实现
-
单元测试。
-
深度优先和广度优先的本质区别。
-
从搜谷歌到返回页面,发生了什么。
-
batchsize大或小有什么问题, LR怎么设置
计算机网络
- TCP和UDP的区别
1、TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接
2、TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付
3、TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;UDP是面向报文的UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等
4、每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信
5、TCP首部开销20字节;UDP的首部开销小,只有8个字节
6、TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道 - 线程和进程的区别,如何实现多线程;
- L1范数能否去除冗余特征
- 没坐标怎么做kmeans
- 决策树的特征和神经网络特征有什么差异
- 句子向量有哪些生成方式
- 词袋模型有哪些不足的地方
稀疏,无序,纬度爆炸, 每个词都是正交的,相当于每个词都没有关系。 - albert相对于bert的改进
- 稀疏词向量 用skip-gram还是cbow训练好
- word2vec 两种训练方式哪种更好?对生僻词谁更好?
- 在工程中什么样的结果会表明是over fitting/under fitting
- 对于CNN 卷积层、和池化层的物理意义是什么, 对于池化的max方法和mean方法 分别适合针对什么情况下应用?
当feature map中的信息都具有一定贡献的时候使用AvgPooling,比如网络走到比较深的地方,这个时候特征图的H W都比较小,包含的语义信息较多,这个时候再使用MaxPooling就不太合适了.反之为了减少无用信息的影响时用maxpool,比如网络浅层常常见到maxpool,因为开始几层对图像而言包含较多的无关信息。二者的具体使用场景只有在具体任务上观察,实际效果炼丹后才知道。 - L2正则化的penalize term和先验有关系嘛?如有是什么样的关系
- 树模型怎么剪枝?如何处理缺失值?
- 讲讲Glove的原理,它和Word2vec有什么区别?Fasttext说一下
- 画一下ELMo的模型图,讲一下ELMo的原理,为什么它能解决词歧义的问题?
- 画Bert的模型图,讲原理,预训练的过程。Bert输入是由哪些组成的?Bert相比于ELMo有什么优点?它是怎么用作下游任务的?
- Attention机制的原理,常用的Attention计算相似度方式有哪些,写一下公式。
- 有分布式训练神经网络的经验吗?多卡跑模型的命令是什么
- 简述一种中文分词算法。
- 讲一下Hessian矩阵? Hessian矩阵是对称矩阵吗?
- SVM的优化函数讲一下?
- 聚类算法了解吗?DBSCAN讲一下
机器学习
- Xgboost的原理介绍以及如何并行化实现
- 生成模型和判别模型(SVM、LR属于哪种)
Python
- Python的装饰器, 迭代器和生成器
装饰器的功能:在不修改原函数及其调用方式的情况下对原函数功能进行扩展
装饰器的本质:就是一个闭包函数
迭代器就是用于迭代操作的的对象,遵从迭代协议(内部实现了__iter__()和__next__()方法,可以像列表(可迭代对象,只有__iter__()方法)一样迭代获取其中的值,与列表不同的是,构建迭代器的时候,不像列表一样一次性把数据加到内存,而是以一种延迟计算的方式返回元素,即调用next方法时候返回此值。
生成器本质上也是一个迭代器,自己实现了可迭代协议,与迭代器器不同的是生成器的实现方式不同,可以通过生成器表达式和生成器函数两种方式实现,代码更简洁。生成器和迭代器都是惰性可迭代对象,只能遍历一次,数据取完抛出Stopiteration异常#生成器函数(带yield语句) def gen(): yield 3 #生成器表达式(类似列表推导式) gen=(x for x in range(1,5))
- Python中的Lambda函数
- Python回调
- python中函数self的区别,读取一个txt文件中2.5是什么数据类型,2.5+2.5等于多少
- 深拷贝和浅拷贝的区别
- 线程进程的区别, python内部实现的多线程有什么问题
- Python2和Python3 map的差别
Python3 map函数返回一个迭代器, Python2中返回一个列表。 - Python可变数据类型和不可变数据类型分别有哪些?
可变数据类型:列表list和字典dict。
不可变数据类型:整型int、浮点型float、字符串型string和元组tuple。 - Python是如何进行内存管理的
Python采用的是基于值的内存管理方式,如果为不同变量赋值相同值,则在内存中只有一份该值,多个变量指向同一块内存地址
Linux基础
- AWK
- nohup
##代码
- 最长回文子串
- 给你10亿数据,不重复,求前k大。(n为10亿,k为2亿)
- 给你1000个数组,求最长的等差数列
- TopK(快排和小顶堆分别实现,分析时间和空间复杂度)
- 分析插入和快排的时间和空间复杂度,稳定,不稳定?稳定排序和不稳定排序算法的定义?手写快排
- LR的随机梯度实现
- 数组的最大和,数组的最大乘积
- 数组排成最大的数字
- 数据中出现空值处理的方法
- 给定一个矩阵,在矩阵中选取一行,求取某一行某个数附近的5个数的值,需要用哪种数据结构(KD树)
- 二叉树的最短路径
- 给定10G的文件,只有2G的内存,如何将文件放到内存中
- 编辑距离
- 完全二叉树的节点个数
- 二叉树的前序遍历的递归和非递归、时间复杂度
- 15分钟 写一个k-means,没写完时间不够
- 打家劫舍II
- 反转链表
- 用神经网络搭建一个LR
- 如果有很大的文件,怎么统计文件里面出现的各个单词的数量
- 用两个栈实现一个队列
- o(n)实现三色排序
- 有一个城市名称列表,如何判断语句中是否出现了列表中的城市(KMP)
- 手写tfidf
- 二叉树层次遍历
- 大数加法 大数相乘
- 二叉树之子型遍历,每行打印
- 数组,可以分别从最左边最右边取个数字,求取得k个数的最大值,O(1)空间呢,k的取值范围的条件
- k个的列表反转
- 对称二叉树
- 连续数组,给定k,求连续数组最小区间。动态规划要优化时间,贪心法需要证明。
- 圆上三点组成锐角三角形概率
- cnn的卷积计算,参数计算。
- 倒水问题
- 最长公共子序列
- 最大上升子序列
- 旋转数组找K值
- 蓄水池抽样算法(Reservoir Sampling)
- 跳台阶+有一次后退机会
- 排序二叉树 插入新数字
- 归并排序中的归并
- 给定一个int数组,求数组中能组成三角形的个数。
- 数组中索引K前面是有序的,K之后也是有序的,调整使得整个数组有序,要求空间复杂度O(1)
- 有1,2,5,10,20,50的纸币,求凑到100元一共有多少种方法
- 合并两个有序链表,合并K个有序链表
- 顺时针打印矩阵
智力题
- 2个蜡烛1个小时,如何记录15分钟
- 只有01生成器,如何生成 0-3等概率,如何生成 0-k等概率(模拟二进制)
- ABCD乘以9等于DCBA,那么ABCD各等于几?
反转链表