作者:Pratik Bhavsar

编译:ronghuaiyang

导读: 在NLP的面试中提问频率非常高的问题。

练习 NLP 是一回事,破解面试是另一回事。对 NLP 人员的面试与一般的数据科学非常不同。在短短几年内,由于迁移学习和新的语言模型,这些问题已经完全改变了。我个人经历过,随着时间的推移,NLP 面试变得越来越艰难,因为我们取得了更多的进步。

早些时候,都是关于 SGD,naive-bayes 和 LSTM,但现在更多的是关于 LAMB,transformer 和 BERT。

这篇文章是我在接受采访时遇到的一些问题的小的总结,希望能对现在的 NLP 的面试的一些重要方面有所帮助。在 transformer 架构之后,我更关注 NLP 中发生的事情,这也是我在面试中主要的问题。

这些问题对于评估 NLP 工程师非常重要,如果你没有被问到任何一个问题,你可能正在面试一个过时的 NLP 团队,他们做复杂工作的范围更小。


什么是 perplexity?它在 NLP 中的地位是什么?

Perplexity 是一种表达模型在预测中出现的混乱程度的方法。熵越大 = 越混乱。使用 Perplexity 来评估 NLP 中的语言模型。一个好的语言模型会给正确的预测赋予更高的概率。

ReLu 的问题是什么?

  • 爆炸梯度(通过梯度裁剪来解决)
  • 死亡ReLu — 激活为0时不进行学习(通过加参数的ReLu解决)
  • 激活值的均值和方差不是0和1。(通过从激活中减去约0.5来部分解决这个问题。在fastai的视频力有个更好的解释)

使用 SVD 学习潜在特征和使用深度网络获取嵌入向量有什么区别?

SVD 使用输入的线性组合,而神经网络使用非线性组合。

LSTM 的 hidden 和 cell 存储的信息是什么?

hidden 存储到当前时间步的所有信息,cell 存储将来的时间步中可能需要的特定信息。

带 bias 的 LSTM 模型的参数个数

$4(m*h + h^2 + h$)其中m是输入向量的尺寸, h 是输出向量的尺寸,hidden 也是一样。

要注意的是 mh 中 m»h. 因此重要的一点是需要使用小的词汇表。

LSTM 的复杂度

序列长度*hidden ²

transfomer 的时间复杂度

序列长度 ²*hidden

当 hidden 尺寸大于序列长度时(通常是这种情况)时,transfomer 速度比 LSTM 快。

为什么 self-attention 怎么牛逼?

“在计算复杂性方面,当序列长度 n 小于表示维数 d 时,self-attention 层速度比 recurrent 层要快,实际情况也往往是这样,同时可以在机器翻译中使用最先进的模型来进行句子的表示,比如 word-piece 和 byte-pair 表示。“ — Attention is all you need

Adam optimiser 的局限性是什么?

虽然使用 Adam 进行训练有助于快速收敛,但结果模型的泛化性能往往不如使用 SGD 进行动量训练时的泛化性能。另一个问题是,即使 Adam 有自适应学习率,当使用良好的学习率计划时,它的性能也会提高。特别是在训练的早期,使用较低的学习率来避免发散是有益的。这是因为在一开始,模型的权值是随机的,因此得到的梯度不是很可靠。如果学习率太大,可能会导致模型采取太大的步骤,而没有确定合适的权重。当模型克服了这些初始稳定性问题后,可以提高学习速度,加快收敛速度。这个过程被称为学习率热身,其中一个版本在论文“Accurate, Large Minibatch SGD: Training ImageNet in 1 Hour”中有描述。

AdamW 和 Adam 有什么不同?

AdamW 是 Adam 在权重上使用了 L2 正则化,这样小的权重泛化性能更好。

使用大的 batch size 可以训练模型更快吗?

是的!

在 2018 年 4 月的这条推特中,Yann 建议不要使用大的 batch size。

好消息!

这在以前是不可能的,但是现在有了新的优化器,比如 LARS 和 LAMB。ALBERT 使用了 LAMB 和 batch size 为 4096 进行了训练。

Large Batch Optimization for Deep Learning: Training BERT in 76 minutes: https://arxiv.org/abs/1904.00962

你喜欢特征提取还是微调?你怎么决定?你会使用 BERT 作为特征提取器还是对它进行微调?

在这篇文章中有详细的解释。

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

举一个学习率调度策略的例子?

解释 Leslie Smith 的 cycle 策略。

我们应该在深度学习中进行交叉验证吗?

不用。

随着样本数量的增大,cross-folds 的方差减小。因为我们只有在样本成千上万的情况下才进行深度学习,所以交叉验证的意义不大。

在多任务学习中,软、硬参数共享的区别是什么?

在硬共享中,我们一次训练所有的任务,并根据所有的损失更新权重。在软共享中,我们一次只训练一个任务。

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

BatchNorm 和 LayerNorm 的区别?

BatchNorm — 为每一个小 batch 计算每一层的平均值和方差

LayerNorm — 独立计算每一层每一个样本的均值和方差

为什么 transformer 块使用 LayerNorm 而不是 BatchNorm?

从 LayerNorm 的优点来看,它对于 batch 大小是健壮的,并且在样本级别而不是 batch 级别工作得更好。

如果你知道你的训练数据有错误,你会对你的深度学习代码做什么改变?

我们可以做标签平滑,其中的平滑值是基于百分误差。如果任何特定的类有已知的误差,我们还可以使用类权值来修正损失。

如何为一个任务选择文本编码器?你最喜欢的文本编码器是什么?为什么?

这是一个主观问题,你可以通过阅读了解更多

Variety Of Encoders In NLP: https://medium.com/modern-nlp/on-variety-of-encoding-text-8b7623969d1e

在 ULMFiT 中使用了哪些技巧?(不是很好的问题,但是可以检查意识)

  • 使用任务文本进行语言模型的调优
  • 权重dropout
  • 每个层独立的学习率
  • 逐步的解冻层
  • 斜三角学习率策略

接下来可以提出一个问题,解释它们是如何提供帮助的。

为什么 transformer 的性能比 LSTM 好?

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

有趣的问题:在 transformer 中使用最多的层是哪一层?

Dropout 😂

技巧问题:告诉我一个不使用 dropout 的语言模型

ALBERT v2:这说明了一个事实,我们认为理所当然的许多假设并不一定是正确的。ALBERT 中参数共享的正则化效果非常强,不需要 dropouts。(ALBERT v1 有 dropouts。)

GPT 和 GPT-2 有什么区别?

  • Layer normalization放到了每个sub-block中,类似于残差单元的“building block”(和原始的“bottleneck”不一