NNLM / word2vec / transformer / ElMo / OpenAI GPT / BERT 的前因后果

看了这些模型原理已经好一阵子了,今天针对这些模型的异同点 进行一下梳理,帮助大家理解 word embedding的前世今生,由于涉猎 广度 和 深度 都还有所欠缺,所以难免有错,大家选择性学习,欢迎查漏补缺。

1、NNLM -> word2vec

NNLM 和 word2vec 都属于 无监督学习;
NNLM 和 word2vec 的核心思想比较像,都是 通过周边词 来 预测 目标词,二者不同之处在于:
NNLM的预测模式为forward形式,即 用target_word的前向词 作为 neural net的input,而将target_word作为output;
word2vec 有两种求解方法:CBOW 和 Skip-Gram。其中,CBOW和NNLM比较相像,只不过,CBOW是 双边形式,即 用target_word两侧一定window_length范围内的words去预测target_word。Skip-Gram形式与CBOW刚好相反。
word2vec有一个非常明显的downside,即:word2vec得到的word embedding没有考虑 上下文。

考虑 上下文 的 word embedding 方法,按照时间线来梳理,较早的方法主要有:RNN,LSTM,GRU,Transformer,这几种方法都属于 有监督学习。

RNN,LSTM,GRU 是比较常见的 序列cell,在这里不在赘述,如想深入了解,可以查看 《deeplearning.ai》分类下的博文:序列模型;

下面重点介绍一下 Transformer;

2、Transformer

Transformer由2部分组成:encoder 和 decoder,其中引入了一个比较重要的机制 self-attention。此外,transformer还引入了 位置编码 ,其与 word embedding初始值 相加,一起作为 NN 的 input 来进行训练。

这里简单介绍一下self-attention:
在self-attention中,有3个矩阵,分别为 key,query,value。words可以与这3个matrix分别进行 product,会得到3个vector:key,query,value。用 target_word的query_vector去与其他的word的key_vector进行product,得到其他word可以表示target_word的比率值,用这些比率值 去 product 各个words的value_vector,即可得到各个word对于target_word的表示,将这些 表示值相加(包括target_word自己的value_vector),即为target_word 带有上下文信息 的vector表示。
attention机制 实质上是 self-attention 的 一种特例,其 query_vector为隐单元中的隐向量,key,value为隐单元的output;

3、ElMo

与Transformer相比,ElMo 也考虑了 上下文信息,但是,ElMo是 无监督 学习。
ElMo 原型 实质上为 NNLM,只不过NNLM中的NN为 多层双向的LSTM,最终获得的word embedding为 多层word embedding的加权求和。

ElMo有1个明显的downside:即其训练出的word embedding是针对具体场景的,比如,在自然灾害类的corpus中,bank的词义很可能为 河流,而非 银行。

为了解决ElMo的这种缺陷,学者又提出了 OpenAI GPT 模型。

4、OpenAI GPT

与ElMo相比,OpenAI GPT使用了Transformer的decoder部分作为模型的基础单元。OpenAI GPT在训练好word embedding之后,还会根据 具体的任务 进行word embedding的fine tune,这个fine tune是一个 有监督学习。因此OpenAI GPT是一个 有监督,考虑上下文的 word embedding方法。

OpenAI GPT有2个明显的downsides:
OpenAI GPT中 pretrain部分 和 fine tune部分 的input 部分可能存在不匹配问题;
OpenAI GPT虽然引用了transformer(self-attention),但是,OpenAT GPT仍然只能看target_word前面的words,而不能看其后面的words,即 attention仍然是 单向性指向(序列模型都是一个word一个word输入的,所以,其只能看target_word前面的words)。

为了解决OpenAI GPT的这2个downsides,学者引入了 BERT;

5、BERT

为解决OpenAI GPT的上述2个问题,BERT引入了以下机制:

  • 为解决 OpenAI GPT 中的 attention 单项性问题,BERT引入了 Masked LM 机制,即 将sentence中的部分word扣掉,用其它的words来预测扣掉的word,这样就解决了OpenAI GPT的 attention单向性问题。
  • 为解决 pretrain和finetune 不匹配的问题,BERT引入了 Nsp Multi-task learning,即,无论input为 单句,双句,或者 更多的句子,都将其 concate 为 单句 的形式。

以上就是几种Model的 异同点,更细节的知识点,大家可以参考 《综合-自然语言处理》分类中的博文:BERT 理论与实战。

你可能感兴趣的:(综合-自然语言处理,transformer,word2vec,bert)