ELMO/GPT/BERT/ERNIE

原文链接: http://chenhao.space/post/af0f9530.html

Word Embedding

ELMO/GPT/BERT/ERNIE

我们希望给不同意思的token也要给它们不同的embedding。

比如说这里的“bank”,过去我们的做法是,作为“银行”的意思,就给它一个embedding,作为“河岸”的意思,也给它一个embedding。但是人类的语言是很奇妙的,如 The hostpital has its own blood bank,这里的bank是“库”的意思。

ELMO/GPT/BERT/ERNIE

word embedding 的缺陷在于不能表示一词多义,而我们希望相同type但token不同的词能够具有它自己的意思,这样的技术叫做 Contextualized Word Embedding。

Contextualized Word Embedding

  • Each word token has its own embedding (even though it has the same word type).
  • The embeddings of word tokens also depend on its context.
ELMO/GPT/BERT/ERNIE

ELMO

Embeddings from Language Model (ELMO)

ELMO的本质思想是:我事先用语言模型学好一个单词的Word Embedding,此时多义词无法区分,不过这没关系。在我实际使用Word Embedding的时候,单词已经具备了特定的上下文了,这个时候我可以根据上下文单词的语义去调整单词的Word Embedding表示,这样经过调整后的Word Embedding更能表达在这个上下文中的具体含义,自然也就解决了多义词的问题了。所以ELMO本身是个根据当前上下文对Word Embedding动态调整的思路。

RNN-based language models (trained from lots of sentences). 它的网络结构采用了双层双向LSTM。

e.g. given “潮水 退了 就 知道 谁 没穿 裤子”。

ELMO/GPT/BERT/ERNIE

Each layer in deep LSTM can generate a latent representation. Which one should we use?

ELMO/GPT/BERT/ERNIE

对于每层生成的Contextualized Word Embedding,ELMO的做法是:“我全都要”

ELMO/GPT/BERT/ERNIE

具体做法:

ELMO/GPT/BERT/ERNIEELMO/GPT/BERT/ERNIE

其中的 α1α2\large \alpha_1、\alpha_2 是从下游任务学习得到的(也就是说不同任务的α1α2\large \alpha_1、\alpha_2是不同的)。

下图展示的是每一层的权重情况:

ELMO/GPT/BERT/ERNIE
  • 最底层是单词的Word Embedding;
  • 往上走是第一层双向LSTM中对应单词位置的Embedding,这层编码单词的句法信息更多一些;
  • 再往上走是第二层LSTM中对应单词位置的Embedding,这层编码单词的语义信息更多一些。

GPT

Generative Pre-Training (GPT)

GPT采用两阶段过程,第一个阶段是利用语言模型进行预训练,第二阶段通过Fine-tuning的模式解决下游任务。

ELMO/GPT/BERT/ERNIE

GPT-2的参数量特别大(15亿),Transfomer层数叠加到48层。

BERT是Transformer的Encoder部分,而GPT是Transformer的Decoder部分。

ELMO/GPT/BERT/ERNIE

ELMO/GPT/BERT/ERNIE

GPT是单向的self-attention

ELMO/GPT/BERT/ERNIEELMO/GPT/BERT/ERNIE

GPT只采用Context-before这个单词的上文来进行预测,而抛开了下文。这个选择现在看不是个太好的选择,原因很简单,它没有把单词的下文融合进来,这限制了其在更多应用场景的效果,比如阅读理解这种任务,在做任务的时候是可以允许同时看到上文和下文一起做决策的。


BERT

论文:BERT: Pre-training of Deep Bidirectional Transformers forLanguage Understanding

这篇论文中提到其他模型都不是bidirectional,如GPT(单向)、ELMo(预测每一个词时不能同时考虑到上下文信息,只能通过双向LSTM分别考虑上文信息和下文信息,然后简单拼接)。

而BERT使用的是Transfomer中的Encoder部分,预测一个词时可以同时对上下文进行self-attention。

