0%

ML-Interview-Natural-Language-Processing

Transformer

  1. 简述 Transformer 提出的背景。 > 1. seq2seq 处理长期依赖仍然是一个挑战。 > 2. seq2seq 模型架构的顺序特性阻止了并行化。

  2. 什么是self-attention机制? 请举例来说明。 > 参考 https://mp.weixin.qq.com/s/8Kic83oCoiKzAKe-dvRUvw > 1. 输入X, 通过3个线性转换把X转换为Q,K,V. 有了K,Q,V 三个特征向量,就可以做attention. > 2. 用每个单词的 query 向量与其自身及其他单词的 key 向量做dot product. 得到权重的分布表示。 假设有两个单词,Thinking, Machines. 通过嵌入变换会\(X_1\),\(X_2\)两个向量。分别与\(Wq\), \(W_k\),\(W_v\)三个矩阵想做点乘得到,{q1,q2},{k1,k2},{v1,v2} 6个向量。 然后{q1,k1} 做点乘得到得分\(score_1\), {q1,k2}做点乘得到\(score_2\)。对上述 socre 进行规范化,然后 softmax 得到权重 \([w_1,w_2]\). > 3. 对 valuex 向量求加权平均。用权重向量\([w_1,w_2]\) 乘以\([v1,v2]\)值得到一个加权后的值. \[Attention(Q,K,V) = softmax(\frac{Q,K^T}{\sqrt{d_k}})V\]

  3. encoder 中的self-attention 与 decoder 中 masked self-attention 有什么区别? > encoder 中,\(QK^T\) 会组成一个word2word的attention map. 是一个方阵. 比如说你的输入是一句话 "i have a dream" 总共4个单词, 这里就会形成一张4x4的注意力机制的图.

    这里的masked就是要在做language modelling(或者像翻译)的时候,不给模型看到未来的信息。此时的 attention map 是一个下三角矩阵。
  4. 什么是 Multi-Head Attention? > Multi-Head Attention就是把self-attention 做 N 次,然后把 N 个 heads concatenate 在一起。最后再做一个线性变换。

  5. Batch Norm 和 Layer Norm 的区别是什么? > BN并不适用于RNN等动态网络和batchsize较小的时候效果不好。Layer Normalization的提出有效的解决BN的这两个问题。LN和BN不同点是归一化的维度是互相垂直的. N表示样本轴,C 表示通道轴,F 是每个通道的特征数量。

  6. 什么是transformer 中的 Encoder-Decoder Attention? > 在decoder中,Transformer block比编码器中多了个encoder-cecoder attention。在encoder-decoder attention中,Q 来自于 decoder 的上一个输出,K,V 来自于 encoder 的输出.

  7. 什么是Positional Encoding? > 参考 https://zhuanlan.zhihu.com/p/95079337 > Transformer抛弃了RNN,而RNN最大的优点就是在时间序列上对数据的抽象,所以文章中作者提出两种Positional Encoding的方法,将encoding后的数据与embedding数据求和,加入了相对位置信息。

  8. 简述 Transformer 的架构。 > Transformer 包含 Encoder Part and Decoder Part. Encoder Part 比较重要的是 Self-Attention. Decoder Part 比较重要的是 Masked Multi-Head Attention,Encoder-Decoder Attention. 同时,encoder 和 decoder 都包含 Feed Forward, Residuals 以及 Layer Norm.

ELMo,OpenAI GPT,BERT

参考 https://zhangruochi.com/ELMo-OpenAI-GPT-BERT/2019/12/21/

  1. 解释下 ELMO 的思想. > ELMO 的意思是 embedding from language model. word2vec 最大的问题是在训练好后,词向量在任何context的情况下都是不变的。而实际上我们知道单词的意思随着语境的变化而变化。ELMO 训练了一个双向的 LSTM, 然后将 hidden layer concate 在一起。对于L层的双向lstm语言模型,每个单词一共有2L+1个表征(representations).最后根据具体的任务,将2L+1个表征加权平均在一起。

  2. 解释下OpenAI Transformer. > OpenAI Pre-training a Transformer Decoder for Language Modeling.

  3. Bert 是怎样实现 mask 的? > - MLM:将完整句子中的部分字mask,预测该mask词 > - NSP:为每个训练前的例子选择句子 A 和 B 时,50% 的情况下 B 是真的在 A 后面的下一个句子, 50% 的情况下是来自语料库的随机句子,进行二分预测是否为真实下一句

  4. 在数据中随机mask15%的token,其中80%被换位[mask],10%不变、10%随机替换其他单词,这样做的原因是什么? >Bert随机mask语料中15%的token,然后预测masked token,那么masked token 位置输出的final hidden vectors喂给softmax网络即可得到maskedtoken的预测结果。这样操作存在一个问题,fine-tuning的时候没有[MASK]token,因此存在pre-training和fine-tuning之间的mismatch,为了解决这个问题,采用了下面的策略: > 1. 80%的时间中:将选中的词用[MASK]token来代替,例如 > my dog is hairy → my dog is [MASK] > 2. 10%的时间中:将选中的词用任意的词来进行代替,例如 > my dog is hairy → my dog is apple > 3. 10%的时间中:选中的词不发生变化,例如 > my dog is hairy → my dog is hairy

  5. 为什么BERT有3个嵌入层,它们都是如何实现的? > - input_id是语义表达,和传统的w2v一样,方法也一样的lookup > - segment_id是辅助BERT区别句子对中的两个句子的向量表示,从[1,embedding_size]里面lookup > - position_id是为了获取文本天生的有序信息,否则就和传统词袋模型一样了,从[511,embedding_size]里面lookup

  6. Bert的损失函数? > 1. MLM:在 encoder 的输出上添加一个分类层,用嵌入矩阵乘以输出向量,将其转换为词汇的维度,用 softmax 计算mask中每个单词的概率 > 2. NSP:用一个简单的分类层将 [CLS] 标记的输出变换为 2×1 形状的向量,用 softmax 计算 IsNextSequence 的概率 > 3. MLM+NSP即为最后的损失

  7. elmo、GPT、bert三者之间有什么区别? > 1. 特征提取器:elmo采用LSTM进行提取,GPT和bert则采用Transformer进行提取。很多任务表明Transformer特征提取能力强于LSTM,elmo采用1层静态向量+2层LSTM,多层提取能力有限,而GPT和bert中的Transformer可采用多层,并行计算能力强。 > 2. 单/双向语言模型:GPT采用单向语言模型,elmo和bert采用双向语言模型。但是elmo实际上是两个单向语言模型(方向相反)的拼接,这种融合特征的能力比bert一体化融合特征方式弱。 > 3. GPT和bert都采用Transformer,Transformer是encoder-decoder结构,GPT的单向语言模型采用decoder部分,decoder的部分见到的都是不完整的句子;bert的双向语言模型则采用encoder部分,采用了完整句子