ELMO/GPT/BERT/ERNIE
原文链接: http://chenhao.space/post/af0f9530.html
Word Embedding
我们希望给不同意思的token也要给它们不同的embedding。
比如说这里的“bank”,过去我们的做法是,作为“银行”的意思,就给它一个embedding,作为“河岸”的意思,也给它一个embedding。但是人类的语言是很奇妙的,如 The hostpital has its own blood bank,这里的bank是“库”的意思。
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
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 “潮水 退了 就 知道 谁 没穿 裤子”。
Each layer in deep LSTM can generate a latent representation. Which one should we use?
对于每层生成的Contextualized Word Embedding,ELMO的做法是:“我全都要”
具体做法:
其中的 是从下游任务学习得到的(也就是说不同任务的是不同的)。
下图展示的是每一层的权重情况:
- 最底层是单词的Word Embedding;
- 往上走是第一层双向LSTM中对应单词位置的Embedding,这层编码单词的句法信息更多一些;
- 再往上走是第二层LSTM中对应单词位置的Embedding,这层编码单词的语义信息更多一些。
GPT
Generative Pre-Training (GPT)
GPT采用两阶段过程,第一个阶段是利用语言模型进行预训练,第二阶段通过Fine-tuning的模式解决下游任务。
GPT-2的参数量特别大(15亿),Transfomer层数叠加到48层。
BERT是Transformer的Encoder部分,而GPT是Transformer的Decoder部分。
GPT是单向的self-attention。
GPT只采用Context-before这个单词的上文来进行预测,而抛开了下文。这个选择现在看不是个太好的选择,原因很简单,它没有把单词的下文融合进来,这限制了其在更多应用场景的效果,比如阅读理解这种任务,在做任务的时候是可以允许同时看到上文和下文一起做决策的。
BERT
论文:BERT: Pre-training of Deep Bidirectional Transformers forLanguage Understanding
这篇论文中提到其他模型都不是bidirectional,如GPT(单向)、ELMo(预测每一个词时不能同时考虑到上下文信息,只能通过双向LSTM分别考虑上文信息和下文信息,然后简单拼接)。
而BERT使用的是Transfomer中的Encoder部分,预测一个词时可以同时对上下文进行self-attention。
ELMo是分别以 和 作为目标函数,独立训练两个representation,然后拼接。而BERT则是以 作为目标函数训练LM。
BERT = Encoder of Transformer
Learned from a large amount of text without annotation.
BERT的输入:
BERT的训练:
- Approach 1: Masked LM
输入的句子中随机MASK掉一些词,然后让它在训练的过程中去预测这些被MASK的词。
如果两个词填在同一个地方没有违和感,那么它们就有类似的embedding。
如:潮水 [退了/弱了] 就 知道 …
- 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
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!
How to use BERT
Case 1
在实际训练中,Linear Classifier的参数是随机初始化的(从头开始学的),BERT部分参数只需要 Fine-tune (微调)。
Case 2
这里的 Linear Classifier 和 BERT 的参数都要从头开始学,而且class是给定的。
Case 3
如:Sentence1: “我没钱”,Sentence2: “我双十一会买很多东西”,输出分类Class: “False”。
Case 4
Extraction-based Question Answering (QA) 它的答案是包含在文章里面的。
学到的红色和蓝色的vector的维度是一样的。用红色embedding跟document中的每一个word的embedding做dot product,然后经过softmax找到最大的那个数值对应的word的位置。
也就是红色的vector决定了s等于多少,蓝色的vector决定了e等于多少。
ERNIE
论文:ERNIE: Enhanced Representation through Knowledge Integration
论文的创新点:在BERT的基础上增加了短语级的mask和实体级的mask,这样做的好处是让模型能够学习到更多的prior knowledge,ERNIE 模型通过对词、实体等语义单元的掩码,使得模型学习完整概念的语义表示。相较于 BERT 学习原始语言信号,ERNIE 直接对先验语义知识单元进行建模,增强了模型语义表示能力。(BERT中的MASK对于英文来说是一个word,对于中文来说是一个字)
- Learned by BERT :哈 [mask] 滨是 [mask] 龙江的省会,[mask] 际冰 [mask] 文化名城。
- Learned by ERNIE:[mask] [mask] [mask] 是黑龙江的省会,国际 [mask] [mask] 文化名城。
在 BERT 模型中,通过『哈』与『滨』的局部共现,即可判断出『尔』字,模型没有学习与『哈尔滨』相关的知识。而 ERNIE 通过学习词与实体的表达,使模型能够建模出『哈尔滨』与『黑龙江』的关系,学到『哈尔滨』是『黑龙江』的省会以及『哈尔滨』是个冰雪城市。
论文:ERNIE: Enhanced Language Representation with Informative Entities
作者们认为,现有的预训练语言模型很少考虑知识信息,具体而言即知识图谱(knowledge graphs (KGs)),它可以提供丰富的结构化知识事实,以便更好地理解语言。
该研究结合大规模语料库和知识图谱训练出增强版的语言表征模型 (ERNIE),该模型可以同时充分利用词汇、句法和知识信息。
上图中,实现代表已知的知识事实,虚线代表从句子的各部分抽取出的事实。
如果不知道 **Blowin’ in the Wind ** 和 Chronicles: Volume One 分别是歌曲和书籍,那么模型很难识别它们是 Bob Dylan 的两个工作,即歌曲作家和书籍作家。
但要将外部知识融入到语言表征模型中,面临两大挑战:
- **Structured Knowledge Encoding: ** 对于给定的⽂本,如何有效地提取和编码其在KG中⽤于语⾔表示模型的相关信息事实是⼀个重要的问题。
- Heterogeneous Information Fusion : 语⾔表示的预训练过程与知识表示过程有很⼤的不同,导致了两个独⽴的向量空间。
如何解决?
- 抽取并编码的知识信息:识别文本中的实体,并将这些实体与知识图谱中已存在的实体进行实体对齐,具体做法是采用知识嵌入算法(如TransE),并将得到的entity embedding作为ERNIE模型的输入。基于文本和知识图谱的对齐,ERNIE 将知识模块的实体表征整合到语义模块的隐藏层中。
- 语言模型训练:在训练语言模型时,除了采用bert的MLM和NSP,另外随机mask掉了一些实体并要求模型从知识图谱中找出正确的实体进行对齐。
给定一个token sequence: ,对应的entity sequence为:。
T-Encoder跟BERT一样,把文本的三个embedding求和后送入双向Transformer,提取词法和句法信息:
K-encoder中的模型称为aggregator,输入分为两部分:
- 一部分是底层T-Encoder的输出
- 一部分是利用知识嵌入算法TransE得到的文本中的entity embedding
接着利用 Multi-Head Attention 层对文本和实体分别处理:
接着将实体信息和文本信息进行融合(实体对齐函数为 ):
- 对于有对应实体的输入:
- 对于没有对应实体的输入词:
为GELU**函数。
最后得到的 和 怎么用?
预训练机制(denoising entity auto-encoder ,dEA)
对于句子,随机掩盖token-entity的entity,让模型来预测,搜索空间是句子中所有出现过的entites,即:
参考资料
- 李宏毅深度学习视频
- BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding
- [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)
- https://zhuanlan.zhihu.com/p/47488095
- https://zhuanlan.zhihu.com/p/59436589
- ERNIE: Enhanced Representation through Knowledge Integration
- ERNIE: Enhanced Language Representation with Informative Entities