精华内容
下载资源
问答
  • 预训练语言模型
    千次阅读
    2020-05-27 00:47:04

    本系列文章是笔者以邱锡鹏老师《Pre-trained Models for Natural Language Processing: A Survey》为主要参考材料所做的关于“预训练语言模型综述”的记录,所涉及之素材也包括其他相关综述与未被纳入此综述的工作,分享出来与大家交流讨论。此篇为系列第一篇,记录预训练语言模型及其历史。

    第二、三篇跳转可阅:

    预训练语言模型综述(二)—— 预训练任务及训练策略
    预训练语言模型综述(三)—— 预训练语言模型的实际使用

    补充知识

    1. 一个好的语言模型应该可以从语料中:

      (1)捕获语言的特征(linguistic features),包括但不限于
      语义特征(semantic features):词与句子的语义
      句法1特征(syntactic features):即句子的结构组织以及句子中词语次之间的依赖关系。
      (2)反映语言现象:
      一词多义(polysemy), 指代(anaphora), 语用学(pragmatics,现多指言外之意)等。

    1. 词的表示方法(Word Representations/Word Embeddings)
      把文本向量化通常是自然语言处理的第一步。词的向量表示有最简单的One-hot Representation,以及用低维度稠密向量表示的Distributed Representation2

    NLP方法/模型发展简史

    1. 非神经网络方法

    非神经网络方法通常依赖于离散的人工特征,应用起来也比较困难。

    2. 早期神经网络模型

    早期神经网络模型多使用RNN、CNN等神经网络,同时网络也较浅。主要原因是缺少针对各种NLP任务的大规模数据集,模型如果过深极易引起过拟合,在实际使用中难以确保泛化能力。

    3. 第一代预训练语言模型

    第一代预训练语言模型学习Non-contextual(static) word embeddings,即与上下文无关的、静态的词向量。第一代预训练语言模型的做法是把词汇表中的每一个词汇映射到一个lookup table中,训练过程就是得到这个lookup table的过程。得到这个lookup table后,把每个词的One-hot乘以lookup table就得到这个词的词向量了。

    第一代预训练语言模型有两个明显的缺陷,一是无法处理一词多义等语言现象,因为它没有把词与词的上下文联系起来;二是OOV(Out of Vocabulary)问题,如果有些词没有在训练数据中出现过,那么通过lookup table中也无法得到它的词向量,为了解决OOV问题,我们可以把词进一步分割,变成字符等形式3,这样就可以一定程度上解决OOV问题了。

    第一代预训练语言模型相对于第二代预训练语言模型还是比较浅的。两个经典结构是Continuous Bag-of-Words(CBOW)和Skip-Gram(SG),最典型的实现就是word2vec。还有一个经典结构是GloVe,也被广泛用于获取词向量。
    推广开来,同时期还有不少工作研究句向量、段向量乃至篇章向量(如Skip-thought vectors,Paragraph vector,Context2Vec等)。将这些工作也归类为第一代预训练语言模型的原因是他们也是把输入映射为固定维度的向量表示。

    4. 第二代预训练语言模型

    第二代预训练语言模型学习contextual(dynamical) word embeddings,即与上下文相关的、动态的词向量。

    第二代预训练语言模型的重要代表是ElMo(Embeddings from Language Models)、OpenAI GPT (Generative Pre-training) 和BERT(Bidirectional Encoder Representation from Transformer) 。

    得益于更强的算力、深度模型的发展、NLP预训练任务的设计、大规模训练语料的利用、各种训练技巧的出现,第二代预训练语言模型蓬勃发展、越来越强大。

    第一代与第二代预训练语言模型

    5. 扩展的预训练语言模型

    随着预训练语言模型的发展,研究人员已经不再满足于使用简单范式和简单语料训练预训练语言模型,由此催生了一系列扩展的预训练语言模型。其中包括:知识增强(Knowledge-Enriched)的预训练模型、多语言/跨语言(Multilingual)的预训练模型、针对特定语言(Language-Specific)的预训练模型、多模态(Multi-Modal,包括视频-文本、图像-文本、声音-文本等)的预训练模型、针对特定领域(Domain-Specific)的预训练模型、针对特定任务(Task-Specific)的预训练模型等。此外,还有一些预训练模型是在大型预训练模型上做出一些修改/压缩等操作所得的,包括修剪、量化、参数共享、蒸馏、模块替换等,这其中也涉及到如何应用预训练语言模型的问题,在讲到预训练模型的应用是还会进一步介绍。下图是邱老师综述中关于扩展的预训练模型及相关工作的归纳:

    扩展的预训练语言模型

    NLP深度神经网络的发展


    当前,NLP任务通用的神经网络架构如图1所示(其实就是第二代预训练语言模型的架构)。
    邱老师的文章把Neural Contextual Encoders分为了两类。
    一类是Sequence Models,此类模型是按序列顺序来获取词的上下文(包括CNN模型和RNN模型(LSTM和GRU)),无法很好地处理长期依赖(Long-term dependency)。
    另一类是Graph-based Models,此类模型按预定义的树形或图结构(如句法结构、语义联系)建立词与上下文的联系,但是如何建立好的此类结构是比较困难的。因此,全连接与自注意力在强大算力的加持下就提供了一个更为直接的方法:可以建立全连接图然后让模型学习两个词之间的联系。

    Contextual EncodersNN TypesReferences
    Sequence ModelsCNN[1]Y. Kim, “Convolutional Neural Networks for Sentence Classification,” in Proceedings of the 2014 Conference on Empirical Methods in Natural Language Processing (EMNLP), Doha, Qatar, Oct. 2014, pp. 1746–1751, doi: 10.3115/v1/D14-1181.
    LSTM[1]A. M. Dai and Q. V. Le, “Semi-supervised Sequence Learning,” arXiv:1511.01432 [cs], Nov. 2015, Accessed: May 17, 2020. [Online]. Available: http://arxiv.org/abs/1511.01432.
    [2]P. Liu, X. Qiu, and X. Huang, “Recurrent Neural Network for Text Classification with Multi-Task Learning,” p. 7.
    GRU[1]R. Kadlec, M. Schmid, O. Bajgar, and J. Kleindienst, “Text Understanding with the Attention Sum Reader Network,” arXiv:1603.01547 [cs], Jun. 2016, Accessed: May 17, 2020. [Online]. Available: http://arxiv.org/abs/1603.01547.
    [2]L. Li, M. Huang, Y. Liu, S. Qian, and X. He, “Contextual label sensitive gated network for biomedical event trigger extraction,” Journal of Biomedical Informatics, vol. 95, p. 103221, Jul. 2019, doi: 10.1016/j.jbi.2019.103221.
    Graph-based ModelsRecursive NN[1]R. Socher et al., “Recursive Deep Models for Semantic Compositionality Over a Sentiment Treebank,” in Proceedings of the 2013 Conference on Empirical Methods in Natural Language Processing, Seattle, Washington, USA, Oct. 2013, pp. 1631–1642, Accessed: May 17, 2020. [Online]. Available: https://www.aclweb.org/anthology/D13-1170.
    TreeLSTM[1]K. S. Tai, R. Socher, and C. D. Manning, “Improved Semantic Representations From Tree-Structured Long Short-Term Memory Networks,” in Proceedings of the 53rd Annual Meeting of the Association for Computational Linguistics and the 7th International Joint Conference on Natural Language Processing (Volume 1: Long Papers), Beijing, China, Jul. 2015, pp. 1556–1566, doi: 10.3115/v1/P15-1150.
    [2]X. Zhu, P. Sobhani, and H. Guo, “Long short-term memory over recursive structures,” in Proceedings of the 32nd International Conference on International Conference on Machine Learning - Volume 37, Lille, France, Jul. 2015, pp. 1604–1612, Accessed: May 16, 2020. [Online].
    GCN[1]T. N. Kipf and M. Welling, “Semi-Supervised Classification with Graph Convolutional Networks,” arXiv:1609.02907 [cs, stat], Feb. 2017, Accessed: May 17, 2020. [Online]. Available: http://arxiv.org/abs/1609.02907.

    [1] https://www.zhihu.com/question/31370551?sort=created
    [2] Z. S. Harris, “Distributional Structure,” WORD, vol. 10, no. 2–3, pp. 146–162, Aug. 1954, doi: 10.1080/00437956.1954.11659520.


    1. 容易混淆的概念有语法与词法,词法是分析词与词的变形,即形态学(morphology);而语法是一个更完整的概念,包括音韵学(phonology)、形态学(morphology)与造句法(syntax)[1]。 ↩︎

    2. Distributed Representation与Distributional Representation容易混淆。通常认为,Distributed Representation是与Local Representation(One-hot Representation就属于Local Representation)相对的,用到低维稠密向量来表示词的语义,单独的维度是不表达什么含义的,只有整个向量表达出含义;而One-hot Representation则是高维稀疏向量来表示词的语义,只有一个维度表示含义。而Distributional Representation的理论基础则是Harris在1954年提出的分布假说(Distributional Hypothesis)[2],即上下文相似的词,其语义也相近。所以说凡是用到上下文的Representation都可以称为Distributional Representation,如传统的基于计数的词向量、Word2Vec以及contextualized word vector都属于Distributional Representation。 ↩︎

    3. 代表工作有CharCNN、FastText和Byte-Pair Encoding (BPE)等。 ↩︎

    更多相关内容
  • 1-2 大规模预训练语言模型在百度搜索中的应用研究-王帅强.pdf
  • 机器阅读理解(MRC)旨在教机器阅读和理解...随着深度神经网络的爆发和上下文语言模型(contextualized language models-CLM)的发展,MRC的研究经历了两个重大突破。作为一种现象,MRC和CLM对NLP社区有很大的影响。
  • 随着自然语言处理(NLP)领域中预训练技术的快速发展,将外部知识引入到预训练语言模型的知识驱动方法在NLP任务中表现优异,知识表示学习和预训练技术为知识融合的预训练方法提供了理论依据。
  • 迁移学习从根本上改变了自然语言处理(NLP)的处理范式。许多最先进的模型首先在大型文本语料库上进行预先训练,然后在下游任务上进行微调。
  • 预训练语言模型

    千次阅读 2021-01-22 10:18:28
    预训练语言模型分类 』 单向特征、自回归模型(单向模型): ELMO/ULMFiT/SiATL/GPT1.0/GPT2.0 双向特征、自编码模型(BERT系列模型): BERT/ERNIE/SpanBERT/RoBERTa 双向特征、自回归模型“ XLNet 『各模型之间...

    『预训练语言模型分类 』

    单向特征、自回归模型(单向模型):
    ELMO/ULMFiT/SiATL/GPT1.0/GPT2.0
    双向特征、自编码模型(BERT系列模型):
    BERT/ERNIE/SpanBERT/RoBERTa
    双向特征、自回归模型“
    XLNet

    『各模型之间的联系 』

    传统word2vec无法解决一词多义,语义信息不够丰富,诞生了ELMO
    ELMO以lstm堆积,串行且提取特征能力不够,诞生了GPT
    GPT 虽然用transformer堆积,但是是单向的,诞生了BERT
    BERT虽然双向,但是mask不适用于自编码模型,诞生了XLNET
    BERT中mask代替单个字符而非实体或短语,没有考虑词法结构/语法结构,诞生了ERNIE
    为了mask掉中文的词而非字,让BERT更好的应用在中文任务,诞生了BERT-wwm
    Bert训练用更多的数据、训练步数、更大的批次,mask机制变为动态的,诞生了RoBERTa
    ERNIE的基础上,用大量数据和先验知识,进行多任务的持续学习,诞生了ERNIE2.0
    BERT-wwm增加了训练数据集、训练步数,诞生了BERT-wwm-ext
    BERT的其他改进模型基本考增加参数和训练数据,考虑轻量化之后,诞生了ALBERT

    「 1.ELMO 」
    “Embedding from Language Models"

    NAACL18 Best Paper

    传统word2vec无法解决一词多义,语义信息不够丰富,诞生了ELMO
    ELMO以lstm堆积,串行且提取特征能力不够,诞生了GPT

    特点:传统的词向量(如word2vec)是静态的/上下文无关的,而ELMO解决了一词多义;ELMO采用双层双向LSTM
    缺点:lstm是串行,训练时间长;相比于transformer,特征提取能力不够(ELMO采用向量拼接)
    使用分为两阶段:预训练+应用于下游任务,本质就是根据当前上下文对Word Embedding进行动态调整的过程:

    1. 用语言模型进行预训练
      在这里插入图片描述
      左边的前向双层LSTM是正方向编码器,顺序输入待预测单词w的上文;右边则是反方向编码器,逆序输入w的下文

    2. 训练好之后,输入一个新句子s,每个单词都得到三个Embedding:1)单词的Word Embedding 2)第一层关于单词位置的Embedding 3)第二层带有语义信息的Embedding(上述的三个Embedding 、LSTM网络结果均为训练结果)

    3. 下游任务时,从预训练网络中提取对应单词的网络各层的Word Embedding作为新特征补充到下游任务中。 如QA任务:输入Q/A句子,对三个Embedding分配权重,整合生成新的Embedding

    「 2.GPT 」

    • 与ELMO的不同:
      GPT只用了transformer的decoder模块提取特征,而不是Bi-LSTM;堆叠12个
      单向(根据上文预测单词,利用mask屏蔽下文)
      在这里插入图片描述

    GPT中的mask如下图所示,mask之后要进行softmax:
    在这里插入图片描述
    在这里插入图片描述

    • GPT依然分为两阶段:单向语言模型预训练(无监督)+fine tuning应用到下游任务(有监督)

    第一阶段(预训练):
    在这里插入图片描述
    GPT的训练过程

    第二阶段(应用于下游任务):

    向GPT的网络结构看齐,把任务的网络结构改造成和 GPT的网络结构是一样的。做法如下:
    在这里插入图片描述
    对于分类问题,不用怎么动,加上一个起始和终结符号即可;
    对于句子关系判断问题,比如 Entailment,两个句子中间再加个分隔符即可;
    对文本相似性判断问题,把两个句子顺序颠倒下做出两个输入即可,这是为了告诉模型句子顺序不重要;
    对于多项选择问题,则多路输入,每一路把文章和答案选项拼接作为输入即可。从上图可看出,这种改造还是很方便的,不同任务只需要在输入部分施工即可。

    效果:在 12 个任务里,9 个达到了最好的效果,有些任务性能提升非常明显。

    「 3.BERT 」

    • 1)与GPT的区别:
      双向
      用的是transformer的encoder(GPT用的是decoder,ELMO用的是Bi-LSTM)
      多任务学习方式训练:预测目标词和预测下一句
      优点:效果好、普适性强、效果提升大
      缺点:硬件资源的消耗巨大、训练时间长;预训练用了[MASK]标志,影响微调时模型表现

    • 2)预训练:

    1. Embedding layer
      三个Embedding 求和而得,分别是:
      a.Token Embeddings:词向量,首单词是[CLS]标志,可用于分类任务
      b.Segment Embeddings:用[SEP]标志将句子分为两段,因为预训练不光做LM还要做以两个句子为输入的分类任务
      c.Position Embeddings:和之前文章中的Transformer不同,不是三角函数而是学习出来的
      在这里插入图片描述

    Question:BERT的输入和输出?

    从上图中可以看出,BERT 模型通过查询字向量表将文本中的每个字转换为一维向量,作为模型输入模型输出则是输入各字对应的融合全文语义信息后的向量表示。此外,模型输入除了字向量(英文中对应的是 Token Embeddings),还包含另外两个部分:

    文本向量(英文中对应的是 Segment Embeddings):该向量的取值在模型训练过程中自动学习,用于刻画文本的全局语义信息,并与单字/词的语义信息相融合

    位置向量(英文中对应的是 Position Embeddings):由于出现在文本不同位置的字/词所携带的语义信息存在差异(比如:“我爱你”和“你爱我”),因此,BERT 模型对不同位置的字/词分别附加一个不同的向量以作区分

    最后,BERT 模型将字向量、文本向量和位置向量的加和作为模型输入。特别地,在目前的 BERT 模型中,文章作者还将英文词汇作进一步切割,划分为更细粒度的语义单位(WordPiece),例如:将 playing 分割为 play 和##ing;此外,对于中文,目前作者未对输入文本进行分词,而是直接将单字作为构成文本的基本单位。

    需要注意的是,上图中只是简单介绍了单个句子输入 BERT 模型中的表示,实际上,在做 Next Sentence Prediction 任务时,在第一个句子的首部会加上一个[CLS] token,在两个句子中间以及最后一个句子的尾部会加上一个[SEP] token

    Question:BERT 的 embedding 向量如何得来的?

    以中文为例,「BERT 模型通过查询字向量表将文本中的每个字转换为一维向量,作为模型输入(还有 position embedding 和 segment embedding);模型输出则是输入各字对应的融合全文语义信息后的向量表示。」

    而对于输入的 token embedding、segment embedding、position embedding 都是随机生成的,需要注意的是在 Transformer 论文中的 position embedding 由 sin/cos 函数生成的固定的值,而在这里代码实现中是跟普通 word embedding 一样随机生成的,可以训练的。作者这里这样选择的原因可能是 BERT 训练的数据比 Transformer 那篇大很多,完全可以让模型自己去学习。

    1. 预测目标词Masked LM

    随机挑选一个句子中15%的词,用上下文来预测。这15%中,80%用[mask]替换,10%随机取一个词替换,10%不变。用非监督学习的方法预测这些词。

    这么做的主要原因是:在后续微调任务中语句中并不会出现 [MASK] 标记,而且这么做的另一个好处是:预测一个词汇时,模型并不知道输入对应位置的词汇是否为正确的词汇( 10% 概率),这就迫使模型更多地依赖于上下文信息去预测词汇,并且赋予了模型一定的纠错能力。上述提到了这样做的一个缺点,其实这样做还有另外一个缺点,就是每批次数据中只有 15% 的标记被预测,这意味着模型可能需要更多的预训练步骤来收敛。

    Question:BERT 模型为什么要用 mask?它是如何做 mask 的?其 mask 相对于 CBOW 有什么异同点?

    1. 预测下一句 Next Sentence Prediction
      选择句子对A+B,其中50%的B是A的下一句,50%为语料库中随机选取。

    这个类似于「段落重排序」的任务,即:将一篇文章的各段打乱,让我们通过重新排序把原文还原出来,这其实需要我们对全文大意有充分、准确的理解。

    Next Sentence Prediction 任务实际上就是段落重排序的简化版:只考虑两句话,判断是否是一篇文章中的前后句。在实际预训练过程中,文章作者从文本语料库中随机选择 50% 正确语句对和 50% 错误语句对进行训练,与 Masked LM 任务相结合,让模型能够更准确地刻画语句乃至篇章层面的语义信息。

    BERT 模型通过对 Masked LM 任务和 Next Sentence Prediction 任务进行联合训练,使模型输出的每个字 / 词的向量表示都能尽可能全面、准确地刻画输入文本(单句或语句对)的整体信息,为后续的微调任务提供更好的模型参数初始值。

    • 3)fine-tuning(应用于下游任务时微调):

    • BERT的微调(fine tuning)参考参数:
      Batch Size:16 or 32
      Learning Rate: 5e-5, 3e-5, 2e-5
      Epochs:2, 3, 4

    • BERT 的 Fine-Tuning 共分为 4 中类型:
      单句子分类任务
      单句子标注任务
      句子对分类任务
      问答任务
      在这里插入图片描述

    如果现在的任务是 classification,首先在输入句子的开头加一个代表分类的符号 [CLS],然后将该位置的 output,丢给 Linear Classifier,让其 predict 一个 class 即可。整个过程中 Linear Classifier 的参数是需要从头开始学习的,而 BERT 中的参数微调就可以了

    这里李宏毅老师有一点没讲到,就是为什么要用第一个位置,即 [CLS] 位置的 output。这里我看了网上的一些博客,结合自己的理解解释一下。因为 BERT 内部是 Transformer,而 Transformer 内部又是 Self-Attention,所以 [CLS] 的 output 里面肯定含有整句话的完整信息,这是毋庸置疑的。但是 Self-Attention 向量中,自己和自己的值其实是占大头的,现在假设使用 的 output 做分类,那么这个 output 中实际上会更加看重 ,而 又是一个有实际意义的字或词,这样难免会影响到最终的结果。但是 [CLS] 是没有任何实际意义的,只是一个占位符而已,所以就算 [CLS] 的 output 中自己的值占大头也无所谓。当然你也可以将所有词的 output 进行 concat,作为最终的 output

    在这里插入图片描述

    如果现在的任务是 Slot Filling,将句子中各个字对应位置的 output 分别送入不同的 Linear,预测出该字的标签。其实这本质上还是个分类问题,只不过是对每个字都要预测一个类别

    如果现在的任务是 NLI(自然语言推理)。即给定一个前提,然后给出一个假设,模型要判断出这个假设是 正确、错误还是不知道。这本质上是一个三分类的问题,和 Case 1 差不多,对 [CLS] 的 output 进行预测即可

    在这里插入图片描述

    如果现在的任务是 QA(问答),举例来说,如上图,将一篇文章,和一个问题(这里的例子比较简单,答案一定会出现在文章中)送入模型中,模型会输出两个数 s,e,这两个数表示,这个问题的答案,落在文章的第 s 个词到第 e 个词。具体流程我们可以看下面这幅图

    在这里插入图片描述

    首先将问题和文章通过 [SEP] 分隔,送入 BERT 之后,得到上图中黄色的输出。此时我们还要训练两个 vector,即上图中橙色和蓝色的向量。首先将橙色和所有代表文章的黄色向量进行 dot product,然后通过 softmax,看哪一个输出的值最大,例如上图中 对应的输出概率最大,那我们就认为 s=2

    在这里插入图片描述

    同样地,我们用蓝色的向量和所有代表文章的黄色向量进行 dot product,最终预测得 d2 的概率最大,因此 e=3。最终,答案就是 s=2,e=3

    在这里插入图片描述

    你可能会觉得这里面有个问题,假设最终的输出 s>e 怎么办,那不就矛盾了吗?其实在某些训练集里,有的问题就是没有答案的,因此此时的预测搞不好是对的,就是没有答案。

    橙色的和蓝色的vector是由随机初始化从头学得的,用nn.linear()。

    nn.linear() vs nn.embedding?

    nn.linear() 和 nn.embedding() 都是一层神经网络的权重参数。
    在这里插入图片描述

    • 想要查看某个词的词向量,需要传入:
      nn.linear():one-hot vector
      nn.embedding():这个词在词典中的 index,torch.LongTensor type.
      在这里插入图片描述

    • input and output:

    embeds = nn.linear(100,10)
    embeds = nn.Embedding(100, 10)

    学得的权重维度都是 (num_embeddings, embedding_dim),默认是随机初始化的。
    num_embeddings 表示单词的总数目,embedding_dim 表示每个单词需要用什么维度的向量表示。

    要训练word embedding matrix,可以直接使用 nn.Linear(),只不过输入要改为 one-hot Encoding,而不能像 nn.Embedding() 这种方式直接传入一个 index。还有就是需要设置 bias=False,因为我们只需要训练一个权重矩阵,不训练偏置。

    BERT中的词向量token embedding可以直接随机初始化,也可以使用用nn.linear() or nn.embedding() 来训练word2vec的预训练模型。

    代码细节见:https://wmathor.com/index.php/archives/1435/

    • 4)BERT 是怎么用 Transformer 的?
      在这里插入图片描述
    • 5)BERT 有什么局限性?

    从 XLNet 论文中,提到了 BERT 的两个缺点,分别如下:

    1. BERT 在第一个预训练阶段,假设句子中多个单词被 Mask 掉,这些被 Mask 掉的单词之间没有任何关系,是条件独立的,然而有时候这些单词之间是有关系的,比如”New York is a city”,假设我们 Mask 住”New”和”York”两个词,那么给定”is a city”的条件下”New”和”York”并不独立,因为”New York”是一个实体,看到”New”则后面出现”York”的概率要比看到”Old”后面出现”York”概率要大得多。

    但是需要注意的是,这个问题并不是什么大问题,甚至可以说对最后的结果并没有多大的影响,因为本身 BERT 预训练的语料就是海量的(动辄几十个 G),所以如果训练数据足够大,其实不靠当前这个例子,靠其它例子,也能弥补被 Mask 单词直接的相互关系问题,因为总有其它例子能够学会这些单词的相互依赖关系。

    1. **BERT 的在预训练时会出现特殊的[MASK],但是它在下游的 fine-tune 中不会出现,这就出现了预训练阶段和 fine-tune 阶段不一致的问题。**其实这个问题对最后结果产生多大的影响也是不够明确的,因为后续有许多 BERT 相关的预训练模型仍然保持了[MASK]标记,也取得了很大的结果,而且很多数据集上的结果也比 BERT 要好。但是确确实实引入[MASK]标记,也是为了构造自编码语言模型而采用的一种折中方式。

    总结上述介绍的三种预训练语言模型:ELMO, GPT, BERT
    在这里插入图片描述

    reference:
    https://wmathor.com/index.php/archives/1435/
    https://wmathor.com/index.php/archives/1456/
    https://cloud.tencent.com/developer/article/1701172
    https://mp.weixin.qq.com/s/E60wUHkHo-Gj3wb9Denuag
    BERT的PyTorch实现:https://www.bilibili.com/video/BV11p4y1i7AN/?spm_id_from=333.788.videocard.4

    展开全文
  • 近日,复旦大学邱锡鹏等学者发布了自然语言处理处理中预训练模型PTMs的综述大全,共25页pdf205篇参考文献,从背景知识到当前代表性PTM模型和应用研究挑战等,是绝好的预训练语言模型的文献。
  • 预训练语言模型汇总

    2022-05-01 22:08:55
    本文提出一种用于预训练序列到序列模型的自动去噪编码器BART。BART通过以下方式进行训练:①使用任意的噪声函数破坏文本;②学习模型来重建原始文本。BART的模型结合了BERT的双向编码器和GPT从左到右的解码器。其中...

    BART:Denoising Sequence-to-Sequence Pre-training for Natural Language Generation,Translation,and Comprehension

    本文提出一种用于预训练序列到序列模型的自动去噪编码器BART。BART通过以下方式进行训练:①使用任意的噪声函数破坏文本;②学习模型来重建原始文本。BART的模型结合了BERT的双向编码器和GPT从左到右的解码器。其中编码器将被破坏的输入进行编码(消除破坏的影响),然后解码器根据编码器的最后隐藏层的输出进行重构。BART解码器的每一层都额外对编码器最终隐藏层执行交叉注意。
    在这里插入图片描述

    因为BART的预训练是在同一语言下进行的,因此使用BART做机器翻译任何需要额外添加一个随机初始化的编码器,然后把BART整体当作翻译器的解码器。额外的编码器相当于输入其他语言序列从而生成一个有噪声的英文输入,然后将有噪声的英文输入BART进行重构,最终得到翻译结果。同时要注意,BART在进行翻译任务时训练分为两步,首先要对BART的大部分参数进行固定,只训练额外编码器和BART编码器中第一层的部分参数,然后再通过少量的epoch中微调整个模型。而BART做分类任务时,只需要根据解码器的输出进行分类即可。
    在这里插入图片描述

    很多预训练的语言模型难以在文本生成和判别任务上同时有效,但BART不仅在针对文本生成时特别有效,在很多文本生成任务上实现了SOTA的效果,同时在语言理解、判别任务上也能实现和RoBERTa相同的性能。

    ALBERT:A Lite BERT For Self-Supervised Learning of Language Representation

    一般来说,大型的预训练模型模型增大会提高下游任务的性能,但由于硬件的限制,进一步增大模型会变得更加困难。为了解决这个问题,本文提出了两种参数减少的技术来降低内存消耗并提高模型训练速度。这种减少参数的操作不仅能显著能减少BERT模型的参数,并且不会严重影响性能,从而提高了参数的效率。同时减少参数还有正则化模型的效果,从而使得模型更加鲁棒,使模型能够稳定训练并有助于泛化。
    本文提出的技巧:①分解embedding矩阵,通过将大的词汇嵌入矩阵分解为两个小矩阵,从而将隐藏层大小和词汇嵌入大小分开。(先将ont-hot向量投影到大小为E低维空间中,然后再投影到大小为H的隐藏空间,这样矩阵大小从O(VH)减小为O(VE+E*H))②跨层参数共享,通过跨层共享Transformer的前馈层(FFN)或跨层共享注意力参数或者跨层共享全部层参数共享来减少模型参数(默认),从而防止参数随着网络的深度而增长。③删除BERT的下一句预测(NSP)任务,改为句子顺序预测(SOP)任务,这样模型能更有效学习句子连贯性。④删除dropout,作者发现当训练1M步时,ALBERT-large仍然不会过度拟合数据,然后删除dropout以进一步扩大模型,发现提高了下游任务的性能。
    在这里插入图片描述
    在这里插入图片描述

    可以发现,ALBERT-xxlarge虽然模型架构比BERT-large大很多,但是模型参数并没有BERT-large多。并且ALBERT-xllarge在下游任务上的性能比BERT-large好很多,但它的训练时间也要比BERT-large慢了大概3倍。ALBERT-xxlarge无论在训练相同步数还是相同数据,下游任务的性能都比BERT-large要好。
    结果:ALBERT在经过以上几种技术的改进,无论是单模型还是集成结果都表明,在GLUE、RACE和SQuAD三个基准数据集上都取得了SOTA的效果,并且在RACE上的成绩远超BERT(+17.4%)和XLNet(+7.6%)。

    Unified Language Model Pre-training for Natural Language Understanding and Generation

    本文提出了一种新的统一预训练语言模型UNILM,能够同时胜任自然语言理解和生成任务。该模型针对三种类型的无监督语言建模目标进行了优化:单向、双向和序列到序列(通过自注意力掩码来实现)。
    UNILM具有三个主要优点:①统一的预训练过程导致单个Transformer网络使用不同类型的LM的共享参数和架构,从而减轻了单独训练模型和联合多个LM目标进行优化的工作。②参数共享使得学习的文本表示更加通用,因为它们针对不同的语言建模目标进行了联合优化,其上下文表示以不同的方式使用,从而减轻了对单个LM任务的过拟合。③该模型不仅能应用在NLU任务上,它的Seq2Seq LM目标使得他能够适用于NLG任务。
    总体训练目标是上述不同类型LM目标的总和。具体来说,在一个训练epoch中,1/3时间使用双向LM目标,1/3时间使用序列到序列LM模型,从左到右LM和从右到左LM各1/6时间。当任务为NLU时,选择将UNILM微调为双向Transformer模型;当任务为NLG时,选择将UNILM微调为序列到序列模型。
    在这里插入图片描述

    结果:UNILM不仅在自然语言理解任务上与BERT相比毫不逊色,同时还在自然语言生成任务的5个数据集上取得了SOTA的结果。

    DistilBERT, a distilled version of BERT: smaller,faster, cheaper and lighter

    本论文提出了使用知识蒸馏的方法来缩小BERT的架构和参数。先前的大部分工作都着重在特定于任务的模型上进行蒸馏,但本文的工作是学生模型(DistillBERT)和教师模型(BERT)在预训练期间进行知识蒸馏。作者发现使用通用的预训练蒸馏而不是特定于任务的蒸馏是有益的。
    模型使用了三个损失函数:语言模型损失、知识蒸馏损失和余弦距离损失。
    作者发现模型的隐藏维度对模型的推理速度来说影响并不大,而模型层数对其影响较大。所以为了方便模型初始化,作者保持了教师和学生网络的隐藏维度不变,而对模型的层数减半(其中去掉了embedding层和池化器层)。作者将BERT的预训练参数从两层中取出一层来初始化DistillBERT。
    在这里插入图片描述
    通过消融实验得出:①余弦距离损失对模型的性能有较大的帮助。②使用BERT参数来初始化DistillBERT对模型的最终性能提升很大。
    在这里插入图片描述
    结论:DistillBERT在下游任务上的性能比基线ELMo效果要好,并且和BERT-base的性能相差不大。DistillBERT将BERT的模型大小缩小了40%,从而导致推理速度快了60%。DistillBERT在减小模型参数的情况下,保留了97%的语言理解能力。

    RoBERTa: A Robustly Optimized BERT Pretraining Approach

    语言模型预训练会带来显著的性能提升,但超参数的选择对最终结果有重大影响。本论文提出了一种改进训练BERT模型的方法,我们称之为RoBERTa。它通过使用选择了较好的超参数从而在很多任务上实现了SOTA的效果。
    RoBERTa对BERT的改进:①训练模型的时间更长,批量更大,数据更多;②去除了BERT中的下一句预测(NSP)目标;③使用较长的序列进行训练;④对BERT中训练数据的掩码方式改为动态掩码,即同一句子在不同epoch中掩码的token不同;⑤更大的Byte-Pair Encoding(BPE)词汇表。⑥修改了Adam的超参数,将β2从0.999设置为0.98,使得模型的训练更加稳定。
    RoBERTa的结果说明了以前被忽视的超参数的设计的重要性,同时也表明,在正确的设计下,掩码语言模型预训练和最近新发布的方法(如XLNet)相比是具有竞争力的。RoBERTa通过将BERT的超参数调节对最优,从而实现了与XLNet等模型不相上下的效果。
    结果:RoBERTa在GLUE、SQuAD、RACE上实现了SOTA的效果,而无需对GLUE进行多任务微调或对SQuAD进行额外的数据仅微调。

    ELECTRA:Pre-training Text Encoders as Discriminator Rather Than Generators

    掩码语言模型(MLM)预训练方法(如BERT)通过将[MASK]替换一些toen来破坏输入,然后训练模型以重建原始的token。这样会需要大量的计算。本文提出了一种新的方法来解决该问题:将预训练目标改为替换token检测。这个方法是一个类似于BERT的小型生成器将被掩码[MASK]破坏的输入序列预测出来token后,然后将所有token送入鉴别器中,鉴别器的目标是识别每个token是来自真实数据还是生成器生成的token。因为该任务是在所有输入token上定义的,而不仅仅是被mask的子集,所有这种方法充分地利用了数据。因此模型训练更快,在计算量不足RoBERTa和XLNet的1/4时,性能却和它们相对,同时作者实验当使用相同的计算量时ELECTRA的性能优于它们。
    模型架构如下:
    在这里插入图片描述
    这种方法有点像GAN,但该模型的生成器并不是以对抗方式训练的,而是最大化似然函数来优化的。(因为GAN很难应用于文本,作者尝试使用GAN的方式来优化生成器,但是效果不如掩码语言模型)即生成器是用最大似然函数来优化的,判别器的损失函数是每个token的二分类Sigmoid函数。该模型的总体是损失函数为:

    该模型有以下优势:①模型从所有输入token中学习,而不仅仅是从小的屏蔽子集中学习,从而使其计算效率更高。②解决了BERT有预训练/微调差异的问题。

    在预训练之后,抛弃了生成器,只在下游任务上微调判别器(ELECTRA)。
    作者通过将生成器和鉴别器之间共享权重来提升预训练的效率(绑定权重不仅减少参数,并且模型效果也提高了)。如果生成器和鉴别器大小相同,则可以绑定所有的Transformer权重。但是作者发现使用小型生成器效率更高(没有绑定权重的GLUE得分为83.6,绑定token权重得分为84.3,绑定全部权重得分为84.4),因为绑定权重权重就要去生成器和鉴别器大小相同。在该模型中,只共享生成器和鉴别器的嵌入参数(token嵌入和位置嵌入)。

    通过消融实验,作者发现性能的主要提升在于对所有的输入token进行预测(+2.1%),少部分提升是由于生成器的输入减少了模型对[MASK]这种预训练/微调差异的影响(+0.7%)。
    结果:ELECTRA不仅训练地更快,而且在小模型、基本模型和更大的模型都优于其他模型(如BERT,RoBERTa和XLNet)。(模型越小,相比其他收益越大)。

    MASS: Masked Sequence to Sequence Pre-training for Language Generation

    本文利用Transformer的编码器-解码器架构提出了一种新的预训练语言模型目标,即通过在编码器端随机mask一段连续的token,然后让解码器去重建这些被mask的token。通过这样的训练目标从而使得模型在自然语言生成任务上取得了不错的效果。作者还通过在自然语言生成三个任务(机器翻译、文本摘要和对话响应生成)的8个数据集上进行实验,验证了MASS在零资源/低资源上效果比之前的预训练语言模型要好。
    在这里插入图片描述
    其中被掩码连续token的长度k是一个超参数,如果k=1,即只掩码一个token,那么它将和BERT模型相似,如果k=m(m为输入句子的长度),那么该模型Encoders输入全是mask,模型架构与GPT相似,所有作者通过实验,将k从10%到90%(step为10%)各自训练了模型,发现当k=50%时模型效果最好。
    MASS在设计上有两个巧妙之处,①编码器被mask的是一段连续的token,而不是各个分离的token。②在解码器端只输入被编码器mask的token,而不是全部的token。作者通过消融实验来证明当前的MASS的最优的选择。Discrete表示编码器的mask的离散的多个token,Feed表示解码器的输入是全部token。
    在这里插入图片描述
    结果:MASS在无监督机器翻译实现了SOTA的结果,在英-法数据集上超越SOTA模型4个BLUE。同时MASS在文本摘要和对话响应生成任务上都显著高于基线模型。

    SpanBERT: Improving Pre-training by Representing and Predicting Spans

    本文提到的SpanBERT对BERT进行了两方面的改进:①随机mask的是span而不是token;②SBO训练目标。训练span边界的token表示去预测整个span的内容,而不依赖于单独的token内容。Span-Based的masking模式强迫模型仅使用上下文去预测整个span;SBO强迫鼓励模型把整个span的内容信息存储到边界token的表示中。同时SpanBERT在训练时只输入一个segment,而不是像BERT那样输入两个Segment。
    SpanBERT在很多NLP任务上相较于BERT有了一致性的改进,尤其在span选择的任务上比BERT的性能有显著的提高,如QA任务和共指消解任务。
    在这里插入图片描述
    上图为模型的训练过程,损失函数由MLM loss function和SBO loss function组成。其中SBO损失函数是指使用边界token的表示(x4和x9)以及预测单词的位置嵌入(p3)来预测该词。
    在训练时和BERT的区别:①在不同的epoch使用不同的mask,而BERT对于每个句子采样10个不同的mask,即采样动态masking的策略;②消除了之前所有的短序列策略(以更低的概率采样短序列;首先使用短序列进行预训练)
    通过消融实验证明了spanBERT改动的有效性,证明了采样几何分布的随机mask span比其他方法更有效,也证明了SBO任务比BERT的NSP任务更有效。
    在这里插入图片描述
    在这里插入图片描述
    SpanBERT在17个数据集中进行测试,几乎在每个数据集中都优于BERT,尤其是在SQuAD v1.1和v2.0分别获得了94.6%和88.7%的F1值,并且在OntoNotes共指消解数据集上获得了SOTA的效果(79.6%的F1值)。

    ERNIE: Enhanced Representation through Knowledge Integration

    本文提出了一种基于知识整合的策略来提升模型的语言表示能力,其策略主要有两种,①entity-level masking,mask命名实体;②phrase-level masking,mask整个短语。该策略能够让模型隐式地学习语法和语义信息,基于知识来提升word representation的方法能提高模型的泛化性和适应性。
    BERT和ERNIE在mask策略上的区别

    训练策略:使用多阶段knowledge masking策略去整合命名实体和短语之中的知识来提升word representation。①Basic-Level Masking,masking方式和BERT的一致,让模型先学习基础的语义知识。②Phrase-Level Masking,通过masking短语让模型学习到短语信息。③Entity-Level Masking,通过mask命名实体使得模型学习到更丰富的语义信息。另外,ERNIE还采用了DLM(dialogue language model)任务,其中dialogue embedding类似于BERT的token type embedding,其用来区分对话中的角色。该任务不仅预测被mask的单词,还要预测多轮对话是否是真实的。
    消融实验:通过实验来验证knowledge masking和DLM的有效性,添加phrase-level masking和entity-level masking都能有效地增加模型的性能,DLM任务也能为模型带来大约百分之一的提升,其实验结果如下:
    在这里插入图片描述在这里插入图片描述
    ERNIE在下游任务上性能优于基线,并且在5个中文自然语言处理任务上获得了SOTA的效果,其中包括自然语言推断、语义相似度、命名实体识别、情感分析和问题回答,同时也显示了ERNIE在完成填空上有很强的知识推理能力。

    展开全文
  • 来自:圆圆的算法笔记作者:Fareise预训练语言模型是NLP中的核心之一,在pretrain-finetune这一阶段的NLP发展中发挥着举足轻重的作用。预训练语言模型的无监督训练属性,使其非常容易获取海量训练样本,并且训练好的...

    每天给你送来NLP技术干货!


    来自:圆圆的算法笔记

    作者:Fareise

    预训练语言模型是NLP中的核心之一,在pretrain-finetune这一阶段的NLP发展中发挥着举足轻重的作用。预训练语言模型的无监督训练属性,使其非常容易获取海量训练样本,并且训练好的语言模型包含很多语义语法知识,对于下游任务的效果会有非常明显的提升。本文首先介绍预训练语言模型的里程碑方法,然后进一步介绍学术界针对预训练语言模型中的问题提出的各种改进和创新,包括14个经典预训练语言模型。

    1

    预训练语言模型的里程碑

    预训练语言模型要从词向量说起。词向量利用文本数据,构造出词之间的共现关系,一般将在一句话中共现的词作为正样本,随机负采样构造负样本,采用CBOW或Skip-Gram的方式进行训练,以此达到让经常共现的词,能够具有相似向量化表示。其本质是NLP中的一个先验:频繁在文本中共现的两个词,往往语义是相近的。然而,词向量的问题也比较明显,同一个词在不同的语境中,含义往往是不同的,而词向量对于某一个词只能生成一个固定的向量,无法结合语境上下文信息进行调整。

    Deep contextualized word representations(ACL 2018)提出了ELMo模型,利用双向LSTM模型结合上下文语境信息生成词的embedding。ELMo和以往的词向量模型最大的差别是,每个词的embedding都是整个句子的一个函数,即每个词的embedding和这个句子的上下文信息是相关的。ELMo语言模型的模型结构采用了一个正向LSTM和一个反向LSTM联合训练的方式,优化两个方向的语言模型优化目标。在完成训练后,每个单词在每层LSTM都会产生正向、反向两个embedding,对每个单词所有层的embedding拼接在一起,得到这个词在这句话中的embedding。ELMO在使用到下游任务时,会把数据每句话先过一遍ELMo,得到每个词的embedding,然后将ELMo生成的embedding和通过词向量得到的embedding拼接到一起,用于后续任务预测。

    此后,语言模型预训练成为NLP中的核心之一。在Improving Language Understanding by Generative Pre-Training(2018)中提出了GPT模型。相比ELMo,GPT真正意义实现了pretrain-finetune的框架,不再需要将模型中的embedding取出来,而是直接把预训练好的模型在下游任务上finetune,对于不同任务采用不同的输入或输出层改造,让下游任务更贴近上游预训练模型。值得一提的是,在后续的prompt等优化中,又将下游任务向上游任务的贴近更近了一步,即将下游任务的输入和输出逻辑也进行变化去适应上游任务。让下游任务向上游任务对齐,是一个NLP中的发展方向。GPT模型主体采用的是Attention Is All You Need(NIPS 2017)提出的Transformer模型,使用的优化目标是正向语言模型。

    814c9b95b1d62310062363dee0ed14ca.png

    BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding(2018)提出了Bert模型,也是目前在NLP中应用最广泛的预训练模型之一。相比GPT和ELMo,Bert采用了一种Mask Language Model(MLM)这一不同的目标,通过随机mask掉输入文本中的某些token,然后利用上下文信息进行预测,实现对数据语义关系的提取。这种MLM相比之前的语言模型优化目标优点是,可以从多个方向同时进行信息抽取来预测当前token,而传统的语言模型(前向后后向)每一次只能从一个方向提取信息。即使将前向和后向结合,也无法实现真正意义上的同时利用前后文信息预测当前token。同时,Bert还引入了Next Sentence Prediction(NSP)任务,在预训练阶段构造了两个文本pair对输入,预测这两个文本的相关性。这个任务相当于是在sentence维度的信息提取,和下游的文本匹配类任务更加契合,这在单纯的语言模型中是难以学到的。

    b399346c82774f287f1e5285feb26557.png

    对Bert、GPT、ELMo三者模型结构图的一个简要对比如下,可以帮助更清晰的理解三类模型的差异。

    96fca9e8d0ce963b366a13db2a60247f.png

    上文介绍了ELMo、GPT、Bert等3个预训练语言模型的代表工作。下面我们梳理一下,在此之后,学术界对这些经典的预训练语言模型进行了哪些方面的改进和创新。

    2

    GPT系列

    在GPT之后,OpenAI进一步提出了GPT-2、GPT-3,旨在通过更大的模型容量、更多的训练语料进一步提升预训练语言的效果。Language Models are Unsupervised Multitask Learners(2018)提出了GPT-2。本文相比GPT增加了语料、增大了模型尺寸,模型的基本结构和GPT差不多。GPT-2的核心思想是,任何一个有监督NLP任务,都可以看成是语言模型的一个子集,只要预训练语言模型的容量足够大,理论上就能解决任何NLP任务。任何NLP任务都可以表示成p(output | input, task)的形式,语言模型就是无监督的多任务学习。因此GPT-2的核心就是提升模型的容量和数据多样性,让语言模型能够达到解决任何任务的程度。在随后的Language Models are Few-Shot Learners(2020)中提出了GPT-3,进一步增大了模型尺寸,模型参数量是GPT-2的100倍。GPT-3的核心思想在于不进行finetune(zero-shot learning)就可以对下游任务生成预测结果,其做法为将下游任务转换为一系列的文本,直接通过语言模型预测出结果。下图为一个例子,对比了finetune方法和GPT-3中提出的zero-shot方法的区别,便于对这种预测方法进行理解。通过增加对任务的描述文本,来让模型知道当前要解决什么任务,进而实现预测。

    068960902064a57a3f6c7fcf7ab1e814.png

    可以看出,GPT的后续优化思路,建立在不断提升训练语料丰富度和模型容量,使语言模型能够从大量文本中学习到各个NLP任务的解决方法,再通过zero-shot learning的方式实现不进行finetune,而是将下游任务转换成语言模型的输入形式,来让预训练模型直接进行下游任务预测。这种prompt的形式是目前NLP领域的研究热点和发展趋势。

    3

    Bert系列

    在Bert的基础上,有很多针对其的改进,这里我们主要介绍3个模型。RoBERTa: A Robustly Optimized BERT Pretraining Approach(2019)细致的对Bert模型的训练方式进行了对比实验和分析,并基于此总结出了能够提升Bert效果的训练方法。相比Bert,RoBerta的主要改进在于3个方面。首先采用了dynamic mask,即每个文本进入训练时动态mask掉部分token,相比原来的Bert,可以达到同一个文本在不同epoch被mask掉的token不同,相当于做了一个数据增强。其次,分析了训练样本应该如何构造,原来的Bert采用segment pair的形式,训练样本为两个segment组合到一起并使用NSP任务预测两个任务是否相关。RoBERTa发现从同一个document构造输入单句子的输入文本而非pair对,并且不使用NSP任务,效果会有一定提升。最后,RoBERTa增大了batch size以及对BPE(输入文本的分词方法进行了升级。

    ALBERT: A LITE BERT FOR SELF-SUPERVISED LEARNING OF LANGUAGE REPRESENTATIONS(2020)提出了一个轻量级的Bert模型,以此降低Bert的运行开销。为了减少Bert资源开销,本文主要提出了两个优化:Factorized embedding parameterization以及Cross-layer parameter sharing。Factorized embedding parameterization对输入的embedding进行分解,原始的Bert将token输入的embedding维度E和模型隐藏层维度H绑定了,即E=H,前者表示每个token固有信息,后者表示每个token结合了上下文的动态信息,后者被证明是更重要的。因此本文提出可以让E和H解绑,选择一个较小的E不会影响模型效果,同时显著降低了由于输入词表V变大带来的内存开销上升。具体的,将E变成远小于H的维度,再用一层全连接将输入embedding映射到H维。这样模型embedding部分参数量从V*H下降到了V*E+E*H。Cross-layer parameter sharing让Bert每层的参数是共享的,以此来减小模型参数量。除了上述两个降低Bert运行开销的优化外,ALBERT提出了inter-senetnce loss这一新的优化目标。原来Bert中的NSP任务可以理解为topic prediction和coherence prediction两个任务。其中topic prediction是一种特别简单的任务,由于其任务的简单性,导致coherence prediction学习程度不足。本文提出将coherence prediction单独分离出来,相比Bert,正样本仍然是一个document相邻的两个segment,负样本变成这两个segment的顺序交换。

    ELECTRA: PRE-TRAINING TEXT ENCODERS AS DISCRIMINATORS RATHER THAN GENERATORS(ICLR 2020)对pretrain阶段的MLM任务进行了优化。该方法的核心思路采用了GAN的思路。模型包括一个generator 和一个discriminator。输入文本仍然会被随机mask,然后generator会生成被mask掉的token,这里和MLM类似。而discriminator会判断每个位置的token是否是generator生成的(如果generator正好生成了正确的token,也认为其生成的是正确的)。通过这种对抗学习的方式,让discriminator预测被mask掉的token能力逐渐增强,也即从文本中提取信息的能力增强。最终的预训练模型使用的是discriminator部分。ELECTRA的缺点在于由于有了一个单独的Generator,模型整体开销会更大,Generator一般采用一个参数量较少的MLM。

    1235f11c73f6326efe4db9491978a645.png

    4

    引入知识的预训练

    ERNIE: Enhanced Language Representation with Informative Entities(2019)从知识增强的角度对Bert进行优化。相比原来的Bert,ERNIE引入了如知识图谱等外部知识信息。这样的好处在于,有一些文本如果不知道某些词组代表一个实体的话,模型是很难学习的,例如一些人名、地名等。如下面的例子,不知道橘子中的这些实体是书名、歌名,就无法识别出作者的职业。

    bf97411dda830e921598d7f2c17084d1.png

    ERNIE在Bert中引入了知识图谱中的实体信息,模型结构如下图。模型主要分为T-Encoder和K-Encoder两个部分。T-Encoder类似Bert,从输入的文本上提取每个token的信息表示。K-Encoder主要是引入知识信息,将输入文本中的实体识别出来,然后获取这些实体的embedding(利用TransE在构造好的知识图谱上预训练得到),然后将token的embedding和实体的embedding进行一个融合,融合方法是将实体embedding添加到对应token序列的位置。每层融合输入上一层的token embedding和entity embedding,生成新的token embedding和entity embedding,公式可以表示为:

    6c2fd5b4446ea71de212860dfa38d0d7.png

    此外,ERNIE在预训练阶段增加了token-entity relation mask任务,在20%的entity上,会mask掉token和entity的对齐关系,让模型来预测当前token对应的是哪个entity。

    89236e5595814b784322ad826aa4a57e.png

    此外,还有一个同名工作ERNIE: Enhanced Representation through Knowledge Integration(2019)也使用了类似的思路,希望通过引入外部知识信息提升预训练模型效果。和Bert主要差别在于,本文将MLM任务分成basic-level、phrase-level、entity-level三种类型,在entity-level mask中,mask掉的不是单个token,而是输入文本中某个entity对应的连续多个token,其和Bert的差异如下图。

    1e363724dbf4b69fd1c3e4deeb839fb0.png

    后面这篇工作后续又推出了2.0版本,ERNIE 2.0: A Continual Pre-Training Framework for Language Understanding(2019)。该工作在pretrain阶段引入了很多task来辅助pretrain阶段的学习。首先构造pretrain阶段的任务,主要是无监督或弱监督的训练数据容易获得的任务,同时也会引入知识图谱中的信息构造一些训练任务。接下来,本文采用continual multitask learning的方式,不断构造新的任务,并且以增量的方式进行多任务学习,每来一个任务都把历史所有任务放到一起进行多任务学习,避免忘记历史学到的知识。本文的核心点在于提出的多种构造预训练任务的方式,包括Knowledge Masking Task(即上一篇ERNIE中的对entity或phrase进行mask)、Capitalization Prediction Task、Token-Document Relation Prediction Task等,感兴趣的同学可以阅读论文深入了解。

    7cfbc63dc6aeaab283f4e688949ffabd.png

    5

    预训练方式的创新

    在GPT和BERT的启发下,后续涌现了很多其他类型的预训练语言模型,这里主要介绍UniLM、XLNet、BART这3种。

    Unified Language Model Pre-training for Natural Language Understanding and Generation(NIPS 2019)提出了UniLM预训练语言模型。本文首先总结了之前语言模型的特点:EMLo采用前向+后向LSTM、GPT采用从左至右的单向Transformer、BERT采用双向Attention。虽然BERT的双向Attention取得很好效果,但是这种特性也导致其无法像GPT等使用单向方法的语言模型一样适用于文本生成这种任务。UniLM融合了3种语言模型优化目标,通过精巧的控制mask方式来在一个模型中同时实现了3种语言模型优化任务,在pretrain过程交替使用3种优化目标。下图比较形象的描述了UniLM是如何利用mask机制来控制3种不同的优化任务,核心思路是利用mask控制生成每个token时考虑哪些上下文的信息。

    0b1a1b53b798cfc5b752cd9d56d36a61.png

    XLNet: Generalized Autoregressive Pretraining for Language Understanding(NIPS 2019)提出了XLNet模型,融合了BERT和GPT这两类预训练语言模型的优点,并且解决了BERT中pretrain和finetune阶段存在不一致的问题(pretrain阶段添加mask标记,finetune过程并没有mask标记)。本文将无监督语言模型分成两类,一类是AR自回归模型,如GPT、ELMo这种使用单向语言模型建模概率分布的方法;另一类是AE自编码模型,如BERT这种通过预测句子中token的方法。XLNet融合了AR模型和AE模型各自的优点,既能建模概率密度,适用于文本生成类任务,又能充分使用双向上下文信息。XLNet实现AR和AE融合的主要思路为,对输入文本进行排列组合,然后对于每个排列组合使用AR的方式训练,不同排列组合使每个token都能和其他token进行信息交互,同时每次训练又都是AR的。但是,实现这种模式也存在很多问题,文中针对这些问题提出了解法,由于篇幅原因具体内容我们会在后续相关文章再进行详细介绍。

    BART: Denoising Sequence-to-Sequence Pre-training for Natural Language Generation, Translation, and Comprehension(2019)提出了一种新的预训练范式,包括两个阶段:首先原文本使用某种noise function进行破坏,然后使用sequence-to-sequence模型还原原始的输入文本。下图中左侧为Bert的训练方式,中间为GPT的训练方式,右侧为BART的训练方式。首先,将原始输入文本使用某些noise function,得到被破坏的文本。这个文本会输入到类似Bert的Encoder中。在得到被破坏文本的编码后,使用一个类似GPT的结构,采用自回归的方式还原出被破坏之前的文本。

    3f6abab0902f18a0bc3b4ec9dca59c34.png

    文中尝试了多种类型的noise function,如token masking、sentence permutation、text infilling等,其中sentence permutation+text infilling的方式取得了最好的效果。Text infilling指的是随机mask某些span。下图展示了文中提出的一些noise function方法。

    c31b106b4a70c8f858825510367a00d6.png

    6

    总结

    本文介绍了预训练语言模型的发展历程,包括EMLo、BERT、GPT等经典模型,也包括在此基础上的一些改进创新。预训练语言模型对于NLP来说非常重要,未来的研究趋势也在让下游任务更加去适配预训练模型,以此来最大程度发挥预训练模型的能力。

    最近文章

    EMNLP 2022 和 COLING 2022,投哪个会议比较好?

    一种全新易用的基于Word-Word关系的NER统一模型,刷新了14种数据集并达到新SoTA

    阿里+北大 | 在梯度上做简单mask竟有如此的神奇效果


    下载一:中文版!学习TensorFlow、PyTorch、机器学习、深度学习和数据结构五件套!  后台回复【五件套】
    下载二:南大模式识别PPT  后台回复【南大模式识别】

    投稿或交流学习,备注:昵称-学校(公司)-方向,进入DL&NLP交流群。

    方向有很多:机器学习、深度学习,python,情感分析、意见挖掘、句法分析、机器翻译、人机对话、知识图谱、语音识别等。

    16de712a6cbd431858504f48dc1603de.png

    记得备注呦

    整理不易,还望给个在看!
    展开全文
  • 朝鲜语的预训练语言模型 世界各地都在开发性能最好的语言模型,但是其中大多数只覆盖英语。 为了帮助您开始学习朝鲜语自然语言处理,我们发布了用朝鲜语学习的最新语言模型。 它可以通过Transformers库获得,并且...
  • 借助大规模数据集、以Transformer为代表的深度神经网络模型、以及设计好的自监督预训练(pre-train)任务,预训练语言模型展现出了强大的泛化能力,经过微调(fine-tune)后在各个下游任务中得到了优秀的成果,其...
  • 预训练语言模型(四):ELMo模型

    千次阅读 2022-02-02 10:07:52
    预训练语言模型的前世今生 - 从Word Embedding到BERT ELMo也参考了这个: 【NLP-13】ELMo模型(Embeddings from Language Models) 这里提出的一个新的问题是:Word2Vec通过大规模语料对每个单词训练出固定词向量,...
  • 本系列文章是笔者以邱锡鹏老师《Pre-trained Models for Natural Language Processing: A Survey》为主要参考材料所做的关于“预训练(语言)模型综述”的记录,...此篇记录预训练语言模型的使用方式与相关应用。 ...
  • 基于NLP的预训练语言模型综述
  • 预训练语言模型把自然语言处理带入了一个新的阶段,也得到了工业界的广泛关注。 通过大数据预训练加小数据微调,自然语言处理任务的解决,无须再依赖大量的人工调参。 借助预训练语言模型,自然语言处理模型进入了...
  • 如何使用预训练模型 一、思路 首先要考虑目标模型的数据量及目标数据与源数据的相关性。 一般要根据数据集与预训练模型数据集的不同相似度,采用不同的处理方法。 上图中 1、数据集小,数据相似度高 理想情况,可以...
  • 预训练语言模型 广义上,泛指提前经过大规模数据训练的语言模型,包括早期的以Word2vec、Glove为代表的静态词向量模型,以及基于上下文建模的CoVe,ELMo等动态词向量模型。在2018年,以GPT和BERT为代表的基
  • 预训练语言模型 | (1) 概述

    千次阅读 2020-02-05 21:58:57
    自从Bert问世以来,预训练语言模型的各种变体层出不穷,在预训练语言模型专栏,我将参考一些资料,对一些主要的平时使用比较多的预训练语言模型做一些理论层面的整理。 至于预训练语言模型的应用,可以查阅我的文分...
  • 这是预训练语言模型的关系提取下游网络的原型代码,支持我们 此代码的一部分根据进行了修订。 数据集 您可以从和获取数据集 入门指南 在example / configs.py中设置自己的路径,包括预训练的模型路径,数据的根路径...
  • 预先训练语言模型和NLp模型的存储库。 NLP | 如何将领域特定的词汇表(新令牌)添加到已经受过像BERT WordPiece这样训练的子词令牌生成器中 简介:在某些情况下,为了执行新任务(分类,NER,摘要,翻译,等等。)...
  • 预训练语言模型整理(ELMo/GPT/BERT...) 简介 2018年ELMo/GPT/BERT的相继提出,不断刷新了各大NLP任务排行榜,自此,NLP终于找到了一种方法,可以像计算机视觉那样进行迁移学习,被誉为NLP新时代的开端。 与...
  • 预训练语言模型综述

    千次阅读 2020-04-21 20:23:35
    随着深度学习的发展,各种神经网络被广泛应用于解决自然语言处理(NLP)任务,如卷积神经网络(CNNs),递归神经网络(RNNs),基于图的神经网络(GNNs)和注意机制。相比于非神经网络NLP方法通常严重依赖于离散的...
  • 预训练语言模型的前世今生 - 从Word Embedding到BERT 词向量 主要针对预训练语言模型(一)中的one-hot和词向量 C(ωi)C(\omega_i)C(ωi​)。 one-hot不再赘述,只说缺点:当使用余弦相似度计算向量之间的相似度时,...
  • plur:P重新训练ünder-内容r L anguage模型epresented语言该存储库包含针对NLP中代表性不足的语言的预训练语言模型。 语言模型适用于Flair和ELMo(即将推出:XLNet)。 使用Flair在NER和PoS标记下游任务上评估所有...
  • 包含单语言BERT预训练语言模型和跨语言XLM预训练语言模型,支持监督/无监督机器翻译和跨语言文本分类应用
  • 1-4+多语言预训练语言模型在机器翻译中的应用
  • 使用RTX 3090在我的工作站上,整个过程(准备Wikipedia转储,预训练语言模型,微调语言模型和训练分类器)大约需要5个小时。使用FP16训练模型所需的VRAM少于8 GB-因此您可以在负担得起的GPU上训练模型。 我还在...
  • OpenCLaP是由清华大学人工智能研究院自然语言处理与社会人文计算研究中心推出的一个多领域...预训练语言模型通过在大规模文本上进行预训练,可以作为下游自然语言处理任务的模型参数或者模型输入以提高模型的整体性能。
  • 目录BERTweet:英语推文的预训练语言模型BERTweet是第一个为英语Tweets预先训练的公共大规模语言模型。 BERTweet使用与相同的模型配置,根据预训练过程进行训练。 用于预训练BERTweet的语料库由850M的英语Tweets...
  • 预训练语言模型介绍。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 43,026
精华内容 17,210
关键字:

预训练语言模型

友情链接: AD7606资料-V0.8.zip