【cs224n-11】Contextual Word Representations: BERT
词嵌入是NLP深度学习的基础,以Word2Vec、Glove和FastText为代表的静态词向量为文本在神经网络中的表示提供了一种强有力的工具。然而这种静态的词嵌入存在的问题是,以上下文无关的方式应用,对每个单词仅有一种表示,而通常单词的含义依赖于其上下文会有所不同,而且每个单词不仅有一方面特征,而应有各方面特征如语义特征,语法特征等。解决的方式是,在文本语料库上训练上下文表示。
静态表示:
上下文动态表示:
上下文表示发展过程:
1.Semi-Supervised Sequence Learning, Google, 2015
利用序列的自动编码器(autoencoder提前用海量无标注数据来训练,得到的参数可以用于后续有监督学习模型的初始化参数。
2.ELMo: Deep Contextual Word Embeddings, AI2 & University of Washington, 2017
ELMO的基本思想是利用双向的LSTM结构,对于某个语言模型的目标,在大量文本上进行预训练,从LSTM layer中得到contextual embedding,其中较低层的LSTM代表了比较简单的语法信息,而上层的LSTM捕捉的是依赖于上下文的语义信息。ELMO的全称就是Embeddings from Language Models。对于下游的任务,再将这些不同层的向量线性组合,再做监督学习。
3.GPT:Improving Language Understanding by Generative Pre-Training, OpenAI, 2018
- 不同于wordEmbedding、ELMo 以无监督的方式学习到一些特征,然后利用这些特征喂给一些特定的有监督模型,这里是先无监督的pre−train,然后直接fine-tune预训练后的模型,迁移到一些特定的有监督任务上。
- ELMo方法中,训练基于LSTM的双向语言模型能结合上下文内容学习到语义更丰富的词表征,GPT预训练的语言模型中使用了transformer(Masked Multi-Head Attention,单向)结构,相对而言,transformer更加鲁棒,在长距离依赖上的效果更好,迁移效果也更好。
4.BERT:Pretraining of Deep Bidirectional Transformers for Language Understanding
BERT原理与GPT有相似之处,不过它利用了双向的信息
随机将输入中15%的token换成[mask]这个字符,相应的也使用这个字符的词向量,在这个字符的最后一层接上全连接+softmax预测原本的token的概率,使这个概率最大(这就是语言模型啦)。只需预测换成[mask]的token,不用像ELMO和openAI GPT一样预测所有token。但是这样的话在推理的时候[mask]从来不会出现在输入中,这样就不同分布了,怎么办呢?
80%的时间将token换成[mask],10%的时间换成其他某个token,10%还是这个token。
下一个句子预测(next sentence prediction)
从一篇文档中,找出句子对,其中50%一个句子是另一个句子的下一句,50%不是。就用语言模型预测句子对是不是下一个这种关系。这样语言模型可以学到句子间的关系。
输入词向量(input representation)
图中token embedding就是普通的词向量,segment embedding是句子A中所有token用的是学到的句子A的embedding,句子B中所有token用的是学到的句子B的embedding,position embedding就是token位于句子的第几个单词。将这三种embedding加起来即可。
5.RoBERTa: A Robustly Optimized BERT Pretraining Approach (Liu et al, University of Washington and Facebook, 2019)
RoBERTa 模型是BERT 的改进版, 与BERT相比使用了更大的模型参数量,更大bacth size ,更多的训练数据。
RoBERTa在训练方法上有以下改进:
- 去掉下一句预测(NSP)任务
- 动态掩码。BERT 依赖随机掩码和预测 token。原版的 BERT 实现在数据预处理期间执行一次掩码,得到一个静态掩码。 而 RoBERTa 使用了动态掩码:每次向模型输入一个序列时都会生成新的掩码模式。这样,在大量数据不断输入的过程中,模型会逐渐适应不同的掩码策略,学习不同的语言表征。
- 文本编码。Byte-Pair Encoding(BPE)是字符级和词级别表征的混合,支持处理自然语言语料库中的众多常见词汇。原版的 BERT 实现使用字符级别的 BPE 词汇,大小为 30K,是在利用启发式分词规则对输入进行预处理之后学得的。Facebook 研究者没有采用这种方式,而是考虑用更大的 byte 级别 BPE 词汇表来训练 BERT,这一词汇表包含 50K 的 subword 单元,且没有对输入作任何额外的预处理或分词。
6.XLNet: Generalized Autoregressive Pretraining for Language Understanding (Yang et al, CMU and Google, 2019)
自回归语言模型(AR)和自编码语言模型(AE)
AR: 根据上文内容预测下一个可能跟随的单词,就是常说的自左向右的语言模型任务,或者反过来也行,就是根据下文预测前面的单词,这种类型的LM被称为自回归语言模型。
缺点: 只能利用上文或者下文的信息,不能同时利用上文和下文的信息,当然,貌似ELMO这种双向都做,然后拼接看上去能够解决这个问题,因为融合模式过于简单,所以效果其实并不是太好。
优点: 跟下游NLP任务有关,比如生成类NLP任务,比如文本摘要,机器翻译等,在实际生成内容的时候,就是从左向右的,自回归语言模型天然匹配这个过程。
AE: 预训练模型不会进行明确的密度估计,而是从残缺的输入中重建原始数据。例子: BERT。给出输入 token 序列,BERT 将一部分 token 替换为特殊符号 [MASK],随后训练模型从残缺版本恢复原始的 token。由于密度估计不是目标的一部分,BERT 允许使用双向语境进行重建。
优点:它能比较自然地融入双向语言模型,同时看到被预测单词的上文和下文
缺点:在输入侧引入[Mask]标记,导致预训练阶段和Fine-tuning阶段不一致的问题,因为Fine-tuning阶段是看不到[Mask]标记的。此外,由于输入中预测的 token 是被 mask 的,因此 BERT 无法像自回归语言建模那样使用乘积法则(product rule)对联合概率进行建模。
XLNet的出发点就是:能否融合自回归LM和DAE LM两者的优点。就是说如果站在自回归LM的角度,如何引入和双向语言模型等价的效果;如果站在DAE LM的角度看,它本身是融入双向语言模型的,如何抛掉表面的那个[Mask]标记,让预训练和Fine-tuning保持一致。
XLNet优点:
- XLNet把一个序列所有可能的排列都拿来作为LM的输入,这使得每一个位置上都能够利用到所有其他的位置的信息,从而真正的捕获了上下文。
- XLNet作为AR语言模型,不再依赖于data corruption。从而避免了上面提到的BRRT的两个缺陷
XLNet详解参考:https://blog.****.net/triplemeng/article/details/94437324
7.ALBERT: A Lite BERT for Self-supervised Learning of Language Representations (Lan et al, Google and TTI Chicago, 2019)
ALBERT 通过两个参数削减技术克服了扩展预训练模型面临的主要障碍。
- 第一个技术是对嵌入参数化进行因式分解。研究者将大的词汇嵌入矩阵分解为两个小的矩阵,从而将隐藏层的大小与词汇嵌入的大小分离开来。这种分离使得隐藏层的增加更加容易,同时不显著增加词汇嵌入的参数量。
- 第二种技术是跨层参数共享。这一技术可以避免参数量随着网络深度的增加而增加。两种技术都显著降低了 BERT 的参数量,同时不对其性能造成明显影响,从而提升了参数效率。ALBERT 的配置类似于 BERT-large,但参数量仅为后者的 1/18,训练速度却是后者的 1.7 倍。
详情参考:https://blog.****.net/weixin_37947156/article/details/101529943
8.T5:Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer
-
它依然是基于Transformer的预训练模型
-
将主流NLP任务(MT, QA, 摘要,分类)都转换为Text-to-Text的任务
详情参考:https://blog.****.net/JaydeeMa/article/details/103117664
9.ELECTRA: Pre-training Text Encoders as Discriminators Rather Than Generators (Clark et al, 2020)
将BERT与类似于GAN的结构相结合,并辅以新的预训练任务来做预训练
- 训练模型区分局部可信文本和真实文本
- 当下流行的MLM(Masked Language Modeling)方法会大大增加计算开销,原因:模型只学到每个example中15%的tokens信息,而且有些token可能会很简单。ELECTRA最主要的贡献是提出了新的预训练任务和框架,把生成式的Masked language model(MLM)预训练任务改成了判别式的Replaced token detection(RTD)任务,判断当前token是否被语言模型替换过。
详情参考:https://blog.****.net/JaydeeMa/article/details/103187453
补充:Distillation
BERT和其他预训练的语言模型都非常庞大和昂贵,公司如何将它们应用于低延迟的生产服务?
答案是:Distillation(知识蒸馏)