追一技术分享 AI“大”时代下的NLP预训练模型创新与实践

这是一个AI“大”时代。

AI特别是NLP效果刷新同时,模型体量、数据量甚至相关人力投入,也水涨船高,最强预训练语言模型GPT-3参数量达1750亿。大型预训练模型作为当前NLP技术的基底,创新研究既关系着下游各类场景任务的效果天花板,同时,也是降低AI冷启动和数据人力投入成本的重要课题。

追一科技一直致力于NLP技术创新与最佳方法实践,并取得了大量创新成果。近期,我们将陆续推出5周年AI技术特别分享系列,包括大规模预训练模型、自然语言智能交互(NL2X)、NLG(自然语言生成)、多模态算法、技术比赛与论文成果分享等多个领域,敬请关注。

本期为第一期技术分享,大型预训练模型的创新实践,也欢迎大家与我们一起交流探讨,共同推动中文NLP技术发展。

在实际场景中,许多AI业务的冷启动往往会面临数据量不足,启动效果差等问题,这导致在引入智能机器人时需要耗费大量的前期人力标注,增加用户的使用成本和项目上线的初期投入。大型预训练模型作为当前NLP技术的基底,不仅能够大幅提高模型在下游不同业务应用场景的效果,还能降低标注数据的需求量,降低业务场景冷启动的成本投入。

自从2018年BERT预训练模型被提出并刷新各大NLP任务榜单后,基于深度学习的NLP算法就逐渐过渡到采用大型预训练模型来对下游不同任务进行微调的范式上。这种方式借助大型的模型以及大规模的预训练语料,让模型对自然语言的理解能力提升了一个档次,从而也大幅提高了NLP模型在下游任务上的表现。

所谓的大型预训练模型,是指在大量的预训练数据上采用体积非常大的模型进行训练而得到的。在NLP领域中,预训练步骤采用的大多是语言模型任务这一无监督的方式,因此通常不需要对数据进行标注,从而在预训练时便可以方便地获得大量的无监督数据。随着模型体量和预训练数据量的不断增大,模型在下游任务上的效果也不断提高,从2018年至今,这种大型的预训练模型在体量和预训练数据量上一直在持续增长。

追一科技成立5年来,始终专注于NLP领域的前沿技术创新与最佳方法实践,在大型预训练模型的研究与研发上一直持续进行投入。我们将研发力量集中在通用预训练模型以及业务预训练模型两个大方向上。

  01

  通用预训练模型

通用预训练模型指的是在公开语料上进行的预训练模型。因为是在大量的非限定性领域语料上进行训练,因此对下游任务的领域没有严格的限制,可以被用在不同的领域和任务中。追一科技在通用预训练模型上进行了持续的投入,主要集中在三个方向上的研究:

中文还未覆盖的各类模型:主要目的在于研究模型在中文上的表现,并加以改进以进一步提升效果;

针对自身业务特点进行的通用预训练模型:主要目的在于采用不同的语料构建方式与模型结构、训练任务的设计,以便模型在业务领域中的下游任务能够有更好的表现;

针对特定下游任务形式进行优化的预训练模型:虽然通用型预训练模型可以在不同的下游任务上直接使用,但在预训练步骤中如果针对下游任务进行特定的设计,可以更好地提升下游任务的表现。

2019年追一科技利用TPU训练了当时中文还未进行覆盖的一些模型,包括中文的T5与BART模型。T5与BART模型是基于Transformer结构的Encoder-Decoder框架生成式预训练模型,分别由Google与Facebook提出。同时追一科技针对自己的业务特性,在预训练数据中加入了对话形式的数据,并对Transformer的attention部分进行了增强以进一步提升模型的效果。

4JY[_2R5M`J6G%D[6W}$K1N.png

[K)]FTL1CS~T(G`F2N6[[S7.png

我们针对T5训练了大中小三个版本,利用我们收集的数据,设计了“有监督数据”与“有监督+无监督数据混训”两种方式,T5模型共7个版本。而针对BART模型,我们训练了小(small)与中(base)共两个版本。针对上面两种模型,其中小版本的模型(small)训练时长为2周、中型模型(base)训练时长为3周,大版本(large)训练时长为4周。除了按照原版T5模型进行训练外,我们针对模型结构进行了相应的调整(attention增强版本)以提升模型的表现。同时,我们在当时的测试榜单Chinese GLUE的10个不同NLP任务数据集上测试了中文T5模型,并与当时最优的中文RoBERTa-wwm-large进行了比较。

`LAK}5SAZ_GRW91VXF]TROL.png

除了上述的大型预训练模型以外,我们还训练了一些小型的模型与一些针对特定下游任务使用的预训练模型。例如在下表中的RoBERTa Tiny、Small版本和BERT Tiny、Small版本,对应的是RoBERTa与BERT的微型版本和小型版本,而RoBERTa+则是对模型中的attention部分进行了修改以增强模型的效果。这些小型的模型体积较小,可以在资源较少的情况下使用,我们将这些模型进行开源以提供给研究者学习使用,共同促进中文NLP社区的发展。

NM][7XF)SOKI0`)]R_MKN$P.png

RY}1_TITF]VWLC$DE1TQ}_0.png