ELMo是分别以 P(wiw1,w2,...,wi1)P(w_i|w_1,w_2,...,w_{i-1})P(wiwi+1,...,wn)P(w_i|w_{i+1},...,w_n) 作为目标函数,独立训练两个representation,然后拼接。而BERT则是以 P(wiw1,...,wi1,wi+1,...,wn)P(w_i|w_1,...,w_{i-1},w_{i+1},...,w_n) 作为目标函数训练LM。

ELMO/GPT/BERT/ERNIE

BERT = Encoder of Transformer

Learned from a large amount of text without annotation.

ELMO/GPT/BERT/ERNIE

ELMO/GPT/BERT/ERNIE

BERT的输入:

ELMO/GPT/BERT/ERNIE

BERT的训练:

  • Approach 1: Masked LM

输入的句子中随机MASK掉一些词,然后让它在训练的过程中去预测这些被MASK的词。

如果两个词填在同一个地方没有违和感,那么它们就有类似的embedding。

如:潮水 [退了/弱了] 就 知道 …

ELMO/GPT/BERT/ERNIE
  • Approach 2: Next Sentence Prediction

给BERT两个句子,一个是“醒醒 吧”,一个是“你 没有 妹妹”,把它们拼接在一起

[CLS]: the position that outputs classification results

[CLS]通常放在句子的开头,意思是我们要在这个位置上做分类。(为什么不是放在句子的末尾?如果说BERT的内部结构是一个正向的RNN,那么放在句子的末尾是合理的。但是BERT的内部结构是Transformer,Transformer的内部是self-attention,所以不管放在哪个位置其实影响都不大)

[SEP]: the boundary of two sentences

ELMO/GPT/BERT/ERNIE

Approaches 1 and 2 are used at the same time. 同时使用这两种方法,它会学的最好。

谷歌用了16个自己的TPU集群(一共64块TPU)来训练Large版本的BERT,一共花了4天的时间。

OpenAI当时训练GPT用了将近1个月的时间,而如果用同等的硬件条件来训练BERT估计需要1年的时间。

Money Is All You Need!

ELMO/GPT/BERT/ERNIE

How to use BERT

ELMO/GPT/BERT/ERNIE

Case 1

ELMO/GPT/BERT/ERNIE

在实际训练中,Linear Classifier的参数是随机初始化的(从头开始学的),BERT部分参数只需要 Fine-tune (微调)。

Case 2

ELMO/GPT/BERT/ERNIE

这里的 Linear Classifier 和 BERT 的参数都要从头开始学,而且class是给定的。

Case 3

ELMO/GPT/BERT/ERNIE

如:Sentence1: “我没钱”,Sentence2: “我双十一会买很多东西”,输出分类Class: “False”。

Case 4

Extraction-based Question Answering (QA) 它的答案是包含在文章里面的。

ELMO/GPT/BERT/ERNIE

ELMO/GPT/BERT/ERNIE

ELMO/GPT/BERT/ERNIE

学到的红色和蓝色的vector的维度是一样的。用红色embedding跟document中的每一个word的embedding做dot product,然后经过softmax找到最大的那个数值对应的word的位置。

ELMO/GPT/BERT/ERNIE

也就是红色的vector决定了s等于多少,蓝色的vector决定了e等于多少。


ERNIE

论文:ERNIE: Enhanced Representation through Knowledge Integration

论文的创新点:在BERT的基础上增加了短语级的mask实体级的mask,这样做的好处是让模型能够学习到更多的prior knowledge,ERNIE 模型通过对词、实体等语义单元的掩码,使得模型学习完整概念的语义表示。相较于 BERT 学习原始语言信号,ERNIE 直接对先验语义知识单元进行建模,增强了模型语义表示能力。(BERT中的MASK对于英文来说是一个word,对于中文来说是一个字)

ELMO/GPT/BERT/ERNIE

  • Learned by BERT :哈 [mask] 滨是 [mask] 龙江的省会,[mask] 际冰 [mask] 文化名城。
  • Learned by ERNIE:[mask] [mask] [mask] 是黑龙江的省会,国际 [mask] [mask] 文化名城。

