CLUE(Chinese Language Understanding Evaluation)[1]是中文语言理解权威测评榜单,包含了文本分类、句间关系、阅读理解等众多语义分析和语义理解类子任务,对学术界和工业界都产生了较大的影响。
FewCLUE[2,3]是CLUE中专门用于中文小样本学习评测的一个子榜,旨在结合预训练语言模型通用和强大的泛化能力,探索小样本学习最佳模型和在中文上的实践。FewCLUE的部分数据集只有一百多条有标签样本,可以衡量模型在极少有标签样本下的泛化性能,发布后吸引了包括网易、微信AI、阿里巴巴、IDEA研究院、浪潮人工智能研究院等多家企业与研究院的参与。不久前,美团平台搜索与NLP部NLP中心语义理解团队的小样本学习模型FSL++以优越的性能在FewCLUE榜单上取得第一名,达到SOTA水平。
大规模预训练模型虽然在各大任务里面取得非常好的效果,但是在特定的任务上,还是需要许多标注数据。美团的各个业务中,有着丰富的NLP场景,往往需要较高的人工标注成本。在业务发展早期或者新的业务需求需要快速上线时,往往会出现标注样本不足的现象,使用传统Pretrain(预训练)+ Fine-Tune(微调)的深度学习训练方法往往达不到理想的指标要求,因此研究小样本场景的模型训练问题就变得非常必要。
本文提出了一套大模型 + 小样本的联合训练方案FSL++,综合了模型结构优选、大规模预训练、样本增强、集成学习以及自训练等模型优化策略,最终在中文语言理解权威评测基准下的FewCLUE榜单取得了优异的成绩,并且在部分任务上性能超过了人类水平,而在部分任务上(如CLUEWSC)还有一定的提升空间。
FewCLUE发布后,网易伏羲使用自研的EET模型[4],并通过二次训练增强模型的语义理解能力,再加入模版进行多任务学习;IDEA研究院的二郎神模型[5]在BERT模型的基础上使用更先进的预训练技术训练大模型,在下游任务微调的过程中用加入动态Mask策略的Masked Language Model(MLM)作为辅助任务。这些方法都使用Prompt Learning作为基本的任务架构,跟这些自研的大模型相比,我们的方法主要在Prompt Learning框架的基础上加入了样本增强、集成学习以及自学习等模型优化策略,极大地提高模型的任务表现和鲁棒性,同时这套方法可以适用于各种预训练模型,更加灵活便捷。
FSL++整体模型结构如下图2所示。FewCLUE数据集为每个任务提供160条有标签数据以及接近两万条无标签数据。本次FewCLUE实践中,我们先在Fine-Tune阶段构造多模板Prompt Learning,并对有标签数据采用对抗训练、对比学习、Mixup等增强策略。由于这些数据增强策略采用不同的增强原理,可以认为这些模型之间差异性比较显著,经过集成学习之后会有比较好的效果。所以在采用数据增强策略进行训练以后,我们拥有了多个弱监督模型,并且用这些弱监督模型在无标签数据上进行预测,得到无标签数据的伪标签分布。之后,我们将多个经过不同的数据增强模型预测得到的无标签数据的伪标签分布整合起来,得到一份总的无标签数据的伪标签分布,接着重新构造多模板Prompt Learning,并再次使用数据增强策略,选择最优策略。目前,我们的实验只进行一轮迭代,也可以尝试多轮迭代,不过随着迭代次数增加,提升也不再明显。
预训练语言模型是在庞大的无标签语料库上进行训练的。 例如,RoBERTa[6]在160GB以上的文本进行训练,包括百科全书、新闻文章、文学作品和Web内容。通过这些模型学习到的表示,在包含多种来源的各种大小的数据集的任务中实现出色的性能。
FSL++模型使用RoBERTa-large模型作为基础模型,并且采用融入领域知识的Domain-Adaptive Pretraining (DAPT)[7]预训练方法和融入任务知识的Task-Adaptive Pretraining (TAPT)[7]。DAPT旨在预训练模型的基础上,增加大量领域内无标签文本继续训练语言模型,之后再在指定任务的数据集上进行微调。
对目标文本领域进行继续预训练,可以提高语言模型的性能,尤其是在与目标文本领域相关的下游任务上的性能。并且,预训练文本与任务领域的相关度越高,带来的提升越大。在本次实践中,我们最终使用了在100G包含娱乐节目、体育、健康、国际事务、电影、名人等各个领域的语料的CLUE Vocab[8]上预训练得到的RoBERTa Large模型。TAPT指在预训练模型的基础上,增加数量较少但与任务直接相关的无标签语料进行预训练。针对TAPT任务,我们选择使用的预训练数据是FewCLUE榜单为每个任务提供的无标签数据。
除此之外,在针对句间关系任务,如中文自然语言推理任务OCNLI、中文对话短文本匹配任务BUSTM的实践中,我们使用在其他句间关系任务如中文自然语言推理数据集CMNLI、中文短文本相似度数据集LCQMC上进行预训练的模型参数作为初始参数,相比直接用原始模型完成任务,也能提升一定的效果。
FewCLUE包含多种任务形式,我们为每种任务选择了合适的模型结构。文本分类任务和机器阅读理解(MRC)任务本身的类别词就携带了信息,因此更适合建模为Masked Language Model(MLM)形式;而句间关系任务判断两个句子的相关性,更类似于Next Sentence Prediction(NSP)[9]任务形式。因此,我们为分类任务和阅读理解任务选择PET[10]模型,为句间关系任务选择EFL[11]模型,EFL方法可以通过全局采样构造负样本,学习到更鲁棒的分类器。
Prompt Learning的主要目标是尽可能减小预训练目标与下游微调目标的差距。通常现有的预训练任务均包含MLM损失函数,但是下游的任务则并未采用MLM,而是引入新的分类器,使得预训练任务和下游任务出现了不一致。Prompt Learning不引入额外的分类器或其他参数,而是通过拼接模板(Template,即为输入数据拼接语言片段,从而改造任务为MLM形式)和标签词映射(Verbalizer,即为每个标签在词表中找到对应的词,从而为MLM任务设定预测目标),使得模型可以在少量样本的条件下在下游任务中使用。
以图3展示的电商评价情感分析任务EPRSTMT为例。给定文本“这个电影真不错,值得第二次观看!”,传统的文本分类则是在CLS部分的Embedding接上分类器,并映射到0-1分类上(0:负向,1:正向)。这种方法在小样本场景下需要训练新的分类器,比较难获得好的效果。而基于Prompt Learning的方法则是创建模板“这是一条 [MASK] 评。”,再将模板与原文进行拼接,训练时通过语言模型预测[MASK]位置的词,再将其映射到对应的类别上(好:正向, 差:负向)。
由于缺乏足够数据,有时很难确定表现最好的模板和标签词映射。因此,也可以采用多模板与多标签词映射的设计。通过设计多个模板,最终的结果采用多个模板的结果的整合,或设计一对多的标签词映射,让一个标签对应多个词。同上述例子,可以设计如下模板组合(左:同一个句子的多模板,右:多标签映射)。
任务样例
EFL模型将两个句子拼接在一起,用输出层的[CLS]位置处的Embedding后接一个分类器完成预测。EFL的训练过程中,除了训练集的样本,还会进行负样本构造,训练过程中,在每个Batch里随机选择其他数据中的句子作为负样本,通过构造负样本进行数据增强。虽然EFL模型需要训练新的分类器,但目前有很多公开的文本蕴含/句间关系数据集,如CMNLI、LCQMC等,可以通过在这些样本上进行持续学习(continue-train),再将学习到的参数迁移到小样本场景中,用FewCLUE的任务数据集进行进一步微调。
任务样例
数据增强方法主要有样本增强和Embedding增强。NLP领域中,数据增强的目的是在不改变语义的前提下扩充文本数据。主要的方法包括简单文本替换、使用语言模型生成相似句子等,我们尝试过EDA等扩充文本数据的方法,但是一个词的变化就可能导致整个句子的意思发生翻转,经过替换的文本携带大量噪音,所以很难用简单的规则样本变化产生足够的增强数据。而Embedding增强,则不再对输入进行操作,转而在Embedding层面进行操作,可以通过对Embedding增加扰动或者插值等方式提升模型的鲁棒性。
因此,本次实践中我们主要进行Embedding增强。我们用的数据增强策略分别有Mixup[12]、Manifold-Mixup[13]、对抗训练(Adversarial training, AT) [14]和对比学习R-drop[15]。数据增强策略的详细介绍见之前的技术博客小样本学习及其在美团场景中的应用。
Mixup通过对输入数据进行简单的线性变换,构造新的组合样本和组合标签,可以增强模型的泛化能力。在各种有监督任务或者半监督任务上,使用Mixup都能极大提高模型的泛化能力。Mixup方法可以视为正则化操作,它要求模型在特征层面生成的组合特征满足线性约束,并且利用这种约束对模型施加正则化。直观来看,当模型的输入为另外两个输入的线性组合时,其输出也是这两个数据单独输入模型后所得输出的线性组合,其实就是要求模型近似为一个线性系统。
Manifold Mixup将上述的Mixup操作泛化到特征上。因为特征具有更高阶的语义信息,所以在其维度上插值可能会产生更有意义的样本。在类似于BERT[9]、RoBERTa[6]的模型中,随机选择层数k,对该层的特征表示进行Mixup插值。普通的Mixup的插值发生在输出层Embedding部分,而Manifold Mixup相当于把这一系列插值操作加入到语言模型内部的Transformers结构的随机某层中。
对抗训练通过在输入样本上增加微小的扰动来显著提高模型Loss。对抗训练就是训练一个能有效识别原始样本和对抗样本的模型。基本原理就是通过添加扰动构造一些对抗样本,交给模型去训练,提高模型在遇到对抗样本时的鲁棒性,同时也能提高模型的表现和泛化能力。对抗样本需要具有两个特点,分别是:
R-Drop对同一个句子做两次Dropout,并且强制由Dropout生成的不同子模型的输出概率保持一致。Dropout的引入虽然效果很好,但是它会导致训练和推理过程的不一致性问题。为缓解这种训练推理过程的不一致性,R-Drop对Dropout进行正则化处理,在两个子模型产生的输出中增加对输出数据分布的限制,引入数据分布度量的KL散度损失,使得Batch内同一个样本生成的两个数据分布尽量接近,具有分布一致性。具体来说,对于每个训练样本,R-Drop最小化了由不同Dropout生成的子模型的输出概率之间的KL 散度。R-Drop作为一种训练思想,可以用到大部分有监督或半监督的训练中,通用性强。
我们使用的三种数据增强策略,Mixup是在语言模型的输出层Embedding和语言模型的内部随机某层Transformers的输出层中做两个样本的线性变化,对抗训练是在样本上增加微小的扰动,而对比学习是对同一个句子做两次Dropout形成正样本对,再用KL散度限制两个子模型保持一致。三种策略都是通过在Embedding完成一些操作来增强模型的泛化性,经过不同策略得到的模型分别都具有不同的偏好,这就为下一步的集成学习提供了条件。
集成学习可以组合多个弱监督模型,以期得到一个更好更全面的强监督模型。集成学习潜在的思想是即便某一个弱分类器得到了错误的预测,其他的弱分类器也可以将错误纠正回来。如果待组合的各个模型之间差异性比较显著,那么集成学习之后通常会有一个较好的结果。
自训练使用少量的标记数据和大量的未标记数据对模型进行联合训练,首先使用经过训练的分类器来预测所有未标记数据的标签,然后选择置信度较高的标签作为伪标签数据,将伪标记数据与人工标记的训练数据联合起来重新训练分类器。
集成学习+自训练是一套可以利用多个模型以及无标签数据的方案。这其中,集成学习的一般步骤为:训练多个不同的弱监督模型,分别用每个模型预测无标签数据的标签概率分布,计算标签概率分布的加权和,得到无标签数据的伪标签概率分布。自训练指训练一个模型用于组合其他各个模型,其一般步骤为:训练多个Teacher模型,Student模型学习伪标签概率分布中高置信度样本的Soft Prediction,Student模型作为最后的强学习器。
在本次FewCLUE实践中,我们先在Fine-Tune阶段构造多模板Prompt Learning,并对有标注数据采用对抗训练、对比学习、Mixup等增强策略。由于这些数据增强策略采用不同的增强原理,可以认为这些模型之间差异性比较显著,经过集成学习之后会有比较好的效果。
在采用数据增强策略进行训练以后,我们拥有了多个弱监督模型,并且用这些弱监督模型在无标签数据上进行预测,得到无标签数据的伪标签分布。之后,我们将多个经过不同的数据增强模型预测得到的无标签数据的伪标签分布整合起来,得到一份总的无标签数据的伪标签分布。筛选伪标签数据的过程中,我们不一定会选择置信度最高的样本,因为如果每个数据增强模型给出的置信度都很高,说明这个样本可能是容易学习的样本,不一定有很大价值。
我们综合多个数据增强模型给出的置信度,尽量选择置信度较高,但是又不容易学习的样本(比如多个模型预测不全部一致)。接着用标注数据和伪标注数据的集合重新构造多模板Prompt Learning,再次使用数据增强策略,并选择最好的策略。目前,我们的实验目前只进行一轮迭代,也可以尝试多轮迭代,不过随着迭代次数增加,提升也会减少,不再显著。
FewCLUE榜单提供了9个任务,其中分别为4个文本分类任务,2个句间关系任务和3个阅读理解任务。文本分类任务有电商评价情感分析、科学文献分类、新闻分类和App应用描述主题分类任务。主要归类为短文本二分类、短文本多分类和长文本多分类。其中有的任务类别众多,超过100类,并且出现了类别不均衡问题。句间关系任务有自然语言推理和短文本匹配任务。阅读理解任务则有成语阅读理解选择填空,摘要判断关键词判别和代词消歧任务。每个任务大体提供了160条有标签数据和两万条左右的无标签数据。因为长文本分类任务类别众多,过于困难,也提供了更多的有标签数据。详细的任务数据情况如表4所示:
表5展示了不同模型和参数量的实验结果的对比。在RoBERTa Base实验中,使用PET/EFL模型会超过传统的直接Fine-Tune模型结果2-28PP。以PET/EFL模型为基础,为了探索大模型在小样本场景中的效果,我们在RoBERTa Large上进行了实验,相对于RoBERTa Base,大模型可以提升模型0.5-13PP;为了更好地利用领域知识,我们进一步在经过CLUE数据集上增强预训练的RoBERTa Large Clue模型上进行实验,融入了领域知识的大模型进一步提升结果0.1-9pp。基于此,在之后的实验中,我们都在RoBERTa Large Clue上进行实验。
表6展示了在PET/EFL模型上进行数据增强和集成学习实验结果, 可以发现即使是在大模型上使用数据增强策略,模型也能带来0.8-9PP的提升,而进一步进行集成学习&自训练以后,模型表现会继续提升0.4-4PP。
其中集成学习+自训练步骤中,我们尝试了几种筛选策略:
在美团的各个业务中,有着丰富的NLP场景,部分任务可以归类为文本分类任务和句间关系任务,以上提到的小样本学习策略已经应用于美团点评的各种场景,期望在数据资源稀少的情况下训练出比较好的模型。此外,小样本学习策略已经广泛应用于美团内部自然语言处理(NLP)平台的各个NLP算法能力中,在众多业务场景下落地并取得显著收益,美团内部的工程师可通过该平台来体验NLP中心相关的能力。
文本分类任务
医美题材分类:对美团和点评的笔记内容按题材分为8类:猎奇、探店、测评、真人案例、治疗过程、避坑、效果对比、科普。用户点击某一种题材时,返回对应的笔记内容,上线至美团和点评App医疗美容频道的百科页、方案页经验分享,小样本学习利用2,989条训练数据准确率提升1.8PP,达到了89.24%。
攻略识别:从UGC和笔记中挖掘旅游攻略,提供旅游攻略的内容供给,应用于景点精搜下的攻略模块,召回内容为描述旅游攻略的笔记,小样本学习利用384条训练数据准确率提升2PP,达到了87%。
学城文本分类:学城(美团内部知识库)有大量的用户文本,经归纳将文本分为17种类别,已有模型在700条数据上训练,通过小样本学习,在已有模型上提升模型精度2.5PP,达到84%。
项目筛选:LE生活服务/丽人等业务目前的评价列表页混排评价的方式不便让用户快速找到决策信息,因此需要更有结构化的分类标签来满足用户的需求,小样本学习在这两个业务上利用300-500条数据上准确率均达到95%+(多个数据集分别提升1.5-4PP)。
句间关系任务
医美功效打标:对美团和大众点评的笔记内容按功效进行召回,功效的类型有:补水、美白、瘦脸、除皱等,上线至医美频道页,有110种功效类型需要打标,小样本学习仅用2909条训练数据准确率达到了91.88%(提升2.8PP)。
医美品牌打标:品牌上游企业有针对旗下产品进行品牌宣传和营销的诉求,而内容营销是当前主流、有效的营销方式之一。品牌打标就是为每种品牌如“伊肤泉”、“术唯可”召回详细介绍该品牌的笔记内容,共有103种品牌,已上线至医美品牌馆,小样本学习仅用1676条训练数据准确率达到了88.59%(提升2.9PP)。
在本次榜单提交中,我们构建了一种基于RoBERTa的语义理解模型,并通过增强预训练、PET/EFL模型、数据增强和集成学习&自训练来提升模型的效果。该模型能完成文本分类、句间关系推理任务和几种阅读理解任务。
通过参加本次测评任务,我们对小样本场景下的自然语言理解领域的算法和研究有了更深的认识,也借此对前沿算法的中文落地能力进行了摸底测试,为后续进一步算法研究、算法落地打下了基础。此外,本次数据集中的任务场景与美团搜索与NLP部的业务场景存在很大相似性,该模型的很多策略也直接应用在实际业务中,直接为业务赋能。
骆颖、徐俊、谢睿、武威,均来自美团搜索与NLP部/NLP中心。