深入理解Transformer的笔记记录(精简版本)---- ELMO->GPT->BERT
1、ELMO
word embedding无法区分多义词的不同语义,其本质上是个静态的方式,所谓静态指的是训练好之后每个单词的表达就固定住了,以后使用的时候,不论新句子上下文单词是什么,这个单词的Word Embedding不会跟着上下文场景的变化而改变
ELMO根据当前上下文对Word Embedding动态调整的思路,事先用语言模型学好一个单词的Word Embedding,然后在我实际使用Word Embedding的时候,单词已经具备了特定的上下文了,这个时候可以根据上下文单词的语义去调整单词的Word Embedding表示。
1.1 ELMO采用了典型的两阶段过程:
(1) 第一个阶段是通过语言模型LSTM进行预训练:
上图左端的前向双层LSTM代表正方向编码器,输入的是从左到右顺序的上文Context-before;
右端的逆向双层LSTM代表反方向编码器,输入的是从右到左的逆序的下文Context-after
同时,每个编码器的深度都是两层LSTM叠加
(2)第二个阶段是在做下游任务时,从预训练网络中提取对应单词的网络各层的Word Embedding(E1,E2,E3)作为新特征补充到下游任务中。
双层双向LSTM: 虽然ELMO用双向LSTM来做encoding,但是这两个方向的LSTM其实是分开彼此独立训练的(一个从左向右预测,一个从右向左预测,在左边和右边的内部结构里,其本质还是单向),只是在最后在loss层做了个简单相加。 对于每个方向上的单词来说,在一个方向被encoding的时候始终是看不到它另一侧的单词的,既解决了see itself的问题,又充分用上了上下文的语义。
1.2 使用方法
使用这个网络结构利用大量语料做语言模型任务就能预先训练好这个网络,如果训练好这个网络后,再输入一个新句子,句子中每个单词都能得到对应的三个Embedding:
先将句子X作为预训练好的ELMO网络的输入
这样句子X中每个单词在ELMO网络中都能获得对应的三个Embedding
(1)第一个Embedding,是单词的Word Embedding
(