赞
踩
PTM: Pre-train Model(预训练模型)是指在大规模的未标注数据上预先进行训练,并且能够被用于特定任务的模型,如BERT、GPT等。
LM: Language Model(语言模型)是指根据一个给定的语言序列,预测下一个可能的单词或字符的模型。这种模型通常被用于文本生成、自动补全和机器翻译等任务中。
AR: Auto-Regressive(自回归)是指一个模型通过前面的输出来预测后续的输出,通常用于生成任务中,如自然语言生成。
AE: Auto-Encoding(自编码)是一种无监督学习的方式,通过将输入数据压缩到一个低维空间,再将其解码回原始输入,从而学习输入数据的有效表示。
CLM: Causal Language Model(因果语言模型)是指对于一个给定的输入序列,在模型中仅使用该序列之前的信息来预测下一个单词或字符的模型,通常用于文本生成中。
MLM: Masked Language Model(掩码语言模型)是指在输入序列中随机掩盖一些单词或字符,然后让模型通过上下文来预测这些掩盖的单词或字符。通常用于预训练模型中,如BERT。
PLM: Permuted Language Model(置换语言模型)是指在输入序列中随机交换一些单词或字符的位置,然后让模型预测这个置换后的序列,通常用于预训练模型中,如GPT-2。
NLU: Natural Language Understanding(自然语言理解)是指让计算机能够理解人类自然语言的能力。NLU包括语言识别、语言理解、情感分析等任务。
NLG: Natural Language Generation(自然语言生成)是指让计算机能够生成人类自然语言的能力。NLG包括文本生成、语音合成等任务。
如果想用一句话讲清楚“预训练“做了一件什么事,那我想这句话应该是“使用尽可能多的训练数据,从中提取出尽可能多的共性特征,从而能让模型对特定任务的学习负担变轻。“
要想深入理解预训练,首先就要从它产生的背景谈起,第一部分回答了这样2个问题:预训练解决了什么问题,怎样解决的。
“预训练“方法的诞生是出于这样的现实:
标注资源稀缺而无标注资源丰富: 某种特殊的任务只存在非常少量的相关训练数据,以至于模型不能从中学习总结到有用的规律。
比如说,如果我想对一批法律领域的文件进行关系抽取,我就需要投入大量的精力(意味着时间和金钱的大量投入)在法律领域的文件中进行关系抽取的标注,然后将标注好的数据“喂”给模型进行训练。但是即使是我标注了几百万条这样的数据(实际情况中,在一个领域内标注几百万条几乎不可能,因为成本非常高),和动辄上亿的无标注语料比起来,还是显得过于单薄。“预训练”这时便可以派上用场。
如果用一句话来概括“预训练”的思想,那么这句话可以是
模型参数不再是随机初始化,而是通过一些任务(如语言模型)进行预训练
将训练任务拆解成共性学习和特性学习两个步骤
上面的两句分别从两个不同的角度来解释了预训练思想的本质。第一句话从模型的角度,第二句话从数据的角度。下面展开讲讲第二种解释。
【学习任务的分解】
“预训练“的做法一般是将大量低成本收集的训练数据放在一起,经过某种预训方法去学习其中的共性,然后将其中的共性“移植”到特定任务的模型中,再使用相关特定领域的少量标注数据进行“微调”,这样的话,模型只需要从”共性“出发,去“学习”该特定任务的“特殊”部分即可。
其实举一个最简单的身边的例子大家就懂了,让一个完全不懂英文的人(我们称ta为)去做英文法律文书的关键词提取的工作会完全无法进行,或者说ta需要非常多的时间去学习,因为ta现在根本看不懂英文。但是如果让一个英语为母语但是没接触过此类工作的人(我们称ta为B)去做这项任务,ta可能只需要相对比较短的时间学习就可以上手这项任务。在这里,英文知识就属于“共性”的知识,这类知识不必要只通过英文法律文书的相关语料进行学习,而是可以通过大量英文语料,不管是小说、书籍,还是自媒体,都可以是学习资料的来源。
因此,可以将预训练类比成学习任务分解:在上面这个例子中,如果我们直接让A去学习这样的任务,这就对应了传统的直接训练方法。如果我们先让A变成B,再让ta去学习同样的任务,那么就对应了“预训练+微调”的思路。
A是传统的训练思路,B和C都是预训练+微调的训练思路
在上面的例子中,B的学习路径是先学习英文,再学习法律文书关键词提取。而图中的C是将“法律文书关键词提取”任务进一步分解成为“法律文书”+“关键词提取”,先学习英文的法律文书领域的知识,再去学习如何在英文的法律文书领域做关键词提取。
很显然,从“英文法律文书”出发的学习速度 > 从“英文”出发的学习速度 > 从0出发的学习速度。其实采用“预训练”思路的B和C,不仅仅是学习速度高于A,更重要的是,他们的学习效果往往好于A。
这就和机器学习领域的“预训练”不谋而合。
NLP进入神经网络时代之后。NLP领域中的预训练思路可以一直追溯到word2vec的提出
第一代预训练模型专注于word embedding的学习(word2vec),神经网络本身关于特定任务的部分参数并不是重点。其特点是context-free(与上下文无关),也即word embedding,每个token的表示与上下文无关,比如“苹果”这个词在分别表示水果和公司时,对应的word embedding是同样的。
第二代预训练模型以context-aware为核心特征,也就是说“苹果”这个词在分别表示水果和公司时,对应output是不一样的,其中具有代表性的有ELMo[2], GPT[3], BERT[4]等。
需要提一点的是,早期的PTMs研究者们在模型结构上做的尝试比较多,比如ELMo使用了双向LSTM。然而在Transformer出现后,研究者们研究的重点就从模型结构转移到了训练策略上。比如GPT和BERT都是基于Transformer结构的: GPT基于Transformer decoder,而BERT基于Transformer encoder。因此,本篇文章也是侧重于解释不同的训练策略。
NLP领域主要分为自然文本理解(NLU)和自然语言生成(NLG)两种任务。何为理解?我看到一段文字,我懂了它的意思,但是只需要放在心里----懂了,但不需要说出来。何为生成?我看到一段文字,我懂了它的意思,并且能够用语言组织出我理解的内容----懂了,还需要说出来。
常见的NLU benchmark有GLUE[5]: 包含九项NLU任务,语言均为英语。涉及到自然语言推断、文本蕴含、情感分析、语义相似等多个任务。
常见的NLG任务则有: 机器翻译,摘要生成,对话系统,等等。
Machine Translation
(Abstractive) Summarization
Dialogue (chit-chat and task-based)
Creative writing: storytelling, poetry-generation
Freeform Question Answering (i.e. answer is generated, not extracted from text or knowledge base)
Image captioning
在预训练语言模型的学习过程中,我们往往最早会接触到GPT和BERT。实际上,GPT和BERT代表了两种最基本的预训练范式,它们分别被称作“自回归预训练“(如GPT)和“自编码预训练”(如BERT),各自适用于不同类型的下游任务,其中GPT往往更适合文本生成任务,BERT往往更适合文本理解任务。两者都是基于Transformer结构的部分参数。
GPT对应了decoder的预训练,而BERT对应了encoder的预训练。
GPT这一缩写来自于Generative Pre-Training,也就是生成式预训练,这个名称已经预示着GPT擅长文本生成任务。
GPT的优化目标是单向(从左到右或者从右到左)建模序列的联合概率,是传统意义上的语言模型,后预测的词以先预测的词为条件,比较适合文本生成任务,但是缺陷是只使用了单向的语言表征信息,无法获取双向上下文信息表征,而文本理解任务中经常需要用到双向的上下文信息(比如,完形填空),因此,这就带来了pre-train阶段和下游NLU任务的不一致。
BERT的全称为Bidirectional Encoder Representations from Transformers,名称中强调了“双向表示”,预示着BERT是双向建模的。BERT双向建模的方式就是将一些位置的token替换成特殊的[MASK]字符,并且在目标端去预测这些被替换的字符。BERT的特点在于它在预训练阶段已经使用了双向上下文信息,因此特别适合NLU任务。
由GPT和BERT这两个基本的预训练范式出发,后面一些工作致力于将两者的优点结合,做出一个既适用于NLG又适用于NLU的“大一统”预训练模型。其中的代表有:
1、XLNet, 提出Permuted Language Model (PLM),将GPT的从左向右建模扩展成乱序建模,来弥补GPT无法获取双向上下文信息的缺陷[6]。
2、MPNet, 在XLNet基础上进一步弥合pre-train阶段和下游任务fine-tune阶段的预训练目标,试图统一PLM和MLM[7]
MASS = Soft mix (BERT, GPT)[8]
2020年,FAIR提出了BART预训练,其特征在于它使用了"Arbitrary Noise Transformation"。包含5种Noise
BART使用的5种Noise
我在下面的表格里总结了一下上面提到的PTMs的训练目标、模型结构、论文提出的背景是为了针对性地解决什么场景的问题、受哪些前期工作的影响。
** Encoder/Decoder指的是,训练目标不是Encoder的(双向建模),也不是Decoder的(单向建模),但是模型结构和Encoder或者Decoder是一样的。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。