有向图称为朴素贝叶斯,无向图称为逻辑回归。 Attention机制,适合于从众多任务中选取重点关注的任务。其中Self Attention机制介绍的论文中All Attention is your need是经典。基于此,transformer和bert等模型被发明,在众多NLP任务中取得了SOTA成绩。 一、首先需要从论文中获取作者的观点,作者在此推荐2篇论文: 1、Transformer Transformer-Attention is ALL Your Need 2、bert bert-Pre-training of Deep Bidirectional Transformers for Language Understanding 二、源码 transformer和bert的tf实现和pytorch实现在网上有很多,自己下载,参照论文进行精读。 三、面试八股文 此部分知识需要先记住,结合论文和代码精读,反复记忆,相辅相成。 下面参考网上各路大神的面经梳理一份,以飨读者朋友: 1、为什么BERT在第一句前会加一个[CLS]标志? A:BERT在第一句前会加一个[CLS]标志,最后一层该位对应向量可以作为整句话的语义表示,从而用于下游的分类任务等。为什么选它呢,因为与文本中已有的其它词相比,这个无明显语义信息的符号会更“公平”地融合文本中各个词的语义信息,从而更好的表示整句话的语义。 具体来说,self-attention是用文本中的其它词来增强目标词的语义表示,但是目标词本身的语义还是会占主要部分的,因此,经过BERT的12层,每次词的embedding融合了所有词的信息,可以去更好的表示自己的语义。 而[CLS]位本身没有语义,经过12层,得到的是attention后所有词的加权平均,相比其他正常词,可以更好的表征句子语义。 2、BERT的三个Embedding直接相加会对语义有影响吗? Q:Embedding的实质就是以one-hot为输入的单层全连接,也就是说本没有Embedding,有的只是one hot。
3、在BERT中,token分3种情况做mask,分别的作用是什么? 4、为什么BERT选择mask掉15%这个比例的词,可以是其他的比例吗?[1] 5、针对句子语义相似度/多标签分类/机器翻译翻译/文本生成的任务,利用BERT结构怎么做fine-tuning? 6、使用BERT预训练模型为什么最多只能输入512个词,最多只能两个句子合成一句?[1] 7、BERT非线性的来源在哪里?multi head attention 是线性的嘛?[1] 8、BERT 是如何区分一词多义的? 9、BERT的输入是什么,哪些是必须的,为什么position id不用给,type_id 和 attention_mask没有给定的时候,默认会是什么 10、BERT训练时使用的学习率 warm-up 策略是怎样的?为什么要这么做?[13] 11、Bert 采用哪种Normalization结构,LayerNorm和BatchNorm区别,LayerNorm结构有参数吗,参数的作用?[8] 12、为什么说ELMO是伪双向,BERT是真双向?产生这种差异的原因是什么? 13、BERT和Transformer Encoder的差异有哪些?做出这些差异化的目的是什么? 14、BERT训练过程中的损失函数是什么? 15、BERT 的两个任务 Masked LM 任务和 Next Sentence Prediction 任务是先后训练的还是交替训练的 1、Transformer在哪里做了权重共享,为什么可以做权重共享?好处是什么?[1] 2、Transformer的点积模型做缩放的原因是什么?[1] 3、Transformer中是怎么做multi head attention 的,这样做multi head attention,会增加它的时间复杂度嘛?[1] 4、为什么Transformer 要做 Multi-head Attention? 它的好处在哪? [6] 5、Transformer的Encoder端和Decoder端是如何进行交互的?和一般的seq2seq有什么差别? 6、Transformer中multi-head attention中每个head为什么要进行降维?[14] BERT 发表之后,预训练语言模型如雨后春笋,这里暂时只选了两个代表,之后有空会再添加上。 XLNet: 1、XLNet如何实现在不加 [Mask] 情况下利用上下文信息呢?[3] 2、XLNet为什么要用双流注意力?两个流的差别是什么?分别的作用是什么?分别的初始向量是什么? 3、虽然不需要改变输入文本的顺序,但 XLNet 通过 PLM 采样输入文本的不同排列去学习,这样不会打乱或者丢失词汇的时序信息嘛? 4、AutoRegressive (AR) language modeling and AutoEncoding (AE) 两种模式分别是怎样的,各自的优缺点是什么,XLNet又是怎样融合这两者的? ALBERT: 1、ALBERT的小具体小在哪里?对于实际存储和推理都有帮助嘛? 2、BERT的NSP为什么被认为没有效?ALBERT采样的OSP(Sentence Order Prediction)任务是怎样的?相比NSP有什么优势? 深入思考,会发现它真的是一个很神奇的存在,它是BERT乃至整个预训练语言模型的基石,是接棒CNN/RNN,成为特征抽取的新利器。Attention is all you need ! 0、深度学习中Attention与全连接层的区别何在?[15] 注:这是一个检验你是否真正理解Attention的问题 1、self-attention 的本质是什么?包括哪几个步骤?和普通 Attention 的差别在哪里?[4] 2、不考虑多头的原因,self-attention中词向量不乘QKV参数矩阵,会有什么问题?[4] 3、在普通 attention 中,一般有 k=v,那 self-attention 可以嘛?[4] 4、self-attention 在计算的过程中,如何对padding位做mask?[2] 5、bert的mask为何不学习transformer在attention处进行屏蔽score的技巧?[11] 6、XLNet为什么不直接在attention掩码矩阵中只把当前的单词掩盖住来获取上下文的信息呢?直接mask住左上到右下的对角线构建双向语言模型不行吗?[3] 结语:在这个Transformer/BERT已然成为NLP领域基础组件的时代,面试官会更关注Transformer/BERT在你实际项目中的落地去考察你的应用能力,和Transformer/BERT相关的更细节的问题去考察你的理解能力。应用能力的提升需要你在实际项目/比赛中去落地使用Transformer/BERT;而本文希望能帮助你对Transformer/BERT的理解再深一层。
感悟: 在现阶段NLP领域,最有希望的研究思路: (1)小数据 + cross-domain/domain adaptation:和迁移学习很像,finetune 模型,把一个已经训练好的模型,再用小量的数据做调整和优化,使得它适应这些小数据所代表的应用场景。不过放到 NLP 中最重要的应该是怎样高效利用其他领域的数据来训练词向量模型,还有很大进步空间,有各种论文的实验结果验证。 (2)语言是离散的,一句话加了 吗/不/怎么 这种无意义的感叹词,原始的句意就会变化很多。但是现有的NLP model都是先把句子用encoder层转换成稠密语义向量(生搬硬套cv的做法),然后再套用不同的decoder解决问题,其实这样的话不同场景下这些语气词的影响就在encoder阶段被弱化,却在decoder阶段被loss function强化了,最后的结果就是model非常依赖大规模语料和复杂模型,才能刻板的记住这些case(参考BERT和elmo)。所以我还是觉得离散空间的建模问题是NLP现阶段的瓶颈,如果这块能有突破的话,就能一劳永逸的解决大规模语料需求和复杂模型问题了。 (3)词向量能表达的语义很有限…更多的,最近在想养孩子的问题,教孩子说话的时候,比如苹果这个词,会让孩子摸一摸苹果,闻一闻苹果,尝一尝苹果,然后学着说苹果这个发音,如果正好家里没有苹果也至少是让孩子看着图画书来认识苹果这个词。慢慢地孩子就建立了 苹果 这样一个概念。然后孩子又认识了 梨 桃子 橘子等更多的水果,才在概念空间把这些词设定为较高的相似度。其实人类在建立概念的时候是多感官综合的。
参考:
关于BERT中的那些为什么
|