长文总结自然语言处理 Interview 新题型

长文总结自然语言处理 Interview 新题型

——寻找NLP职位时的问题

练习自然语言处理(NLP)是一回事,攻克面试是另一回事。对NLP角色进行面试与通用数据科学有很大的不同。

在短短的几年里,由于迁移学习和新的语言模型,这些问题已经完全改变了。我亲身经历过,随着时间的推移,NLP的面试变得越来越艰难,因为我们取得了更多的进步。

早些时候,这一切都是关于SGD、朴素贝叶斯和LSTM,但现在更多的是关于LAMB、Transformer和BERT。

这篇文章是我在面试时遇到的问题的一个小汇编,希望能对现在NLP面试的重要方面提供一些启示。在Transformer架构之后,我更多地关注NLP中的事件,这也是我在采访中提出的大部分问题。

这些问题对于评估NLP工程师十分关键,以至于如果你没有被问到这些问题中的任何一个,你可能是在采访一个过时的工作范围较小的NLP团队。

什么是困惑度?它在NLP中的位置是什么?
· 困惑度是一种表达模型在预测中的混乱程度的方法。熵值越高=混乱程度越大。困惑度是用来评估NLP中的语言模型。一个好的语言模型赋予正确的预测更高的概率。

ReLu有什么问题?
· 爆炸梯度(用梯度裁剪解决)
· 死亡ReLu-如果激活为0,则不学习(由参数relu解决)
· 激活的平均值和方差不是0和1。(部分解决方法是从激活中减去约0.5。更好的解释在Fastai视频中) 

使用SVD学习潜在特征与使用深度网络获取嵌入向量有什么区别?
· SVD使用线性组合输入,而神经网络使用非线性组合。

在LSTM的隐藏层和单元状态下的信息是什么?
· 隐藏层存储所有信息,直到该时间步骤和单元格状态存储特定的信息,可能需要在未来的时间步骤。

有偏差的LSTM模型中的参数数
· 4(h+h²+h), 其中m是输入向量大小,h是输出向量大小(隐状态)

这里要看到的一点是,mh将模型的大小指定为m大于h。因此,有一个小的词汇是很重要的。

LSTM的时间复杂度
· 步长 * 隐状态²

Transformer的时间复杂度
· 步长² * 隐状态

当隐态大小 大于步长(大部分情况)时, Transformer比LSTM快。

为什么自注意力机制特别棒?
· “就计算复杂度而言,当序列长度n小于表示维数d时,自我注意层比递归层更快,这是最常见的情况,最先进的模型在机器翻译中使用的句子表示,比如单词片和字节对表示。“ – 由此注意力就是你唯一需要的

Adam优化算法的局限性是什么?
· “虽然使用Adam进行训练有助于快速收敛,但所得到的模型往往比使用具有动量的SGD进行训练时具有更差的泛化性能。另一个问题是,即使Adam有适应性学习率,它的性能提高时,使用一个良好的学习率计划。特别是在训练的早期,有利于使用较低的学习率来避免分歧。这是因为在一开始,模型权重是随机的,因此所得到的梯度不是很可靠。一个学习率太大可能会导致模型采取太大的步骤,不适应任何体面的权重。当模型克服这些初始稳定性问题时,可以提高学习速率,以加快收敛速度。这个过程被称为学习率热身,它的一个版本在论文“Accurate, Large Minibatch SGD: Training ImageNet in 1 Hour”中描述。

AdamW和Adam有什么不同?
· AdamW是Adam在重量上采用L2规则化,因为重量较小的模型一般情况下更好

我们能用大批量训练一个模型更快吗?
· 是的!在2018年4月的这条推文中,Yann建议不要大批量。

好消息!

这在早些时候是不可能的,但现在有了新的优化器,如LARS和LAMB就可以了。通过LAMB对ALBERT进行培训,批量为4096。

你喜欢特征提取还是微调?你怎么决定?您会使用BERT作为特征提取器还是微调它?
· 这一点在下文中作了详细解释。

https://medium.com/modern-nlp/transfer-learning-in-nlp-f5035cc3f62f

举一个调度学习率策略的例子? 
· Leslie Smith – 解释一个周期政策

深度学习是否应该做交叉验证?
· 不。随着样本大小的增加,交叉折叠的方差减小。由于只有当我们有数千个样本时,我们才进行深度学习,因此交叉验证没有太多意义。

多任务学习中硬参数共享和软参数共享有什么区别?
· 在硬共享中,我们同时训练所有任务,并根据所有损失更新权重。在软训练中,我们一次只训练一个任务。

注意机制有哪些不同类型?

https://lilianweng.github.io/lil-log/2018/06/24/attention-attention.html

