面试题目的标题: 【NLP/AI算法面试必备-2】NLP/AI面试全记录(持续更新)
链接:https://zhuanlan.zhihu.com/p/57153934
注:本文的答案既有参考该面试题目的答案,也有个人所学知识和网上其他文章的参考所得的答案,故而不能保证答案的准确性
一、AI算法基础
1、样本不平衡的解决方法?
答案:
1、过采样。过采样中有一种方法——SMOTE 算法,通过生成样本的方式来增加数量少的样本数。
代码实践:类别不平衡问题之SMOTE算法(Python imblearn极简实现)
2、欠采样
2、交叉熵函数系列问题?与最大似然函数的关系和区别?
答案:在二分类中,交叉熵函数和负最大似然函数的表达式是相同的,但是交叉熵函数是从信息论角度得到的,而最大似然函数则是从概率论角度得到的
3、HMM、MEMM vs CRF 对比?
答案:
马尔可夫随机场(Markov Random Fields, MRF):一阶的马尔可夫链只假设当前时刻的状态只受上一个时刻的状态的影响。它可以由参数 (S, π, A) 来决定,其中 S 是状态的集合,π 是初始状态的概率,A 是状态间转移矩阵。
HMM 指的是隐马尔可夫链在POS(词性标注)任务中, X 就是观察到的句子, Y 就是待推导的标注序列, 因为词性待求的, 所以人们称之为隐含状态.),它假设:
①当前时刻的状态只受上一个时刻的状态的影响
②当前时刻的标注标签(隐藏状态)只跟当前时刻的状态(观测状态)有关
MEMM指的是最大熵马尔可夫模型,
CRF(conditional random fiel) 指的是条件随机场,是在 MRF中加入指定的约束条件。和HMM不同的是,CRF并没有做出上述的假设,CRF使用feature function来更抽象地表达特征,使得他不再局限于HMM的两类特征。例如特征函数可以表示当前的隐藏状态与任意一个观测状态或者隐藏状态甚至是未来的隐藏状态的关系。
详细可参考:
一文理解条件随机场CRF:https://zhuanlan.zhihu.com/p/70067113
4、SVM和LR的区别与联系?
SVM 和 LR 都是属于分类算法,不过 SVM 是通过划分超平面的方法来进行分类,而 LR 则是通过计算样本属于哪个类别的概率,从而达到分类效果
5、crf的损失函数是什么?lstm+crf怎么理解?
首先 CRF 的目标函数为
其中 Z(X) 是正则化因子,将分子的计算结果转化为概率;j 表示特征函数的个数;n 为输入序列的长度; 为特征函数的权重。
故使用极大似然函数和加上负号可得:
其中 m 表示为样本数。
LSTM + CRF 怎么理解?首先 LSTM 由于对于序列输入有较好的抽取特征的功能,所以经过 LSTM 抽取特征后,可以使得 CRF 有更好的效果
二、NLP高频问题
1、word2vec和tf-idf 在相似度计算时的区别?
答案:
① word2vec 是稠密的向量,而 tf-idf 则是稀疏的向量
② word2vec 的向量维度一般远比 tf-idf 的向量维度小得多,故而在计算时更快
③ word2vec 的向量可以表达语义信息,但是 tf-idf 的向量不可以
④ word2vec 可以通过计算余弦相似度来得出两个向量的相似度,但是 tf-idf 不可以
2、word2vec和NNLM对比有什么区别?(word2vec vs NNLM)
答案:
NNLM 指的是神经网络语言模型,使用前 n - 1 个单词预测第 n 个单词(参考:https://blog.csdn.net/lilong117194/article/details/82018008)
而 word2vec 则是使用第 n - 1 个单词预测第 n 个单词的神经网络模型。但是 word2vec 更专注于它的中间产物词向量,所以在计算上做了大量的优化。优化如下:
①对输入的词向量直接按列求和,再按列求平均。这样的话,输入的多个词向量就变成了一个词向量。
②采用分层的 softmax(hierarchical softmax),实质上是一棵哈夫曼树。
③采用负采样,从所有的单词中采样出指定数量的单词,而不需要使用全部的单词
更详细的解释可参考:https://www.cnblogs.com/pinard/p/7243513.html
3、 word2vec负采样有什么作用?
答案:
① 可以大大降低计算量,加快模型训练时间
② 保证模型训练效果,因为目标词只跟相近的词有关,没有必要使用全部的单词作为负例,来更新它们的权重
4、word2vec和fastText对比有什么区别?(word2vec vs fastText)
word2vec 可参考该文章:https://www.cnblogs.com/pinard/p/7243513.html
答案:
相同点:
① 都是无监督算法
②都可以训练词向量
不相同点:
① fastText 可以进行有监督训练,结构与 CBOW(CBOW 是由目标词的上下文作为输入,目标词作为标签,而 skip-gram 则相反) 类似,但是学习目标是人工标注的标签。
② fastText 引入了分层的 softmax(hierarchical softmax)
③ fastText 对于长词时会考虑 subword,可以一定程度上缓解 oov (袋外词) 的问题
④ fastText 引入了 N-gram,会考虑词序特征
5、glove和word2vec、 LSA对比有什么区别?(word2vec vs glove vs LSA)
答案:
glove(Global vectors for word representation 单词表示的全局向量) 可参考该文章:https://blog.csdn.net/coderTC/article/details/73864097
LSA(Latent semantic analysis 潜在语义分析) 可参考该文章:http://www.luyixian.cn/news_show_10502.aspx
相同点:
① glove、word2vec、LSA 都可以学习得到词向量
② glove 和 word2vec 都是通过词对共现关系训练的神经网络模型,从而得到中间产物词向量,但是 LSA 是通过 SVD 奇异值分解得到的词向量
不相同点:
① glove 学习得到的词向量可以区分一词多义,但是 word2vec 和 LSA 学习得到的词向量不可以
② glove 可看作是 LSA 的优化的高效矩阵分解算法,使用 Adagrad 对最小平方和损失来优化,本质上用的是神经网络的训练方法
③ word2vec 是通过局部数据来进行训练的,而 glove 则是使用全局数据来统计共现概率
④ word2vec 的标签是当前单词(例如 CBOW,而如果是 skip-gram 则是上下文),而 glove 的标签则是共现概率
⑤ word2vec 的损失函数是带权重的交叉熵,即分类任务;而 glove 则是最小平方损失函数,即拟合任务
⑥glove 可以看作是换了目标函数和权重函数的全局 word2vec
6、 elmo、GPT、bert三者之间有什么区别?(elmo vs GPT vs bert)
答案:
elmo 可参考文章:https://www.cnblogs.com/huangyc/p/9860430.html、https://blog.csdn.net/firesolider/article/details/88092831
elmo 是一种深度语境化词表征模型,它先通过大规模文本训练一个双向的(此处是用两个单向的 LSTM 模型的输出结构进行拼接,跟一般的双向 LSTM 的定义不太一样)语言模型,即使用上一个词预测下一个词(当然这里跟 word2vec 不一样的地方在于,输入的是一个句子,预测的也是一个句子,只是本质上是用上一个单词预测下一个单词)。在使用词向量的时候,将目标单词所在的整个句子输入 ELMO 中,然后对求得的句子向量按列求和,就能得到该目标单词的词向量,且该词向量能够表达一词多义的问题。因为该目标单词所在的句子的其他单词的词向量能够通过按列求和的方法,向该目标单词的词向量增加它们自身的信息,从而使得同一个单词在不同的句子中能够表达不同的意思,从而解决一词多义的问题。
GPT 可参考文章:https://www.cnblogs.com/robert-dlut/p/9824346.html
GPT 是一个使用 Transformer 模型的 Decoder 部分进行预训练的模型,它通过大规模文本训练一个生成式的模型的方式,来训练词向量。GPT 不是双向的,因为在训练的时候,当前节点的后面节点的输入是会被遮蔽(mask)的。
BERT 是一个使用 Transformer 模型的 Encoder 部分进行预训练的模型,它通过大规模文本训练一个生成式的模型的方式,来训练词向量。但是它通过对输入进行遮蔽(mask)的方法,使得 BERT 能够使用左向和右向的双向神经网络层,因为此时的目标词已经被遮蔽了,所以不必担心双向神经网络层会泄露目标词。
总结如下:
相同点:
① elmo 和 BERT 都是双向的模型,但 elmo 实际上是两个单向神经网络的输出的拼接,这种融合特征的能力比 BERT 一体化融合特征的能力弱
② 输入的都是句子,不是单词
③ elmo 、GPT、BERT 都能解决一词多义的问题
④ 使用大规模文本训练的预训练模型
不相同点:
① GPT 是单向的模型
② BERT 会将输入遮蔽
③ elmo 使用的是 LSTM 作为神经网络层,而 GPT 和 BERT 则使用 Transformer 作为神经网络层
7、LSTM和GRU的区别?
答案:
1、GRU 将 LSTM 的遗忘门、输入门和输出门修改为更新门和重置门
2、将单元状态和输出状态合并为一个状态 h
3、GRU 的参数更少,更容易收敛。但在有大量的数据的情况下,LSTM 的性能会更好
三、其他算法问题
21、梯度消失的原因和解决办法有哪些?
答案:
1、梯度越来越小,最后下溢出。解决办法有强制截断,以避免梯度过小
2、梯度越来越大,最后上溢出。解决办法有强制截断,以避免梯度过大