在 BERT 模型中,通过『哈』与『滨』的局部共现,即可判断出『尔』字,模型没有学习与『哈尔滨』相关的知识。而 ERNIE 通过学习词与实体的表达,使模型能够建模出『哈尔滨』与『黑龙江』的关系,学到『哈尔滨』是『黑龙江』的省会以及『哈尔滨』是个冰雪城市。

ELMO/GPT/BERT/ERNIE

ELMO/GPT/BERT/ERNIE

ELMO/GPT/BERT/ERNIE

论文:ERNIE: Enhanced Language Representation with Informative Entities

作者们认为,现有的预训练语言模型很少考虑知识信息,具体而言即知识图谱(knowledge graphs (KGs)),它可以提供丰富的结构化知识事实,以便更好地理解语言。

该研究结合大规模语料库和知识图谱训练出增强版的语言表征模型 (ERNIE),该模型可以同时充分利用词汇、句法和知识信息。

ELMO/GPT/BERT/ERNIE

上图中,实现代表已知的知识事实,虚线代表从句子的各部分抽取出的事实。

如果不知道 **Blowin’ in the Wind ** 和 Chronicles: Volume One 分别是歌曲和书籍,那么模型很难识别它们是 Bob Dylan 的两个工作,即歌曲作家和书籍作家。

但要将外部知识融入到语言表征模型中,面临两大挑战:

  • **Structured Knowledge Encoding: ** 对于给定的⽂本,如何有效地提取和编码其在KG中⽤于语⾔表示模型的相关信息事实是⼀个重要的问题。
  • Heterogeneous Information Fusion : 语⾔表示的预训练过程与知识表示过程有很⼤的不同,导致了两个独⽴的向量空间。

如何解决?

  1. 抽取并编码的知识信息:识别文本中的实体,并将这些实体与知识图谱中已存在的实体进行实体对齐,具体做法是采用知识嵌入算法(如TransE),并将得到的entity embedding作为ERNIE模型的输入。基于文本和知识图谱的对齐,ERNIE 将知识模块的实体表征整合到语义模块的隐藏层中。
  2. 语言模型训练:在训练语言模型时,除了采用bert的MLM和NSP,另外随机mask掉了一些实体并要求模型从知识图谱中找出正确的实体进行对齐。

ELMO/GPT/BERT/ERNIE

给定一个token sequence:{w1,...,wn}\{w_1,...,w_n\} ,对应的entity sequence为:{e1,...,em}\{e_1,...,e_m\}

T-Encoder跟BERT一样,把文本的三个embedding求和后送入双向Transformer,提取词法和句法信息:

ELMO/GPT/BERT/ERNIE

K-encoder中的模型称为aggregator,输入分为两部分:

  • 一部分是底层T-Encoder的输出
  • 一部分是利用知识嵌入算法TransE得到的文本中的entity embedding

接着利用 Multi-Head Attention 层对文本和实体分别处理:

ELMO/GPT/BERT/ERNIE

接着将实体信息和文本信息进行融合(实体对齐函数为 ek=f(wj)e_k=f(w_j)):

  • 对于有对应实体的输入:
ELMO/GPT/BERT/ERNIE
  • 对于没有对应实体的输入词:
ELMO/GPT/BERT/ERNIE

σ\sigma 为GELU**函数。

最后得到的 eeww 怎么用?

预训练机制(denoising entity auto-encoder ,dEA)

对于句子,随机掩盖token-entity的entity,让模型来预测,搜索空间是句子中所有出现过的entites,即:

ELMO/GPT/BERT/ERNIE

参考资料

  1. 李宏毅深度学习视频
  2. BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding
  3. [https://github.com/NLP-LOVE/ML-NLP/tree/master/NLP/16.8%20BERT](https://github.com/NLP-LOVE/ML-NLP/tree/master/NLP/16.8 BERT)
  4. https://zhuanlan.zhihu.com/p/47488095
  5. https://zhuanlan.zhihu.com/p/59436589
  6. ERNIE: Enhanced Representation through Knowledge Integration
  7. ERNIE: Enhanced Language Representation with Informative Entities