MTL-BERT:一种结合BERT的中文文本多任务学习模型
2021-03-13武乾坤彭敦陆
武乾坤,彭敦陆
(上海理工大学 光电信息与计算机工程学院,上海 200093)
1 引 言
多任务学习(Multi-task Learning,MTL)在机器学习领域中是一个很有前景的课题.对比单任务学习,多任务学习是把多个相关任务放在同一个模型中训练,同时学习多个任务.多任务学习机类似人类的一种学习行为,人类学习某一项技能时也会对除此之外的技能有提升效果,例如学习编程也能提高学生数学思维能力.多任务学习目标就是通过共同学习多个任务来帮助提升每一项任务性能.
自然语言处理领域中,大多数任务仅解决单一问题.由于单任务学习的目标往往只关注了局部信息,限制了模型的泛化性.而多任务学习能利用任务之间潜在信息,提取各个任务之间共通的特征,提高模型性能[1].
在深度学习领域,通常采用两种常用方法来实现多任务学习:1)参数硬共享机制;2)参数软共享机制.在参数硬共享机制中,不同子任务除拥有自己模型参数外还共享一部分参数.而在参数软共享机制中,每个任务都有自己的模型参数.任务之间使用正则化方式保障参数相似性.Long Duong等人使用L2正则化方式实现参数软共享机制[2].本文关注于参数硬共享机制实现自然语言处理多任务学习.
针对使用参数硬共享机制实现多任务学习,研究者倾向于用前馈神经网络作为共享参数层[3].为了使共享层能更好抓取数据中潜在信息,本文使用BERT预训练模型作为多任务之间的共享层.BERT作为一种动态语义表示模型,具有更强的语义表达能力,能够弥补静态词向量语义提取不足问题.
自然语言处理领域,有监督的文本分类问题已经取得很好的性能.回归任务性能提升相对滞后.回归任务的挑战主要体现在均方损失鲁棒性不足、输出空间较密集.多任务学习能通过在互补任务之间共享域信息来提高模型通用性.即通过提高容易训练的分类任务精度提升难以训练的回归任务的性能.深度模型得益于多个子任务的联合学习,但是,在实践中各个任务之间的相对权重严重地影响了系统的性能[4].在文献中,权重都被当作为超参数,并通过手动进行调优,在深度背景下,这一过程往往是困难且低效的.
本文针对文本领域分类任务和回归任务,从贝叶斯先验概率角度出发提出一个任务之间权重自适应的模型.本文的贡献如下:1)使用BERT作为多任务学习参数共享层,提高模型语义抓取能力;2)利用均值池化和最大值池化级联的方式合并BERT模型提取出来的语义特征,多方位保存语义特征;3)设计MTL-BERT模型,运用自适应方式设置多任务学习任务之间权重;4)使用多任务学习解决文本多标签分类和回归问题.
2 相关工作
2.1 BERT
自然语言处理(Natural Language Processing,NLP)是计算机科学领域中一个重要方向.近些年来,得益于神经网络技术迅速发展,自然语言处理也有重大进展.Bengio等人提出第一个神经语言模型,使用前馈神经网络构建语言模型推动词嵌入技术进步[5].
在自然语言处理任务中,无论是使用深度学习还是传统机器学习,都需要对文本进行向量化表示.Mikolov等人提出word2vec语言模型使用稠密向量来表示文本中词序列[6].作为静态词向量,word2vec无法解决一词多义问题.随着动态词嵌入技术发展,自然语言处理中一词多义问题有了初步解决方案.Matthew等人提出的ELMo模型可以生成动态词向量[7].但是由于ELMo由两个单向LSTM组成,每一个LSTM只能注意到出现在它前面的所有词,触及不到它后面的词语,无法做到真正双向.Devlin等人[8]提出的BERT模型很好地解决ELMo的不足,实现真正双向语言模型.BERT模型能更好理解上下文语境,对语义挖掘有更好的支持.预训练模型通常使用大量未标记数据来学习通用语言表示,并且能够针对不同任务把预训练的模型适配给下游任务,以满足各种不同任务的需要.预训练模型性能能够直接影响下游具体任务性能.
BERT是基于Transformers的一种文本表示模型,通常BERT预训练过程有两种方式:1)预测文本某一句话中MASK的某些Token;2)预测两句话是否是上下文关系.BERT模型通过训练上述两种方式得到文本语义表示.
2.2 多任务学习
如同在人类学习环境下,在机器学习领域,模型所要学习的内容也不应该是独立的.如文献[9]在多个网络流之间提取特征,多个网络流之间的内容存在着相关性.模型能学习很多相关的知识,这些知识遵循相同的规律.如文献[10]提出在人脸识别领域,多任务学习能提高模型泛化能力和识别准确率.多任务学习让我们可以用更少的先验知识,学习到更多内容.文献[11]提出改进的在线MTL算法,通过权重矩阵分解克服任务之间严格的相关性,对多任务学习权重分配有很好的启发.
多任务学习属于迁移学习的一种.如图1所示在神经网络中,往往通过使用共享特征表示,并行训练多个相关任务来实现多任务学习.与单任务模型相比较,多任务旨在通过任务相互影响,提高每一个任务准确度和性能.Xia等人基于深度置信网络(Deep Belief Network,DBN)设计一种多任务学习框架[12].将情感识别任务作为模型主要任务,把基于类别级别分类和基于连续级别回归作为次要任务.最后使用支持向量机作为主任务分类器,模型取得较好结果.Anirban等人提出基于多任务学习神经网络[13],把情绪识别和情感识别作为两个联合任务,提高了模型在情绪识别上的性能.
图1 多任务学习架构Fig.1 Architecture of multi task learning
多任务学习实现方式有很多种:联合学习(joint learning)、自主学习(learning to learn)和带有辅助任务的学习(learning with auxiliary task)等.多任务学习本质是模型能同时优化多个目标,并行优化每个任务的损失函数,进而提高模型性能.多任务学习中不同任务有不同的噪音模式,对两个任务同时训练能学习到一个更为泛化的表示.不同任务的噪音对彼此互相有影响,使多任务学习有效增加训练实例数目.
3 准备工作
用FW(x)表示模型的特征提取部分,因此,回归模型可以定义为映射FW,W1(x):X→Y1,多标签模型可以定义为映射FW,W2(x):X→Y2,W1和W2分别为两项任务的私有参数.区别于对每个模型进行单独优化,本研究尝试采用联合学习的模式.
4 本文工作
本节将首先阐述本文的模型结构,并对多任务进行建模.此外对于建模中存在的超参数难以优化的问题,本研究提出了一种权重动态优化的方法.并从贝叶斯优化的角度加以阐述.
4.1 模型设计
在自然语言处理中,通常是先将文本序列嵌入到稠密词向量中,但过往的词嵌入方法,类似于Word2Vec对语义和语法的解析是静态的.BERT作为迁移模型,通过无监督模式学习海量预料库的语言范式,以便在下游任务中能更快适应任务需求.本文将BERT作为特征提取器具有以下优点:1)BERT在预训练过程中已经保存深层次语义信息;2)不同于word2vec等静态词向量,BERT处理文本数据时对一词多义有更好的支持;3)BERT模型有强大的特征提取能力,支持多任务模型有更好的泛化能力.
BERT模型[14]编码过程会将原始的输入序列映射到一个指定维度向量空间,通常BERT模型在输入文本前插入一个[CLS]符号,将该符号对应输出向量作为输入文本语义表示.该语义表示用于下游回归任务和分类任务.定义BERT编码方式如下:
h1,h2,…,hl=bert(x1,x2,…,xl)
(1)
这里,bert(·)是BERT预训练模型,(x1,x2,…,xl)是原始输入,h∈d是输入Token经过BERT编码之后向量表示.为提高BERT模型在多任务阶段泛化能力,本文将采用平均mean(·)池化和最大max(·)池化级联方式将嵌入序列转化为d维特征向量f.经过平均池化提取的特征能抓取输入数据中每一个Token的平均响应,而最大池化提取的特征能抓取输入数据中每一个Token的最大响应.经过实验证明平均池化特征和最大池化特征融合使模型具有更好的泛化能力.特征池化方式如图2所示,特征提取过程见式(2).
f=mean(h)+max(h)
(2)
提取出来的特征f用于下游任务,如分类回归等任务.通常各个任务都作为单独模型去训练.对有些任务,由于目标函数的局限性,深层网络训练往往会存在欠拟合.比如,通过法律文书预测刑期,侧重了样本的局部特征,使得单模型的训练很难进行有效收敛,而BERT的使用能有效缓解这一问题.进一步地,多任务学习目标之间通常都有相关性,不同任务之间有着相互促进的作用,模型可以利用多个相关任务之间有用信息来提升模型表现.模型联合多任务学习训练过程如图2所示.
图2 MTL-BERT模型架构Fig.2 Architecture of MTL-BERT model
4.2 多任务学习
多任务学习所考虑的是如何实现各个任务上的最优.一般地,可以通过加权线性累加的方式将多个任务统合成一个.
L(W,α1,α2)=α1L1(W,W1)+α2L2(W,W2)+b
(3)
这里,L1(W,W1)为回归问题的损失,而L2(W,W2)为多标签分类问题的损失,α为任务间的权重,b为偏置项.上述方法是可解释的,权重越大,说明对应任务的贡献越大,反之亦然.此外,模型的性能极为依赖权重的选择,但同时这些超参数非常难以调优,尤其在深度学习背景下.
任务本身具有不确定性,这源自于模型输出和真实标签之间存在本质的噪声.在多任务背景下,这种不确定性亦可以表示各个任务间的权重,这一点将在后文做进一步论述.并且,可预见的是这一不确定性对不同任务是固有的,说明了存在一组超参数满足最优范式.
4.3 理论论述
论文从概率模型思想出发,针对文本中的回归预测和多标签分类任务,提出一种多任务之间权重学习方法.本章节是该定理的证明:
正态分布概率密度函数如下所示:
(4)
Y1=FW,W1(x)+ε
(5)
其中ε为残差,由式(5)可得:
ε=Y1-FW,W1(x)
(6)
(7)
将式(4)带入式(7)可得:
(8)
对式(8)求对数之后整理可得:
(9)
式(9)中log(Y1|FW,W1(x))是回归任务的损失值,可以看出回归任务的损失正比关系.
在多标签分类任务中我们通常将模型的输出压缩到sigmoid函数中去,那么分类模型的概率则可以写成式(10)所示:
p(Y2|FW,W2(x))=sigmoid(FW,W2(x))
(10)
Y2为多标签分类模型输出值.两个任务条件概率应该如下所示:
p(Y1,Y2|FW,W2(x))=p(Y1|FW,W2(x))·p(Y2|FW,W2(x))
(11)
对于神经网络每一个节点使用sigmoid函数进行激活.分类模型输出符合高斯分布.根据式(9)可得出回归任务的损失系数.又因为分类模型输出符合高斯分布,同理我们定义我们的损失函数为:
(12)
5 实 验
5.1 实验数据
我们采用数据集CAIL2018(1)https://github.com/thunlp/CAIL进行实验,该数据集共有 187,100 篇中文法律文书,这些文书均为中国裁判文书网公开的法律判决书.实验中,我们将训练集设置为154,592 篇,测试集设置为32,508篇,验证集设置为17,131篇.表1给出一些样本实例,其中罪名预测共有202种标签,刑期单位为月.
表1 数据集样本实例Table 1 Dataset sample instance
5.2 评价指标
考虑到本研究包括多标签分类和回归两个任务,所以有两个方面评价指标需要指定.多标签分类任务中通常使用两种评价指标:微平均F1值(Micro-F1-measur)和宏平均F1值(Macro-F1-measure);回归任务的评价指标多采用预测值和真实值之间误差值.
在给出微平均F1值和宏平均F1值之前,我们先把分类问题预测结果分为3类:True Positive(TP),False Positive(FP)和False Negative(FN).TP代表真阳性,预测为正实际也为正;FP代表假阳性,预测为正实际为负;FN代表假阴性,预测为负实际为正.
精确率的定义为:
(13)
召回率的定义为:
(14)
F1值是精确率和召回率的调和平均数:
(15)
微平均F1值是在计算出所有类别的精确率和召回率的基础上,计算出来的F1值:
(16)
对每一个类别的F1值求平均称为宏观情况下的F1值:
(17)
从式(16)和式(17)也可以看出微平均F1值受到高频类别影响较大,而宏平均F1值更容易受到低频类别影响.微观F1值越大表明模型在常见类别标签中的预测精度越高,模型的性能越好.宏观F1值越大表明模型在稀有类别比标签中的预测精度越高.
回归任务评价指标:定义模型预测出的刑期为lp, 真实刑期为la,则定义刑期预测的评价指标为:
E(f;W)=|log(lp+1)-log(la+1)|
(18)
评价指标E(f;W)用来描述回归预测值和真实值之间的差距,该指标越小说明模型回归预测越接近真实值.模型性能越好.
5.3 实验设置与预处理
论文使用哈工大讯飞联合发布的全词覆盖中文BERT预训练模型(2)https://github.com/ymcui/Chinese-BERT-wwm.该模型采用维基百科作为原始语料,同时使用简体和繁体中文进行预训练.数据清洗之后,使用1,360万条数据作为输入.使用全词MASK的方式进行模型预训练.
实验环境:本研究进行实验的操作系统是Windows10,该设备配备CPU为Core(TM)i7-8700KCPU@ 3.70GHz,内存为64.0 GB以及两块NVIDIA GeForce 1080Ti显卡,然后在深度学习框架Keras-GPU 2.2.4下使用Python3.6编程完成实验.
数据预处理:为保证原始数据中输入特征差异性,对原始数据中出现的数字做量化替换.金额中:0~1000元替换为A,1000~4000元替换为B.重量中:0~10克替换为H,10~20克替换为I.酒精浓度:0~20mg/100ml替换为O,20~80mg/100ml替换为P.
5.4 实验结果与分析
实验 1.单任务模型和多任务模型性能比较
我们使用单任务模型训练4个深度学习模型,用以和MTL-BERT模型进行对比.Baseline模型参数设置如表2所示.
表2 Baseline 模型的参数设置Table 2 Parameter setting of the Baseline model
FastText:FastText是一种简单高效的文本特征提取方法[15].FastText 将句子表示成词袋模型,使用N-grams获取文本特征信息.
LSTM:LSTM模型是一种RNN变体,可以用来处理序列长度变化的数据[16,17].LSTM考虑上下文关系,从而丰富文本的表达.
TextCNN:TextCNN是具有多个过滤器,能很好捕捉文本信息局部相关性[18].可以用来提取句子中类似N-grams的关键信息.
Sigle-BERT:预训练BERT模型作为特征提取器,对预训练的BERT模型进行微调.
实验结果如表3所示.从结果中可以看出,单任务BERT模型在文本分类和回归模型中有出色表现.任务1中两个指标体现模型两个方面表现能力,微观F1值体现模型对出现次数较多的标签预测能力.宏观F1值则更能体现模型对出现次数较少的标签预测命中的情况.MTL-BERT模型在任务1中两个指标的表现都有所提升,任务2的回归问题有明显提升.可以看出多任务模型对单个任务的预测能力有互补效果,能提升每个任务的性能.
表3 Baseline模型和MTL-BERT性能比较Table 3 Comparison of baselin model and MTL-BERT
实验 2.自适应损失权重对模型性能的影响
为验证子任务损失权重对模型性能的影响.在实验2中手动设置3组不同损失权重和MTL-BERT进行对比.子任务损失权重分别设置为α1,α2=0.5,0.5、α1,α2=0.4,0.6和α1,α2=0.6,04.子任务对应损失权重设置越大,表明该任务对整个模型贡献就越大.从表4中可以看出,当我们手动设置某项子任务损失权重所占比例较大时,会让模型在该任务上的得分偏高而在另一个子任务上的得分偏低.MTL-BERT模型使用自适应损失权重方法,能够自主的找到任务损失权重之间的平衡.从而让模型能在各个子任务上达到最佳性能.
表4 自适应损失权重对模型性能的影响Table 4 Influence of adaptive loss weight on model performance
实验 3.采用不同的共享层多任务学习性能对比
为便于观察,图3中任务2评价指标E(f;W)得分是乘以100之后的结果.为验证BERT作为共享层对多任务学习的贡献,实验3对比了采用前馈神经网络作为共享层的多任务学习模型(MTL-FNN)和采用BERT作为共享层的多任务学习模型(MTL-BERT)的实验结果.在图3中可以看出无论是任务1中的微观F1值、宏观F1值还是任务2中的E(f;W)值,MTL-BERT模型都要比MTL-FNN模型有较高的性能提升.尤其是宏观的F1值,MTL-BERT效果提升更为明显.通过5.2节内容可知,宏观的F1值更能体现模型对低频类别的预测能力.模型对低频类别的预测能力越强,表明模型具有更好的泛化能力.实验结果证明了MTL-BERT模型具有更好的性能以及更泛化.
图3 不同共享层多任务学习性能对比Fig.3 Comparison with differrnt shared layer
6 结 论
在自然语言处理任务中很多子问题之间具有相关性.把多个相关任务放在一起去学习对模型获取任务之间丰富关联信息有着极大贡献.设置各个任务对模型的贡献一直以来都是一个值得研究的问题.本文使用BERT去提取文本数据中的特征信息,从概率学的角度出发,根据模型预测结果的方差,针对多标签分类和回归任务,为模型提供动态损失权重.将难以学习的多任务之间损失权重也转化成为一个可学习参数.实验结果显示这种方法具有更好的性能.未来我们将考虑更多种类型任务联合,尝试理解多任务学习任务之间的层次结构、相似性关系;充分去掌握任务之间的关系对多任务学习模型性能的影响;旨在提高多任务模型的泛化能力.