SimBERT

在2020-2021年我们又相继开源了SimBERT、WoBERT以及RoFormer三个大型预训练模型。SimBERT采用的是与BERT相同的模型结构,但在训练时使用了不同的任务。我们采用抓取的开源数据构建相似句子对,并采用生成与匹配两种方式进行多任务训练,目的是让模型学会自动生成同义句,具体的方式如下图。

SimBERT的生成任务构建方式采用UniLM的训练方式,不同点在于训练时单个样本由近义句子对构成,假设SENT_a和SENT_b是一组近义句,那么在同一个批次(batch)中,将[CLS] SENT_a [SEP] SENT_b [SEP]和[CLS] SENT_b [SEP] SENT_a [SEP]都加入训练,作为序列到序列(sequence-to-sequence)式的近义句生成任务。而在生成任务的基础之上,我们加入了“分类”任务来增强模型对近义句的学习。具体的构建方式如下,设每个批次中有个样本,而模型最后一层[CLS]的特征维度为,那么对于一个批次的样本,我们将每个样本的[CLS]特征取出可以得到的特征,然后按行进行归一化得到然后按如下方式一个批次的计算损失:

其中为同一批次样本相互之间的余弦距离,为一个标量超参数(我们在训练时设为30),为元素对应相乘,为对角矩阵掩码,用来屏蔽样本与自身的距离。且代表矩阵P的第i行的第j个元素,而其中j为同一批次中与i互为相似句的样本的序号。这个损失实际上是在同一个批次中拉近两个互为相似句的样本的距离,采用这样的方式可以让模型更加明确的学习相似句之间的特征关系。生成同义句这一任务形式有广泛的运用空间,其中最典型的运用是可以用来扩充文本分类任务的训练数据。

 WoBERT

WoBERT同样也是采用BERT的结构,但区别是在训练中加入的词,这是一个专门为生成式下游任务训练的模型。中文BERT模型原本的词表只包含字(词会被拆解成字进行编码),而采用以字为编码的模型在用作生成的时候也是以字为粒度来进行生成的。但这种以字为粒度的生成方式有两个主要的弊端,第一是对于相同长度的句子,字粒度式的生成比词粒度式的生成需要更长的序列,这导致生成的时间过长,并且过长的生成序列还容易造成在解码阶段带来的累积误差。第二个问题是中文的词很多时候是固定搭配,拆为字来进行生成增加了模型生成的难度。基于以上的原因,我们在保留原本BERT词表中的字的基础上,新增了一定数量的词,并进行再训练。我们对比了WoBERT与常规的BERT在生成式任务上的效果,其结果也表明以词粒度进行生成能取得更好的效果。

目前,我们在WoBERT的基础上进一步地增强了词表的构建方式,训练了增强版模型WoBERT+,目前正在进行的内部测评。结果表明,在文本分类任务上,WoBERT+比WoBERT有更加优秀的表现。

 T5 PEGASUS

T5 PEGASUS是我们今年开源的基于T5模型采用文本摘要式任务进行预训练的大型模型。我们采用“伪摘要”的方式来构建数据,并进行摘要生成的方式进行训练。具体来说,假设一个文档有n个句子,我们从中挑出大约n/4个句子(可以不连续),使得这n/4个句子拼起来的文本,跟剩下的3n/4个句子拼起来的文本,最长公共子序列尽可能长。然后我们将3n/4个句子拼起来的文本视为原文,n/4个句子拼起来的文本视为摘要,构成了一个“(原文, 摘要)”的伪摘要数据对,并进行序列生成的训练。选取句子的方式采用如下的贪心算法进行:

1.从全部的n的句子中找出1句,使得其与剩下的n-1句有最大公共子序列;

2.设已经找出k个句子,我们从剩下的n-k个句子中找出第k+1个句子,使得组成的所有k+1个句子与剩下的n-k-1个句子有最大公共子序列;

3.重复执行第二步,直到找出的句子的总长度满足一定的设定要求;

