![28225b0c50f590f25ba5dd7a99e43913.png](https://i-blog.csdnimg.cn/blog_migrate/181f67fa92792e0df211d31c0c1723d9.jpeg)
不输出,无提升。无交流,不大佬。虽然大佬当不了,但是输出的习惯还是要养成的!
BERT与现在轻量级的预训练模型相比显得有些过时,但是经典就是经典,很多后续的模型如XLnet、Albert、Erine等也只有在理解了BERT等老牌预训练模型以后才能更好的被理解。因此今天总结一下BERT及其周边模型。(ps. 相关的博客实在太多,总结的目的也仅限于加固自己的知识,当然能帮到更多入门者理解就更好了。)
下面讲一下本文的行文逻辑:由于BERT用到了Transformer,而Transformer又用了Attention机制,因此本文的第一部分介绍Attention的基本概念,第二部分再引入Transformer。由于ELMO最先突破了wordvec关于多义词的瓶颈,因此第三部分简单讲一下ELMO的基本原理。但ELMO模型架构采用的是BiLSTM而非Transformer,GPT用的是Transformer,但是是单向的Transformer,所以第四部分简单讲GPT。最后,我们才讲今天的主题,谷歌大杀器BERT。
Attention
在序列到序列的任务中(如:机器翻译),假设我们用的是RNN模型,那么Encoder输出的编码信息是序列中最后一个token运算完的隐藏状态。我们在用这个编码结果作为Decoder的输入,让Decoder产生Sequence,如下图:
![f068be346fd5ab003820f8249cd19276.png](https://i-blog.csdnimg.cn/blog_migrate/217728ced8912b64357f62af217b4f57.jpeg)
这样做虽然有道理,但是我们在特定的解码位置可能会更加想用到输入序列的某个特定位置。举个例子,我们在英汉机器翻译的时候,“The Cat is sitting on the chair.” 翻译到“猫”的时候,我们更想关注第二个词语“Cat”,这时候,如果仅依靠最终状态的编码信息可能是不足够的,在长距离翻译过程中,更远的信息可能无法送达。这个时候Attention机制就发挥作用了。
在Seq2Seq结构中,Attention能够帮助学习“对齐”信息。简单地说,就是让每一步解码,不仅用到当前位置的隐藏状态,还再拼接一个由Encoder各个隐藏状态和当前位置隐藏状态计算所得的Attention状态做输入,而这个Attention向量是怎么得到的呢?如下图:
![a6b15c90ebb9da61f17413374119ffe8.png](https://i-blog.csdnimg.cn/blog_migrate/7248b59960b2f525847e4e6884a8abaf.jpeg)