廖胜兰,吉建民,俞 畅,陈小平
(1.中国科学技术大学 计算机科学与技术学院,合肥 230026;2.中国科学技术大学 软件学院,合肥 230031)
随着人工智能领域的发展,越来越多的语音助手、聊天机器人和服务机器人等融入到人类的生活中。与这些语音助手、机器人进行交流的过程称为人机交互,而人机交互的第一步就是机器人需要理解用户的语义意图。现有的人机交互对话系统主要有任务导向型对话系统和非任务导向型聊天对话系统两种。在任务型导向对话系统中,当有目的地要求机器人完成某项工作时,机器人必须先理解用户的意图。例如,手机上的语音助手需要理解用户的意图是查天气还是拨打电话,餐厅的机器人需要理解用户的意图是点餐还是结账。因此,意图识别是人机交互系统中极为重要的模块,并且作为对话系统中的意图识别模块,需要具有快速的响应能力。
意图识别也叫做意图分类,是一种特殊的文本分类。因为在任务型导向对话系统中,用户意图通常具有文本较短、目的性强等特点。意图分类从传统的模板匹配方法到统计学习方法,再到目前流行的深度学习方法,已经有大量的研究团队提出了许多经典的模型。随着自然语言处理领域深度学习模型的发展,谷歌公司(Google)在2018 年提出的BERT(Bidirectional Encoder Representations from Transformers)模型,使得大规模的预训练方法成为自然语言处理领域的主流方法[1]。
虽然BERT 模型在自然语言处理领域的各项任务上都能取得很好的效果,但是由于其模型庞大,训练需要大量数据且耗费大量资源,因此高校及中小企业的科研团队难以从头预训练BERT。因此,如何利用预训练过的BERT 模型来应用到特定任务上成为一个值得探讨的课题。根据文献[1]中的实验结果,基于BERT 进行微调的教师模型能得到比Text-CNN[2]和Text-RCNN(Recurrent Convolution Neural Network)[3]等经典模型更高的准确率,但是由于模型规模依然庞大,在任务中预测的时间也相应更长,在应用到实际任务时受到延时等影响。因此,用教师模型在预训练及微调中获得的知识,来指导原有小规模模型训练,从而提升小规模模型的性能。这种训练方法称为知识蒸馏(Knowledge Distillation,KD)[4]。
在知识蒸馏的过程中,除原有的小规模数据集外,本文利用一种序列生成对抗网络(sequence Generative Adversarial Network,seqGAN)[5]模型来生成更多的领域内的无标签文本。无标签文本作为原有数据集的扩充,没有类别标注,可利用拥有大量知识的教师模型来预测数据的类别,作为扩展数据训练学生模型。通过无标签文本,教师模型中的知识可以更好地迁移到学生模型,本文选取经典的文本分类模型作为学生模型,对于教师模型,则对预训练的BERT 模型进行改进,并在实验过程中对改进模型的性能进行分析和比较。
传统的意图分类方法主要是基于手工模板和专家规则的方法,能够在小数据集上较快实现,但是由于模板和规则具有领域特征,因此难以维护,可移植性较差。文献[6]研究发现,即使在同一领域内,不同的表达方式也会导致规则模板数量增加,因此会耗费大量的资源。所以,传统的方法虽然只需要少量数据,但是与领域任务高度相关,且依赖于人工资源。
统计学习方法开始兴起后,特征工程加浅层分类器的机器学习模型成为主流。特征工程是指对语料文本进行特征提取,如字、词特征、N-Gram、TFIDF(Term Frequency-Inverse Document Frequency)特征权重等。分类器的训练依赖于特征工程中提取的文本特征,常用的分类器有支持向量机(Support Vector Machine,SVM)[7]、逻辑斯蒂克回归(Logistic Regression,LR)[8]、朴素贝叶斯(Naïve Bayes,NB)[9]和集成模型Adaboost[10]等。许多研究者在特征的降维和分类器的设计方面做了大量的工作,例如YANG 对各种特征选择方法,包括信息增益、互信息和卡方统计量等,从实验上进行了分析和比较[11]。
由于自然语言的离散性质,深度学习很难直接应用到自然语言处理领域。因此,如何解决文本的连续表示是一个难题。词向量的分布式表示提出后[12],深度学习模型可以提取到文本更深层的特征,从而进行高准确率的分类。随着深度学习模型在自然语言处理领域的发展和应用,越来越多的学者将卷积神经网络(Convolutional Neural Network,CNN)[2]、循环神经网络(Recurrent Neural Network,RNN)[13]和其变体长短时记忆(Long Short-Term Memory,LSTM)[14]、门控循环单元(Gated Recurrent Unit,GRU)[15]和注意力机制[16]等应用于意图识别任务中。深度学习模型可以免去复杂的人工特征工程,直接在网络中进行特征提取,实现端到端的训练过程。
从词向量的分布式训练开始,预训练模型逐渐被人们熟知。最早的CBOW(Continuous Bag of Words)和Skip-gram 模型分别通过利用上下文预测中心词和利用中心词预测上下文作为训练目标,对无标签数据进行训练,得到每个词含有语义信息的词向量表示[17]。但是这样训练得到的词向量是静态的,无法解决不同语境下的一词多义性问题。因此,文献[18]提出一个双向LSTM(Bi-LSTM)的语言模型,称为ELMO(Embedding from Language Models)。ELMO 模型的双向LSTM 结构产生的词向量包含左侧上文信息和右侧下文信息,是上下文相关的动态词向量,并且输入语句中每个单词都能得到对应的3 个词向量,从底层到顶层分别包含了不同层次的语义信息,可以分别用于特定任务上的词向量输入。
但是ELMO 模型基于循环神经网络结构,其中单元是LSTM,难以并行训练,自研究人员提出Transformer 模型[19]后,自注意力结构的高度并行化训练大幅提升了模型的训练速度,因此该模型具有更深的深度和更强的语义表达能力。Transformer 模型在许多任务上都代替了原来基于RNN 的模型。随后,基于Transformer 块结构的GPT(Generative Pre-Training)[20]模型和BERT 模型[1]相继提出。GPT模型是单向的语言模型,相比循环神经网络可以捕捉到更长的语义信息,计算速度更快。但是GPT 模型的单向特征会忽略上下文信息,限制了其在更多应用场景的效果。
BERT 模型则是一个基于Transformer 结构的双向语言模型,采用了掩码语言模型(Masked Language Model,MLM)和下一句预测(Next Sentence Predict,NSP)两个方法作为预训练过程中的任务,并且使用更强大的机器训练更大规模的数据,使得BERT 的结果达到了全新的高度。在BERT 模型之后,许多研究团队提出诸多改进方案,包括对语言模型改进用于语言生成的MASS 模型[21]、融合知识图谱进行改进的ERNIE 模型[22]和用于多任务学习的MTDNN 模型[23]等。
图1 基于知识蒸馏的意图分类框架Fig.1 Intent classification framework based on knowledge distillation
知识蒸馏的概念最早在计算机视觉领域被提出[4],可以被看作一种模型压缩方法。“教师-学生”框架将复杂的、学习能力强的教师网络学到的特征表示知识“蒸馏”出来,传递给参数量小、学习能力弱的学生网络。
对于一般的分类问题,数据的标签是一个“onehot”类别,也即一条数据的类别是固定的,称为“硬标签”。但在很多实际情况下,一条数据有一定的概率可能属于其他的类别。比如,在手写体识别任务中,一个模糊的“3”图片,由于形状的相似性,它有一定的概率属于“2”或“5”类别。因此,在蒸馏过程中,训练完成的教师网络在预测时将soft Max 层的标签概率分布信息提供给学生模型作为指导。这些标签概率分布包含了类别间信息,文献[4]将其称为软标签。这种软标签中包含的特征信息是“one-hot”类别标签中没有的,也是学生模型难以学到的。因此,通过将大型模型的软标签信息传递给学生模型,可以提高学生模型的学习能力,起到模型压缩的效果,使得将网络部署到客户端成为可能。
本文所提出的知识蒸馏框架如图1 所示。
知识蒸馏框架步骤以下:
步骤1对于实验真实数据集D,使用seqGAN模型生成大量领域内的相似无标签数据,构成D′(详细见本文第3 节)。
步骤2用真实数据集D对教师模型进行微调,得到一个准确率高、学习到大量领域知识的模型。
步骤3用教师模型对生成的无标签数据集D′进行预测,对每条数据进行标注。
步骤4将数据集D和D′合并为D″。
步骤5用所有数据D″对学生模型S 进行训练,同时用数据所属类别硬标签和教师模型预测得到的软标签组成损失函数,作为训练目标。
步骤6在不需要标注新的数据,以及不需要其他计算资源的条件下,得到一个准确率高的学生模型。
损失函数Loss 如式(1)所示:
其中,λ表示两种损失函数的平衡参数,si表示学生模型对于当前数据的输出,yi表示one-hot 编码的分类硬标签,ti表示教师模型对当前数据的输出,即软标签,cross entropy 表示交叉墒损失函数,Ldistill表示教师与学生之间知识蒸馏的损失函数,LCE表示学生模型的输出与标注的分类硬标签之间的交叉墒损失函数。
从损失函数公式可以看出,模型的目标不仅使预测类别与标注标签一致,还需要尽量与教师模型的输出分布保持一致。
本文中的教师模型采用的是大规模预训练模型BERT[1]及其变体。许多研究工作已经证明,语言模型的预训练可以提高许多自然语言处理任务的性能。预训练是指在大量的无标签文本上,以预测下一个单词为目标来进行模型的训练,这样可以学习到每个单词的上下文表示,称为词向量。训练得到的词向量和模型参数包含了许多在预训练阶段学到的有用的语义信息。基于这样预训练后的模型,只需要用少量的领域数据对模型进行微调,即可将模型运用到具体任务中。
BERT 模型结构如图2 所示。该模型是一种基于Transformer 结构[19]的语言表示模型,以掩码单词预测和下一句预测作为训练目标,捕捉了文本中的词级别和句子级别的语义表示。BERT 最重要的部分就是双向Transformer 编码结构,Transformer 舍弃了RNN 的循环式网络结构,完全基于注意力机制来对一段文本进行建模。Transformer 中的注意力机制称为自注意力,核心思想是计算一句话中的每个词对于其他词的相互关系,从而调整每个词的重要性来获取上下文相关的词向量。自注意力机制可以实现计算资源的并行化,加速训练过程,并通过对位置进行编码添加时序信息。
图2 BERT 模型示意图Fig.2 Schematic diagram of BERT model
本文所用的是在中文维基百科数据上进行了预训练后的Bert-base-Chinese 模型。模型结构是12 个Transformer 模块层,768 个隐层,12 个self-attention中的head,一共有1.1 亿个参数。
BERT 模型的输出包括两种,一种是字符级向量,即输入的每个字符对应一个向量,另外一种是句子级向量,即BERT 模型输出最左边“[CLS]”特殊符号的向量,文献[1]认为这个向量可以代表整个句子的语义。因此,对于分类任务一般重点关注句子级向量,即分类标识[CLS]的输出向量h。将这个向量h传给一个softmax 分类器就可以得到分类结果的输出。
本文实验对标准的BERT 模型进行改进,在BERT 的输出层取所有输入字符对应的输出向量,然后再接上一个文本分类器。本文选取长短时记忆网络LSTM、卷积神经网络Text-CNN[2]和循环卷积神经网络Text-RCNN[3]这3 个模型作为BERT 之后的分类器,将BERT 输出的向量进行计算后得到分类结果。因此,改进的模型分别称为BERT+LSTM、BERT+CNN、BERT+RCNN。原始BERT 模型和各个改进模型在数据集上微调后的模型准确率在实验部分给出。
虽然对BERT 等预训练模型进行简单的微调可以得到较高的准确率,但是这些预训练模型规模庞大,预测速度慢。考虑到在实际应用场景中的延时、响应速度等问题,预训练模型即使微调后也难以运用到实际应用场景中。例如,在对话系统中,意图识别模块需要对用户话语进行意图的分类,从而决定当前对话状态并给出相应的回答。在这种智能对话系统的情境下,用户的满意度就取决于系统的响应速度以及对话的准确性。因此,在移动终端、可携带设备等多个场景下,分类模型的预测速度不能太慢,模型的规模也不能太大。因此,选用几个经典的小规模文本分类模型作为学生模型,通过用教师模型所学到的知识对学生进行指导训练,即为“知识蒸馏”。
本文采取两个经典的文本分类模型作为学生模型,即基于文本的卷积神经网络Text-CNN 和基于文本的循环卷积神经网络Text-RCNN(Text Recurrent Convolution Neural Network)。这两个模型规模不大,且分类准确率高,在许多文本分类任务上都能够使用。
Text-CNN 模型由KIM 等人在2014 年提出[2],其将图像领域的卷积神经网络应用到自然语言处理领域。该模型将一个句子及其单词的词向量看作一个矩阵作为模型的输入,通过卷积层和池化层提取语义特征进行句子的分类。Text-CNN 由于卷积网络的并行化计算,执行效率高且分类效果较好。Text-RCNN[3]则是一个结合了RNN 和CNN 各自优点的模型。该模型首先利用双向循环神经网络(Bi-RNN)来捕捉前后上下文表征,得到一个包含上下文信息和本身词向量表示的“词向量”。接着使用CNN 网络中滤波器filter_size=1 的卷积层,并利用最大池化操作得到与文档最相关的向量表征,即获取潜在的最相关语义表示。由于双向神经网络的编码使得Text-RCNN 模型能够捕捉文本中的上下文语义信息,尤其是词袋模型无法得到的语序含义。
本文运用Text-CNN 和Text-RCNN 模型在进行意图分类的训练过程中使用的分词工具是结巴分词,词嵌入技术是word2vec[17],其他的一些训练参数在实验部分给出。
生成对抗网络是GOODELLOW 等人在2014 年提出的一种生成式模型[24],最开始用于图像生成领域。该模型由一个生成网络和一个判别网络组成。生成网络模仿真实数据生成相似的样本分布以欺骗判别网络,判别网络在迭代中不断更新以区分生成样本和真实数据。生成网络和判别网络相互博弈,直至达到那什均衡[25]。
但是传统的生成对抗网络很难应用于自然语言处理领域。因为自然语言数据本身是离散性质的,所以判别器进行判别后的结果难以通过生成器进行梯度回传。因此,文献[5]提出一个使用强化学习中的奖励机制来代替梯度回传的seqGAN 模型。seqGAN 以循环神经网络RNN 作为生成网络,卷积神经网络CNN 作为判别网络,可以用于自然语言文本生成。
本文采用文献[25]中的生成对抗网络框架,对现有数据通过文本生成的方式进行扩充。扩充后的文本样例如表1 所示,虽然个别生成序列不符合中文语法的现象,但是大部分生成的文本在句子结构和包含内容方面能与真实的意图文本相似。由于生成的文本虽然符合真实数据集的分布,但是没有标注的类别,因此用真实数据微调后的教师模型对生成文本进行预测,预测得到的类别就作为这条语句的标签。
表1 真实数据与生成数据的示例Table 1 Examples of real and generated data
本文采用真实的电力业务问询语句作为数据集。数据集从电力公司供电营业厅采集,人工整理和标注后得到所有数据及其所属的业务类别。数据集包括9 577条语句以及35 个业务类别,数据集中语句的平均长度为18.41 个字。除了真实数据集外,在第3 节提出了利用seqGAN 模型生成数据的数据增强方法。基于此方法生成了10 000 条相似的领域内数据作为扩充,真实数据与生成数据的示例见表1。
4.2.1 教师模型参数
本文采用在中文维基百科数据上进行了预训练后的Bert-base-Chinese 模型作为BERT 基准模型。模型一共12 层,隐层为768 维,采用12 头模式,共1.1 亿个参数。模型的优化方式采用BertAdam 算法对参数进行更新和微调,初始学习率均为2e-5,预热参数warmup 为0.1。微调训练时采用批量训练的方法,且批量大小为32,Dropout 比率默认设置为0.1。而改进后的教师模型则是分别在BERT 模型最后一层加上了Text-CNN 模型、一个双向LSTM 层和Text-RCNN 模型,构成了BERT+CNN、BERT+LSTM 和BERT+RCNN 模型。
4.2.2 学生模型参数
本文采用Text-CNN 模型和Text-RCNN 模型作为学生模型。模型训练时批处理大小为64。其中Text-CNN 模型卷积核尺寸如下[3-5]:每个尺寸下的个数为100,学习率为0.001,用结巴分词工具分词后采用word2vec 词向量,词向量维度为300。同样,Text-RCNN 模型也采用300 维的word2vec 词向量,隐层维度为256,学习率为0.001。
4.2.3 知识蒸馏参数
本文利用知识蒸馏技术进行“教师-学生”架构的训练。根据式(1),软硬标签的损失函数都采用交叉墒函数,平衡参数选为0.5。
本文采用准确率作为实验模型的评估标准,准确率表示分类正确的数据占所有数据的比例。
首先用真实的意图分类数据集对教师模型和学生模型分别进行训练,得到这些模型单独训练时的准确率,结果如表2 所示,原始的Bert-base-Chinese 模型在数据集上微调可以达到92.5%的准确率。将BERT和Text-RCNN 相结合的教师模型在数据集上微调得到了教师模型中的最高准确率93.7%。学生模型中则是Text-RCNN 模型的准确率最高,达到87.1%。
表2 教师模型和学生模型的准确率Table 2 Comparisom of accuracy of teacher model and student model
得到了教师模型和学生模型的性能后,采用这些教师模型和学生模型进行知识蒸馏的指导训练。在训练过程中,分为使用生成数据和不使用生成数据两种,分别对应表3 中的da(with data-aug)和woda(without data-aug)。知识蒸馏训练得到的结果如表3 所示。表3 中学生模型分别为Text-CNN 和Text-RCNN。“without KD”表示学生模型单独训练时的结果,作为基准。表中第3 行开始是两个学生模型分别在4 个教师模型的指导下进行知识蒸馏训练得到的结果,其中加粗字体为最优结果。
表3 知识蒸馏训练结果Table 3 Training results by knowledge distillation %
可见,本文提出的训练方法普遍可以使得学生模型准速率有所提高。其中,用准确率最高的教师模型BERT+RCNN 来指导准确率最高的学生模型Text-RCNN 训练,并且将生成数据作为扩充,可以达到最高的90.9%准确率,比单独的Text-RCNN 学生模型要高出3.8 个百分点。
从实验结果可以看出,虽然学生模型无法超越教师模型的准确率,但是可以在教师模型的指导下有所提升,接近教师模型的准确率。学生模型的参数少、规模小,准确率最高的教师模型BERT+RCNN的参数量是学生模型Text-RCNN 的86 倍,如表2 所示。在实际应用时学生模型预测速度更快,更有利于部署到移动端等实际场景。
基于对话系统中的意图分类问题,本文采用大规模预训练模型和“教师-学生”框架的知识蒸馏等技术,构建基于BERT 模型的知识蒸馏意图分类模型。采用BERT 及其变体作为教师模型,Text-CNN和Text-RCNN 两个经典的文本分类模型作为学生模型,以知识蒸馏的方式进行指导训练。另外,采用seqGAN 生成对抗网络来生成领域内数据,增加了训练时的数据量。在真实的用户意图数据集上进行实验,结果表明,本文模型可以使得学生模型准确率最高提升3.8%,接近教师模型的分类性能。由于数据集的标注耗费人力资源,目前公开的领域数据集都面临着规模较小的问题,下一步将研究更有效的数据生成方法来扩充数据集。