按照如上方式,我们自动构建出大量的“伪摘要”数据,下图为样本的例子。

经过预训练后,我们测试了T5 PEGASUS模型在生成式摘要任务上的效果,结果表明经过专门的生成式预训练,T5 PEGASUS的表现确实能够超过基于语言模型式预训练的模型。

同时T5 PEGASUS还具出色的小样本学习能力,也就是说,在只有少量的标注数据的情况下,同样能获得不错的摘要生成效果。

从结果上可以看出,当样本量越少时,T5 PEGASUS的优势越明显。

 RoFormer

目前基于Transformer结构的预训练模型在位置编码上大多可以分为函数式编码、绝对位置编码以及相对位置编码三类。函数式编码的代表则是原版的Transformer采用的Sinusoidal位置编码。而绝对位置编码的代表则是BERT采用的每个位置设置一个向量,并通过预训练参与学习的位置编码方式。相对位置编码的代表则是在XLNET与T5中采用的编码方式。总体来说,绝对位置编码比函数式编码有相对较好的效果,但由于是预先定好总的编码长度,因此在下游任务上使用时对序列长度有限制,而相对位置编码则可以解决这个问题。除此以外,学界还提出了一些较为特殊的位置编码方式,如Encoding word order in complex embeddings中提出的采用复数形式去编码位置。而我们同样借助复数的思路,提出采用复数运算的法则可以得出将绝对位置与相对位置相结合的编码方式,但同时模型依然保持在实数范围内运算的方法。通常认为在文本任务中,词的相对位置信息是最有作用的,因此通常来说任务位置编码的体现主要是在进行Attention计算时,考虑如下的Attention计算:

其中当采用绝对位置编码时,位置信息的计算会体现在内积部分以及中。而在一些相对位置编码方式中,的位置信息会被舍弃,我们也采用这种思路,只考虑在内积部分引入位置信息来体现位置与位置的关系。简单起见我们先假设为二维向量的情况,那么其内积的运算过程可以从复数的角度来看:

其中为取实部,为的共轭复数。那么我们就可以在这里分别加入依赖的绝对位置信息,即将其变为,这样上述的内积则变为:

从上式的右边可以看到,加入的绝对位置信息在内积后变为了只依赖其相对值。虽然整个过程是从复数的视角来进行推导的,但实际上在实现的过程中并不需要引入复数的神经网络。假设某个位置上的二元向量为,那么对其乘上的过程可以根据欧拉公式写为:

即将通过引入,用如下的形式加入位置信息:

上述式子表明在进行Attention运算之前按照其方式加入依赖绝对位置的信息,通过内积运算后得到的结果反映出了相对位置。而上述的推导是在二维向量上进行的,通常在Transformer中的特征维度都很大,但我们可以将所有特征维度看作每两个元素为一组的多组二维向量,并在每组上采用不同的即可,具体的流程如下图:

由于其特殊的位置编码方式,RoFormer可以编码任意长度的文本。我们在Call2019-SCM任务上对比了RoFormer与BERT以及WoBERT的效果:

