文章目录
前言
本文梳理了Bert模型相关的常见面试题
一、Bert模型相关
1.self-attention中 Q K T QK^{T} QKT相乘代表着的是什么?
Q、K都是句子向量本身, Q K T QK^{T} QKT矩阵中每个元素其实是不同位置单词两两相乘。所以这个矩阵代表的就是单词之间的相似度,相似度越高,数值越大。
2. self-attention中 Q K T QK^{T} QKT相乘后为什么要除以缩放因子 d k \sqrt{d_k} dk?
原因一、外层函数softmax的特点是有一个元素稍微有些大,占据的权重就会放大到赢家通吃的境地,为了减缓这种情况,需要除以一个缩放因子。
原因二、防止数据过大进入了softmax的饱和区间,进而导致梯度消失。
3. 如何理解Multi-head attention?
可以类比图像领域CNN经常使用多个卷积核,目的都是提取更多不同的特征.
4. Bert源码中多头的维度如何变化的?
源码中是将768维的词向量编码变换成64X12(12个头)的而不是直接用768X12
5. Bert是双向模型,双向体现在哪?
双向体现在完型填空这个任务,这种编码被称为auto-encoding;相对应的GPT这种单向语言模型被称为auto-regressive。
6. Bert的位置编码和transformers的位置编码一样么?
Bert的位置编码是固定长度训练出来的,而tf的位置编码则是通过sin、cos函数直接通过相对位置编码得到。前者的优势是模型效果更加好,后者优势是不受句子长度所限制。华为的nezha就是将Bert的位置编码改进成了相对位置编码。
二、Bert变种相关
1. Masked Language Model这个任务有哪些缺点,如何改进?
最大的缺点在于Bert中随机mask 15%的语料这个事情 在不同的epoch是固定的。那么极有可能有些单词因为被mask掉了而在训练过程中没有见过,导致微调阶段的语料分布和训练阶段的语料分布不相同。
改进方式1:参考roberta的动态mask,也就是不同epoch随机mask的15%是不同的,这样就可以保证微调阶段和训练阶段的语料分布相差不大了,代价当然是速度会稍微慢一点。
改进方式2: 参考XLNet的单向训练。利用乱序语言模型可以将auto-encoding模型转化成auto-regressive模型。这样就可以抛弃MASK这个token了。当然能保证随便打乱顺序的原因还在于bert的输入还有position-embeding 位置编码。
改进方式3: 中文的全词覆盖。中文环境下,原始bert是只mask一个字的,如果改成全词覆盖,任务难度和精准度会提升。
2. Next Sentense Prediction这个任务有哪些缺点,如何改进?
Bert原文当中打算是利用MLM作为单词层面的任务、NSP作为句子层面的任务共同作用训练出适用更广泛下游任务的预训练好的词向量。但是实际实验中发现第二个任务几乎可有可无。原因是因为NSP任务过于简单(2分类)。因此改进的方向就是增加该任务的难度。
参考百度的ernie 任务修改成预测句子顺序(SOP),这样就将2分类任务改成了8分类。
总结
Bert现在有一统江湖的趋势,必须掌握牢固。