BatchNorm和LayerNorm的区别?BatchNorm-计算每层的平均值和var 分层Norm-独立计算每个层的每个样本的平均值和var 为什么变压器块有LayerNorm而不是BatchNorm?

BatchNorm和LayerNorm的区别? 
· BatchNorm-计算每层的每个minibatch的平均值和方差
· LayerNorm-独立计算每个层的每个样本的平均值和方差

为什么transformer块有LayerNorm而不是BatchNorm?

https://lilianweng.github.io/lil-log/2019/01/31/generalized-language-models.html

· 看看LayerNorm的优点,它对批处理大小是健壮的并且能工作得更好,因为它在样本级别而不是批处理级别工作。

如果你知道你的训练数据中有错误,你会对你的深度学习代码做什么改变? 
· 我们可以做标签平滑,当其中平滑值是基于%误差时。如果任何特定的类已知错误,我们也可以使用类权重来修改损失。

您将如何为任务选择文本编码器? 哪一个是你最喜欢的文本编码器,为什么? 
· 这是一个主观的问题,你可以读这个来了解更多
· https://medium.com/modern-nlp/on-variety-of-encoding-text-8b7623969d1e

在ULMFiT中使用了哪些技巧?(不是什么大问题,但是意识检查) 
· 用任务文本对LM进行调优
· 权重丢弃
· 分层的歧视性学习率
· 层层逐步解冻
· 倾斜三角形学习率时间表

接下来可以提出一个问题来解释他们如何帮助。

为什么变压器的性能优于LSTM?

https://medium.com/saarthi-ai/transformers-attention-based-seq2seq-machine-translation-a28940aaa4fe

有意思的问题:Transformer中最常用的是哪个层?
· 丢弃的

棘手的问题:告诉我一种不使用丢弃的语言模型
· ALBERT v2-这揭示了一个事实,即我们认为理所当然的许多假设并不一定是正确的。在ALBERT中参数共享的正则化效果是如此强烈,以至于不需要丢弃。(ALBERT v1有丢弃现象)

GPT和GPT-2有什么区别?(摘自Lilian Weng)
· 层归一被移动到每个子块的输入,类似于“构建块”类型的剩余单元(不同于原始类型的“瓶颈”,它在权重层之前应用了批规范化)。
· 在最终的自我注意块之后添加了一个附加层归一化。
· 构造了一个修正的初始化,作为模型深度的函数。
· 剩余层的权重最初被缩放为1/√n的因子,其中n是剩余层的数目。
· 使用更大的词汇量和上下文大小。

GPT和BERT有什么区别?

 Thomas Wolf
· GPT不是双向的,没有掩蔽的概念
· 在训练中BERT增加了下一个句子预测任务,因此它也有一个段嵌入。

https://lilianweng.github.io/lil-log/2019/01/31/generalized-language-models.html

那么BERT和ALBERTv2有什么区别呢?
· 嵌入矩阵分解(有助于减少参数量)
· 没有丢弃
· 参数共享(有助于减少参数量和正规化)

在ALBERT中的参数共享如何影响训练和推断时间? 
· 没有效果。参数共享只是减少了参数的数量。

你会如何减少训练后的NN模型的推理时间?
· 在GPU/TPU/FPGA上工作
· 16位量化并在fp16支持下在GPU上服务
· 修剪以减少参数
· 知识蒸馏(到较小的变压器模型或简单的神经网络)
· 层次softmax/适应性 softmax
· 您也可以缓存结果,如这里所解释的。

https://medium.com/modern-nlp/productionizing-nlp-models-9a2b8a0c7d14

给定这个图表,你会使用Transformer模型还是LSTM语言模型?

DistilBERT https://arxiv.org/abs/1910.01108

你会和经典模型一起用BPE吗?
· 当然!BPE是一个聪明的分词者,它可以帮助我们得到一个较小的词汇表,可以帮助我们找到一个参数较少的模型。

你将如何制作一个arxiv文件搜索引擎?(有人问我——你将如何制作剽窃检测仪?)
· 获取具有TF-IDF相似性的顶级k结果,然后根据以下排列结果:

o 语义编码余弦相似度

o 为排名而训练的模型

https://medium.com/modern-nlp/semantic-search-fuck-yeah-e371c0f639d

你将如何做一个情感分类器?
· 这是个骗人的问题。受访者可以说所有的事情,如使用转移学习和最新的模型,但他们也需要谈论一个中立的类,否则你可以有很好的准确性/F1,但模型仍然会把一切分为积极或消极。事实上,很多新闻都是中性的,所以训练需要有这一类。受访者还应该谈谈他将如何创建一个数据集和他的培训策略,如选择语言模型,语言模型微调和使用各种数据集进行多任务学习。

作者:Pratik Bhavsar

翻译:Sophie Li