5%3P9F_EY8D`WHH6}UGRL94.png

其中“-”后面的参数是微调时截断的最大序列长度,可以看到RoFormer确实能较好地处理长文本语义。未来我们还将对RoFormer做进一步的研究实验,在更多的场景中测试其效果。

 02

  业务型预训练模型

业务型预训练模型是针对追一科技的一些列产品形式专门设计的大型预训练模型。在实际的业务场景中,往往会面数据量少、数据质量低、行业专有概念多以及语义粒度细等一系列问题。而通用的大型预训练模型,由于其非限定语料以及语言模型任务的训练方式,虽然可以在开放领域上的大多下游任务中有着不错的平均表现,但在特定的专业领域和特定的任务上的表现却并不是最优的。

针对这一情况,我们希望在业务中使用的预训练模型能够在拥有大型通用预训练模型的整体能力外,还能针对领域专业词汇理解、数据效率、模型鲁棒性等方面有专门的优化与提升。我们将用在业务中的大型预训练模型命名为ZOne(Zero-shot LanguageEncoder)。它在业务场景中的表现不仅比开源的通用大型预训练模型有更好的效果,有更高的数据利用效率,同时还具有零样本的能力(即在没有相关业务标注数据的情况下进行语义理解)。

ZOne以我们的通用预训练模型为基础,在预训练阶段除了使用公开数据外,还加入了追一科技多年积累的行业数据,并融合了SimBERT近义句建模与WoBERT融入词粒度的特点。除此以外,ZOne还结合下游任务形式设计了多个损失函数进行多任务联合训练,我们将会在以后的文章中介绍ZOne模型的更多情况。我们在8个不同行业的业务数据上对比了ZOne模型与BERT、RoBERTa等的大型预训练模型的效果。

上表以谷歌的开源中文BERT为基准,对比了其它开源的中文模型以及ZOne模型在业务上的效果。从结果中可以看出,在BERT之后提出的预训练模型,例如BERT WWM、ELECTRA、RoBERTa等均要比BERT模型有更好的表现,而我们专门为业务定制的ZOne模型则在所有被测业务数据上均好于其它开源的通用大型预训练模型。这表明BERT、RoBERTa等开源的大型预训练模型在专业领域中的特定任务上的效果虽然能高于非预训练模型,但其效果依然不如专门为业务场景设计的ZOne模型。

另一方面,不同业务场景的数据质量与数量参差不齐,特别是在冷启动时通常会面临缺少数据的问题,因此我们希望ZOne模型在全量数据下有更好表现的同时,也需要兼顾数据使用效率。而ZOne模型采用了特殊的预训练方式,具有在业务领域进行零样本的预测能力。零样本预测指的是在业务没有标注数据时,在不用标注数据对ZOne模型进行微调的情况下,直接只用预训练好的ZOne模型进行直接预测。上图中我们对七个业务进行了零样本能力的测试,其中Finetune对应有标注数据的情况,未Finetune对应零样本情况。从结果中可以看到即便是在没有数据的情况下,ZOne模型在7个业务上的效果也都基本达到80%以上的准确率。除了零样本能力外,我们还测试了ZOne模型在业务数据上的准确率与微调数据量之间的关系,以此来反映模型在微调阶段对数据量的需求情况。

上图以全量数据时各业务的准确率为基准,对比8个业务在微调数据量逐步增加的情况下准确率的变化。从图中可以看到,随着数据量的增加,准确率不断上升,而所有的业务都在只使用60%的数据量的情况下,可以达到使用全量数据时95%的效果,该结果表明在面对业务数据时,ZOne模型有较高的数据利用率。

2020年我们对ZOne模型进行了两次升级迭代(分别对应下表的黄色与橙色部分),改进了预训练的损失函数计算方式,以及训练时的样本采样策略,同时引入的文本检索任务,以提高ZOne提取文本特征的能力。这一系列改动提高了模型在单个业务上的表现,同时也将模型微调阶段对数据的需求量进一步降低。新版本的ZOne模型在整体8个业务上的平均准确率比旧版本的ZOne模型提升了4%。同时从下图可以看到新版本的ZOne模型对数据的需求量进一步降低,即使用20%~40%的数据量便可以达到全量数据的95%准确率。

另一方面,ZOne作为大型的预训练模型,对微调与推理的资源有一定的要求。考虑到实际生产环境的资源限制与性能要求的不同,我们用模型蒸馏的方式来最大限度保留模型效果的前提下,压缩模型的大小并加快模型的微调与推理速度。上表中的ZOne-distill(绿色部分)模型为ZOne的蒸馏版本,其体积为原模型的四分之一,微调与推理速度的提升在3倍以上,而模型效果只比原模型下降1%。蒸馏的小型ZOne模型目前正用于追一科技的一些轻量级产品线上。

03

  共同促进中文NLP技术发展

追一科技是国内最早将深度学习技术用于自然语言处理场景,并进行工业化落地的公司之一。我们从成立至今,一直致力于使用最前沿的技术解决现实中的实际问题。

在2016年我们便使用基于RNN的模型进行语义理解的任务,2017年在模型中引入多任务的训练方式,进一步提高多个核心模式的效果。2018年我们开始尝试Transformer结构的模型,并在2019年开始进行自研的大型预训练模型研发。从2019年至今,我们研发了多个通用领域领域的大型预训练模型,并结合预训练与迁移学习的思路,结合自身的业务领域特点,设计了专门的预训练模型供给公司的不同业务产品线中使用,大幅提高了产品的效果与实际的体验。

在大型预训练模型这一方向上,我们会保持持续投入,在保持业务效果优势的同时也会为中文NLP社区提供更多的开源模型,共同促进中文NLP技术的发展。

免责声明:本站部分作品来源于互联网,由网友自主投稿和发布、编辑整理上传,对此类作品本站仅提供交流平台,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议,更不为其版权负责。如有对本站内容有任何问题,请联系我们邮箱: kejiquan@vip.qq.com 会在第一时间处理。丨本文信息:科技圈 » 追一技术分享 AI“大”时代下的NLP预训练模型创新与实践