基础篇
word2vec被问到的点
1、word2vec的词向量是怎么更新的?
在训练语言模型时,得到了词向量这个副产品;梯度上升更新权重,词向量同理,目标函数对x求导,用x的梯度来更新词向量。
2、word2vec的输入维度是什么样的?
|v|*d
3、word2vec的影藏层是什么样子的?
word2vec没有影藏层
窗口内词的相加求和;
4、为什么要采用负采样技术?
提高训练速度并改善采样词的质量,
保证了模型训练的效果,其一模型每次只需要更新采样的词的权重,不用更新所有的权重,那样会很慢,其二中心词其实只跟它周围的词有关系,位置离着很远的词没有关系,也没必要同时训练更新
5、负采样的具体实现
6、负采样为什么要使用出现次数的(3/4)幂
在使用C语言实现的词转向量(word2vec)中,你可以看到这个概率公式。每个单词都被给予一个等于它频率的权重(单词出现的数目)的3/4次方。选择某个单词的概率就是它的权重除以所有单词权重之和。
使用频率的3/4次方显然是根据经验来的;在他们的文章中,他们说到这个公式比其他函数的表现更为优秀。你可以通过在谷歌中输入: plot y = x^(3/4) and y = x
并且调整焦距为x = [0, 1]范围。当我们增加数值一点点的时候它的图像有一点小弯曲。
https://blog.csdn.net/qq_28444159/article/details/77514563(负采样相关)
7、词向量oov问题如何解决?
fasttext subword; bert基于字构建词表;
8、得到embedding词向量之后如何分类?
会经历一个[embedding_size,label]全连接层,得到每个类别的logit 值,对logit值做softmax,得到每一个类别的概率
9、fasttext和word2vec有什么区别?
1、fasttext引入了ngram 和subword,增强词的表达能力
2、fasttext的目标是标签,word2vec的目标是词向量
基础篇LR和SVM
1、LR和SVM有什么区别?
2、SVM为什么要提出对偶问题?
3、SVM的支持向量是什么?
决定决策边界的数据叫做支持向量,它决定了margin到底是多少,而max margin更远的点,其实有没有无所谓。
GBDT
1、GBDT是如何决策的?
GBDT算法可以看成是由K棵树组成的加法模型:
每一步以最小化目标函数决定加入哪颗树,最后由这k颗树的加权预测结果决定最后的预测值
https://blog.csdn.net/yangxudong/article/details/53872141
2、GBDT如何决定特征的重要性?
全局重要度是有单颗树的重要度决定的,计算所有的非叶子节点在分裂时加权不纯度的减少,减少得越多说明特征越重要。
不纯度的减少实际上就是该节点此次分裂的收益,因此我们也可以这样理解,节点分裂时收益越大,该节点对应的特征的重要度越高。
https://blog.csdn.net/yangxudong/article/details/53899260
3、GBDT有什么优点?
4、GBDT是是如何分裂特征的?
利用(xi,rti)(xi,rti)来构建cart回归树的时候,GBDT分裂会选取使得误差下降最多(如果cart树采用的是均方差作为损失,那么就是最小均方差)的特征进行分裂,如果这棵树不能拟合好,那么就要通过负梯度计算出新的残差向量来拟合新的cart回归树。对初始cart树可以直接用0,也可以采用样本的均值。既然已经有了分裂规则,那么如何停止继续分裂呢?主要可以通过以下手段进行操作:1、节点分裂时的最小样本数;2、树的最大深度;3、树的最大叶子节点数;4、loss满足约束条件。
5、GDBT那么如何停止继续分裂呢?
主要可以通过以下手段进行操作:1、节点分裂时的最小样本数;2、树的最大深度;3、树的最大叶子节点数;4、loss满足约束条件。
15、boosting思想是什么样的?
Bagging的思想是每一次从原始数据中根据均匀概率分布有放回的抽取和原始数据大小相同的样本集合,样本点可能出现重复,然后对每一次产生的训练集构造一个分类器,再对分类器进行组合。
梯度提升的Boosting方式是使用代价函数对上一轮训练出的模型函数f的偏导来拟合残差。
16、boosting是在主要在降低什么?
降低偏差,每次迭代降低损失
17、GBDT和xgboost有什么区别?
https://blog.csdn.net/u013069552/article/details/108089847
18、句子的相似性如何表示?
字面距离;simhash等编码距离;词向量之间的距离
https://www.cnblogs.com/xlturing/p/6136690.html
19、有什么模型能用来识别句子的相似性?
一般神经网络词向量表示后,通过consin来度量句子的相似性
https://zhuanlan.zhihu.com/p/39920446
20、有1到2^32-1的数,随机从里面删除5个数,找出删除了的5个数?
1-2^32-1 用一位bit表示,存在记为1,不存在记为0
21、bert为什么要用到attention机制?
attention机制把注意力放在重要的点上
22、attention机制有什么用?
23、word2vec得到的词向量能消除歧义吗?比如 S1:“苹果 手机 很好 用” S2:“小明 爱 吃 苹果” 这两句话中的苹果得到的词向量一样吗?
不能
24、如何解决两句话歧义的问题?
预训练词向量;考虑上下文向量化表示词
n-gram 来判断当前位置可能出现的“词同时出现的概率。
25、与word2vec相比,预训练有哪些优势
由于word2vec、glove等静态词向量未考虑一词多义、无法理解复杂语境,可通过预训练语言模型产生上下文相关的特征表示(动态词向量)。
预训练思想的本质是模型参数不再是随机初始化,而是通过一些任务(如语言模型)进行预训练;
https://zhuanlan.zhihu.com/p/76912493
===========================================================================================
项目相关
大部分是结合项目来问的。
知识点的问的比较少
1、albert与bert的区别?
1)对Embedding因式分解(Factorized embedding parameterization)
在BERT中,词embedding与encoder输出的embedding维度是一样的都是768。但是ALBERT认为,词级别的embedding是没有上下文依赖的表述,而隐藏层的输出值不仅包括了词本生的意思还包括一些上下文信息,理论上来说隐藏层的表述包含的信息应该更多一些,因此应该让,所以ALBERT的词向量的维度是小于encoder输出值维度的。
2)权值共享;所有encoder层共享权重参数
3) nsp任务 -->sop任务
2、为什么用albert不用bert?
开源了Albert tiny版,方便领域预训练;bert base 太大,推理时间长
3、预训练模型较传统的循环网络模型有哪些优点?
预训练思想的本质是模型参数不再是随机初始化,而是通过一些任务(如语言模型)进行预训练;
4、梯度消失和梯度爆炸是什么原因导致的?
反向传播链式求导导致,激活函数不当,sigmoid导数激活有效区为[-6,6]
5、如何从一个海量数据中查找某一关键词?
分区,再遍历每个区
6、hash散列冲突解决的方法有哪些?
链地址法和载散列法 https://mp.csdn.net/console/editor/html/108270023
================================================================================================
3、fasttext如何生成句向量?
平均词向量,tfidf加权词向量,bert句向量表示
https://www.jianshu.com/p/c229ba01a312
https://blog.csdn.net/asialee_bird/article/details/100124565
4、聚类时,聚成了多少类?k是怎么选择的?
400左右,k值通过轮廓系数选择
5、置信度学习介绍下?
置信度学习使用预测的概率和嘈杂的标签对未归一化的置信关节中的样本进行计数,然后归一化以估计联合分配,修剪噪音数据,生成干净的数据作为输出。
https://blog.csdn.net/u013069552/article/details/108187981
6、albert的计算量和bert哪个大?
albert参数量远小于bert;但两者计算量相差不大
7、bert和albert的区别?
1)embedding因式分解
2) encoder权值共享
3) nsp-->sop
8、simhash是什么原理?
分词->hash->加权->求和->降维
10、递归有什么弊端?
满足使用递归的条件:
优点:
缺点:
9、记录树的一些属性包括树高,其中记录的树高有些离群点,如何找出树高记录错了的样本?
特征选择,回归模型
10、给定5枚硬币,有1枚有正反两面,2枚两面均为正面,2枚两面均为反面,现在观测到一枚硬币的为正面,求另一面也是正面的概率?
==============================================================================================
1、word2vec负采样
根据词出现的频率进行采样,频率高的被采样的几率大;为了加速训练和选择好的词
2、tfidf计算方式
tf=词出现的频率|文章的总词频
idf=log((总文档数+1)|(出现该词的文档数+1))
tfidf=tf*idf
3、word2vec为啥不能消除句子之间的歧义?预训练模型可以?
word2vec为静态词向量,预训练为动态词向量
4、gbdt和RF的实质性差异在哪?
gdbt:boosting集成思想,梯度提升树,降低偏差; RF:bagging 策略,降低方差
==================================================================================
基于项目问的
1、为什么要用这个方法?去重业内都有哪些方法?
https://zhuanlan.zhihu.com/p/43640234
Minhash算法 :K-shingle算法得到的特征向量是超高维的,导致该算法非常巨大的时间复杂度和空间复杂度。Minhash算法设计了一种最小哈希函数,将原始超高维的稀疏向量转化为低维的稠密向量,降低了计算的空间复杂度。同时,对转换后的稠密向量进行分段索引,缩小潜在相似文本范围,降低了计算的时间复杂度。 (重排 K-shingle向量,取N个非0下标,组成N维向量)
Simhash:KShingle算法和Minhash算法都需要生成一个庞大的Shingle词组库,当文本数量和文本长度很大时,计算这个词组库需要耗费巨大的时间和空间资源,且各文档的特征向量计算都依赖这个共同的词组库,因此计算特征向量的过程很难完全地并行化。Simhash算法仅基于文档中包含的词汇生成文档的特征向量,极大提高了计算效率。
simhash弊端:
一是Simhash对文本进行分词处理并统计词频,可以认为是一个词袋模型,并没有考虑词汇的先后顺序。Minhash采用滑动窗口提取词组,加入了词汇次序信息。
二是Simhash对词汇特征向量按列求和再做符号映射,丢失了文本特征信息。
2、抽取关键词都有哪些方法?
https://zhuanlan.zhihu.com/p/61666342 (关键词抽取综述)
关键词是表达文本主题内容的词,包括单词,术语和短语,在含义上是独立非复合的。
LDA :https://www.cnblogs.com/xlturing/p/6136690.html (文本相似性表示)
https://blog.csdn.net/pit3369/article/details/95594728 (tfidf,textrank, word2vec主题应用)
3、词向量如何检索?
建立倒排索引,通过聚类构建K个区,查询向量通过和这K个区进行比较,进行检索
https://www.cnblogs.com/huaweiyun/p/13745957.html
4、google提出simhash是来解决什么问题的?
Google公司进行海量网页去重使用的主要算法;
通过上面的例子我们可以很清晰的发现simhash的局部敏感性,相似文本只有部分01变化,而hash值很明显,即使变化很小一部分,也会相差很大。 (分词、hash、加权、合并、降维(根据正负变成0,1))
存储索引,分四段;鸽巢原理(海明距离为3的必有一段相同)
5、simhash为什么对短文本无效?
局部敏感
6、simhash召回很低,如何提高召回,有没有什么其他方法?
提取文章中的关键词,通过词召回,然后再检索
7、文本相似性度量
字面距离
相同字符数
莱文斯坦距离(编辑距离)
simhash:局部敏感hash
https://www.cnblogs.com/xlturing/p/6136690.html
=====================================================================================
1、bert的位置向量如何表示?
https://zhuanlan.zhihu.com/p/57732839
2、transform的位置向量是怎么表示的?
https://zhuanlan.zhihu.com/p/57732839
3、transform的位置向量能表示方向吗?
代码前半段sin,后半段cos
4、tarnsform的attention为什么要除以sqrt(d)
为了梯度的稳定,Transformer使用了score归一化,即除以 sqrt(dk)=8 (论文中使用key向量的维度是64维,其平方根=8,这样可以使得训练过程中具有更稳定的梯度。);
首先说明做归一化的原因,随着dk的增大,q ⋅ k 点积后的结果也随之增大,这样会将softmax函数推入梯度非常小的区域,使得收敛困难(可能出现梯度消失的情况)(为了说明点积变大的原因,假设q 和k 的分量是具有均值0和方差1的独立随机变量,那么它们的点积q ⋅ k 均值为0,方差为dk),因此为了抵消这种影响,我们将通过除以sqrt(dk)缩放点积,对于更详细的分析https://blog.csdn.net/liujian20150808/article/details/105215861
5、bert为什么要采用MLM任务?
https://zhuanlan.zhihu.com/p/139479425
MLM 首先在输入句子中遮挡住部分的词语(token),然后训练模型来基于剩下的词语预测被遮住的词语。作为一种创新的预训练任务来克服单向 LM(语言模型) 的缺点
6、MLM任务,mask的15%的任务,80%的mask,10%的原词,10%的随机词是为什么?
该训练方法会引起预训练阶段和微调阶段的不匹配,因为 mask 标记并不会出现在微调阶段。为了解决这一问题,Devlin 等人对于被选中遮住的词语(总词语数的 15%),80% 的可能使用 mask 将其遮起来,10% 的可能使用随机词语替换,10% 的可能保留原词语。
7、fasttext的结构是什么样的?
fastText是一种基于cbow模型的新扩展,它会使用subword的信息,将每个词被表示成一个字符级n-gram词袋(a bag of character n-grams)。每个向量表示与每个字符级n-gram相关联,而词(word)则可以看成是这些n-gram向量表示的求和(sum)。
8、bert的基本结构是什么样的?
9、卷积神经网络过拟合都采用了哪些策略?
增加数据,dropout ,早停,正则化
10、dropout具体策略了解吗?
=============================================================================
1、置信度学习的具体过程是什么样的?
样本通过模型后会有一个预测为每一个类别的概率;我们可以根据预测概率计算出预测为每一类的置信度;根据这个置信度,我们可以统计<真实标签,预测标签>个数,根据这个计数,我们可以得到一个混淆矩阵,最后可以根据这个混淆矩阵进行错误样本的剔除。
2、transform的结构是什么样的?
embedding层(词嵌入+position位置向量)-> encoder(self-attention) -> 残差+LN(layer norm) ->ffnn(前馈神经网络)->残差+LN(layer norm)-> 词向量输出
3、为什么要引入位置向量,有什么好处?
位置向量表示了序列的顺序信息,可能更好地表征序列。
4、为什么要引入残差?
为了适应更深的网络模型,避免反向传播时,梯度消失
5、为什么要引入ffnn前馈神经网络?
为了堆特征进行放缩,通过激活函数进行特征选择
6、激活函数有什么好处?
进行特征的放缩
7、relu函数有什么好处,为什么要使用relu激活函数?
可以有效地防止梯度消失,对特征进行选择
8、transform输出的是词向量,如何表示句子的?
词向量的加权平均
9、要是句子长度不一样,K,Q,V是如何计算,具体怎么实现的?
句子长度不一样,会有一个padding操作,padding的时候,短的进行补0操作,长的进行截断。
10、K,Q,V是怎么来的?
初始化K,Q,V向量的权重向量,权重向量乘以词嵌入向量X,得到了最终的向量。
11、K,Q,V是怎么计算的,谁乘以谁的转置?
K*Q表示 K和Q的内积,Q*(K的转置) softmax(k*q/sqrt(d))*v
12、为什么要这么计算?
Q*(K的转置)度量了词在某一位置的重要性,提高重要点的关注度。
13、transform的模型是怎么训练的?
embedding层(词嵌入+position位置向量)-> encoder(self-attention) -> 残差+LN(layer norm) ->ffnn(前馈神经网络)->残差+LN(layer norm)-> 词向量输出->全连接层->logit->softmax得到每一类的概率->crossentry(得到的概率与真实标签计算交叉熵)作为损失函数->通过adam优化器优化loss,更新权重
14、有什么加速训练的方法?
word2vec的层次softmax;和负采样
15、层次softmax是怎么计算的,怎么分类的,怎么实现加速的?
层次softmax对词或者标签构建了一个哈夫曼树,频率出现大的标签和词需要计算的路径短;每个路径都是一个二分类;根节点代表了权重向量
16、负采样的具体过程是怎么样的?是怎么计算的,怎么实现加速的?
出现频率大的词被采样的概率大,其一模型每次只需要更新采样的词的权重,不用更新所有的权重,那样会很慢,其二中心词其实只跟它周围的词有关系,位置离着很远的词没有关系,也没必要同时训练更新,作者这点非常聪明。
17、transform的encoder输出的是什么?
K,Q,V,向量
18、albert和bert的区别?
主要有3点,1)因式分解 2)权重共享 3)预训练任务nsp,sop
19、albert和bert的推理速度一样吗?
相同网络层次的两类模型相差不大,albert较bert慢
20、albert为什么要因式分解?
减少参数量
21、gdbt的损失函数是怎样的?
方差,交叉熵等
22、有哪些东西可以实现gdbt
sklearn,libgbm,sparklibm ,tf
23、gdbt是如何优化的,每次优化的是什么?
如果是方差损失函数,优化的是上个模型的残差,如果是其他函数,优化的是损失函数的一阶导数
24、你用的gdbt用的是什么损失函数?
均方差
25、gdbt和RF 有什么区别?
gdbt是梯度提升树,每次优化的是上棵树的损失,降低的是偏差;RF是基于bagging思想的,每次有放回地对样本和特征进行采样,通过多棵树同时决策,降低的是方差。
============================================================================
编程题汇总
1、[[1,2,3],[4,5],[6]]矩阵A 的组合方式
输出: [[1,4,6],[2,4,6],[3,4,6],[1,5,6],[2,5,6],[3,5,6]]
===========================================================================================
1、给定一个矩阵a,并且给定矩阵的起始位置(x,y);顺时针打印矩阵
2、给定一个数组a,找出数组的的连续子序列和最小的值,及输出其开始位置和结束位置
============================================================================
算法题:
1、一个排序好的数组,里面包含重复数字,如何在O(n)不用辅助空间的情况下把重复数字移动数组的后面?
eg: [1,1,2,2,3,3,4,4,5,6,7,8] 变为 [1,2,3,4,5,6,7,8,1,2,3,4]
2、给定一排序数组,查找数组中第一次出现的位置
eg : [1,1,2,2,3,3,4,4,5,6,7,8] 查找2,则返回2
二分法
================================================================================
算法题
1、不用递归,二叉树的中序遍历实现?
2、链表的反转?
3、二叉树叶子节点的统计?
==================================================================================
5、顺时针螺旋打印
def printMtrix(n):
#生成矩阵
a=[]
for i in range(n):
t=[]
for j in range(n):
t.append(i*n+j+1)
a.append(t)
print(a)
#打印矩阵
r_s,r_e=0,n-1
c_s,c_e=0,n-1
r=[]
while(r_s<=r_e):
#从左望右
for i in range(c_s,c_e+1):
r.append(a[r_s][i])
r_s+=1
#从上往下
for j in range(r_s,r_e+1):
r.append(a[j][c_e])
c_e-=1
#从右往左
for i in range(c_e,c_s-1,-1):
r.append(a[r_e][i])
r_e-=1
#从上往下
for j in range(r_e,r_s-1,-1):
r.append(a[j][c_s])
c_s+=1
return r
print(printMtrix(4) )
================================================================================================
给定一个循环数组(最后一个元素的下一个元素是数组的第一个元素),输出每个元素的下一个更大元素。数字 x 的下一个更大的元素是按数组遍历顺序,这个数字之后的第一个比它更大的数,这意味着你应该循环地搜索它的下一个更大的数。如果不存在,则输出 -1。
'''
case:
[2, 1, 3, 8, 4, 2] => [3, 3, 8, -1, 8, 3]
code:
'''
def f(a):
r=[]
for i in range(len(a)):
b=a[i:]+a[0:i]
j=0
while ja[i]):
r.append(b[j])
break
j+=1
if j==len(a):
r.append(-1)
return r
def find(a):
l,r=-1,-1
position={}
for j in range(len(10)):
for i in a[::-1]:
if i==j:
position[j]=i
break
else:
position[j]=-1
for i in range(10,-1,-1):
for j in range(len(a)):
if(a[j]
在a中寻找包含b的最短子串,b是无序的 (我感觉我有点没听懂题目)
类似的参考 https://www.cnblogs.com/huangwei1024/archive/2012/09/28/min-len-substring.html
其他人总结的网址
https://andy1314chen.github.io/2017/11/03/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0%E9%9D%A2%E8%AF%95%E6%80%BB%E7%BB%93/ (机器学习面试题汇总)
https://andy1314chen.github.io/2017/11/05/%E6%B5%B7%E9%87%8F%E6%95%B0%E6%8D%AE%E5%A4%84%E7%90%86%E9%9D%A2%E8%AF%95%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93/ (海量数据处理问题总结)
https://andy1314chen.github.io/2017/11/03/%E5%90%84%E7%A7%8D%E6%8E%92%E5%BA%8F%E6%96%B9%E6%B3%95%E6%80%BB%E7%BB%93/ (排序总结)
https://blog.csdn.net/brucewong0516/article/details/78700402 (GBDT总结)
https://github.com/laddie132/NLP-Interview (NLP知识点,无答案)
https://blog.csdn.net/qawsedrf123lala/article/details/105899126 (统计方法论)
https://blog.csdn.net/qawsedrf123lala/article/details/107997088 (NLP)
https://blog.csdn.net/liujian20150808/article/details/105215861 (transform相关问题集合)
https://blog.csdn.net/u011428210/article/details/106421690?utm_medium=distribute.pc_feed_404.none-task-blog-BlogCommendFromMachineLearnPai2-15.nonecase&depth_1-utm_source=distribute.pc_feed_404.none-task-blog-BlogCommendFromMachineLearnPai2-15.nonecas (别人的NLP面试题,包括HMM,fasttext,bert)
https://blog.csdn.net/qq_34333481/article/details/85012666?utm_medium=distribute.pc_feed_404.none-task-blog-BlogCommendFromMachineLearnPai2-2.nonecase&depth_1-utm_source=distribute.pc_feed_404.none-task-blog-BlogCommendFromMachineLearnPai2-2.nonecas (传统自然语言处理)
https://blog.csdn.net/qq_16949707/article/details/106113926?utm_medium=distribute.pc_feed_404.none-task-blog-BlogCommendFromMachineLearnPai2-16.nonecase&depth_1-utm_source=distribute.pc_feed_404.none-task-blog-BlogCommendFromMachineLearnPai2-16.nonecas (词向量,ner, transform常问问题)
刷题之路:
https://blog.csdn.net/qq_32384313/article/details/90745354 (感觉这个是按顺序的)
https://blog.csdn.net/weixin_38118016/article/details/90761111 (面试高频题汇总,动态规划占比太大了)