王 堃,林 民,李艳玲
内蒙古师范大学 计算机科学技术学院,呼和浩特 010022
对话系统是自然语言处理(Natural Language Processing,NLP)的重要方向之一[1],其中任务型对话系统(Task-Oriented Dialogue System)的主要功能是在特定条件下帮助用户完成具体的目标动作或提供信息服务[2],如预订机票、查询出行路线等。目前主流的研究方法是将任务型对话系统分为自然语言理解(Natural Language Understand,NLU)、对话管理(Dialogue Management,DM)和自然语言生成(Natural Language Generation,NLG)三个模块进行研究[3]。
NLU作为对话系统中的核心模块,对整个对话系统的性能至关重要[4],其目的是将输入的自然语言文本转换为结构化的语义框架(如slot-value形式)以实现人机交互的目标[5]。虽然这一目标仍然被视为未解决的问题,但在过去的数十年中,涌现出许多在限定领域内实用的任务型对话系统应用程序,如语音助手Alexa、Siri、Cortana[6]。这些应用程序通过完成NLU模块中的意图识别(Intent Detection,ID)和语义槽填充(Semantic Slot Filling,SSF)两个任务[3],能够自动识别用户意图并提取重要的语义参数信息,形成结构化的语义框架表示,最后采取相应动作以完成用户目标。
深度学习(Deep Learning,DL)的不断发展为实现端到端的对话系统提供了可能,且因为意图识别和语义槽填充两任务之间相互依赖,所以本文主要对端到端任务型对话系统意图和语义槽联合识别具有代表性的方法进行分析介绍,总结目前存在的问题并提出未来研究的发展方向。
现有的对话系统主要分为任务型对话系统和闲聊型对话系统(Chit-Chat-oriented Dialogue System)两类,前者旨在帮助用户完成特定任务,后者致力于在开放领域同用户进行自由对话。
任务型对话系统的研究大体有两种方法,一种是流程式(Pipeline)任务型对话系统,另一种是端到端(Endto-End)任务型对话系统,目前基于深度学习的端到端任务型对话系统是研究热点。
2.1.1 流程式任务型对话系统
流程式任务型对话系统是较为传统的方法,架构如图1所示。这种人机交互方式通过一个流程顺次实现,依次包括:NLU、对话状态跟踪(Dialogue State Tracking,DST)、对话策略学习(Dialogue Policy Learning,DPL)和NLG[7],其中对话状态跟踪和对话策略学习被统称为对话管理。在这种流程式的模式中,用户输入自然语言语句,对话系统按顺序依次完成领域分类、意图识别、语义槽填充、对话状态更新任务,然后根据对话策略做出相应的动作直到生成最终的回复。
图1 流程式任务型对话系统架构图
在流程式任务型对话系统中,对每个流程都进行模块化处理,模块化处理的优势是构建起来较为灵活,同时能够以较为独立的方式处理任务以及分块优化。但同时也存在很多缺点,首先,需要为相互独立的模块标注大量数据,还需要人工设计特征参数,导致系统在迁移到不同领域时需要耗费人力重新设计参数,可移植性差;其次,可能会导致错误级联的问题,上游NLU模块出现错误可能会传递到下游的DM模块;最后,每一个子模块的优化对整个系统的联合优化效果不够明显,上游模块的信息无法反馈到下游模块,用户的反馈也难以传递给模型。综上所述,如果用一个统一的端到端模型代替多个独立的模块,系统只需要知道用户的输入以及相应的输出即可,可节省很多开销。
2.1.2 端到端任务型对话系统
端到端任务型对话系统根据用户输入话语直接给出合理的回复[8],省去了流程式任务型对话系统的繁琐过程,而且基于深度学习模型提取到的特征向量可与人工提取的特征向量相媲美,所以目前基于神经网络的端到端可训练任务型对话系统受到了广泛关注。这种方法不仅使得研究人员能够利用强大的计算能力从海量数据中挖掘出更有价值的语义特征信息,同时可拓展性、可移植性也获得了显著提升[9],但其缺点是需要大量带标注的数据进行有监督的学习[10]。端到端任务型对话系统架构如图2所示。
图2 端到端任务型对话系统架构图
近年来基于深度学习的端到端模型被广泛应用[11],Wen等人[12]把NLU、DM和NLG三个模块一起进行端到端的训练,Yang等人[13]将NLU和DM两个模块联合学习,相较于流程式任务型对话系统都取得了一定的进展。
意图识别和语义槽填充是NLU的两个关键任务。意图识别旨在从给定的语句中判断用户的最佳意图类别,通常被看作是一个标准的多分类问题,常用的方法有支持向量机(Support Vector Machine,SVM)[14]、朴素贝叶斯(Naive Bayes,NB)[15]等模型,语义槽填充是指从给定的语句中提取有用的结构化信息,通常被看作是一个序列标注问题[16],如使用Begin/Inside/Outside(BIO)、Begin/Inside/Outside/End/Single(BIOES)等格式进行标注,常用的模型有隐马尔可夫(Hidden Markov Model,HMM)模型[17]、条件随机场(Conditional Random Field,CRF)[18]等模型。牛珺等人[19]采用规则匹配和神经网络相结合的方式完成意图识别任务,这种联合意图识别模型兼顾了传统规则匹配模型灵活调控和神经网络模型简单智能的优点,结果表明联合模型优于两种模型单独的表现。对“呼和浩特到长春的航班有哪些”这一问句,经过NLU得到的结果如表1所示。
表1 意图识别和语义槽填充举例
NLU经历了由独立建模到联合识别的发展历程。在传统的独立建模方法中,领域分类、意图识别和语义槽填充三个任务按流程顺序执行分别求解,逐次获取用户话语中与任务相关的信息[20]。这种方式类似于流程式任务型对话系统,存在三个缺陷,一是各个领域之间很难共享通用或相似的意图和语义槽类别等特征参数,但在很多情况下,例如在预订火车票和查询出行路线任务中,出发地、目的地等语义槽类别都是可共享的,却需要为不同领域构建相同的参数信息;二是可能产生错误级联,导致错误放大;三是下游任务不能利用上游任务的结果,而事实上意图识别的结果可以辅助语义槽填充任务,这都是独立建模带来的局限性。
2018年Goo等人[21]指出意图识别和语义槽填充两个任务相互依赖,语义槽填充任务高度依赖于意图识别的结果,语义槽填充的结果又可以帮助识别意图。加入门控(Slot-gated)机制可以学习意图和语义槽之间的相关关系,并通过先识别意图再利用意图识别的结果促进语义槽填充任务的方法对语义框架进行全局优化,性能得到了一定的提升。Qin等人[22]2019年指出采用门控机制并不能充分保留意图信息,而且因为意图识别和语义槽填充两个任务通过隐向量交互信息使得模型的可解释性降低。除此之外,使用门控机制还可能导致错误级联的问题,句子级意图识别的错误会影响单词级语义槽填充的性能。因此Qin等人采用了一种结合单词级意图识别的堆栈传播框架对意图和语义槽联合识别,在ATIS数据集[23]上语义槽填充的F1值达到了95.9%,意图识别的准确率达到了96.9%,进一步证明了联合识别的有效性。
在自然语言理解模块中,主要任务是利用大量数据学习有效的话语特征表示,并提取重要参数信息以得到完整的语义框架,进而完成意图识别和语义槽填充任务。侯丽仙等人[24]对解决NLU任务的模型从传统方法到基于深度神经网络的方法、从独立建模到联合识别的方法进行了综述,分析了独立建模存在的不足,总结了联合识别方法存在泛化能力强、训练参数少、性能好等优势。本文主要在此基础上针对最新的、具有代表性的联合识别方法进行分析介绍。
目前意图和语义槽联合识别是实现NLU模块的主流方法[25-26],联合识别的形式一般分为两种,一种是将两任务合并成一个任务,对意图识别和语义槽填充求解联合概率;另一种是让两个任务共享底层特征,再分别对每个任务输出相应的结果,损失函数为两任务损失函数的加权和。
随着循环神经网络(Recurrent Neural Network,RNN)[27]、长短时记忆网络(Long Short-Term Memory,LSTM)在解决序列问题上的快速发展,越来越多的学者将这类神经网络模型用于NLU模块[28-29]。北京大学的Zhang等人[30]提出利用RNN提取底层共享特征,分别对意图和语义槽进行识别,意图识别的准确率达到98.10%,语义槽填充的F1值达到95.49%。
RNN可以学习到之前的信息但记忆容量有限,当需要依赖较长距离的神经元信息时,RNN无法保留长距离信息,只能考虑最近的状态信息。LSTM模型通过三个门控机制优化记忆单元,对重要信息一直保留并传递,遗忘不重要的信息以释放空间,所以LSTM模型在捕获长距离依赖关系方面比RNN更强大,能够一定程度上消除序列中梯度消失或梯度爆炸的问题。LSTM模型的三个控制门分别为决定当前时刻网络状态有多少信息需要保存到内部状态中的输入门(Input Gate);用于控制对未来无用的记忆信息遗忘程度的遗忘门(Forget Gate);用于决定当前时刻的内部状态有多少信息需要输出给外部状态的输出门(Output Gate)。
受到机器翻译和闲聊对话系统中序列到序列(Sequence to Sequence)建模方法的启发,微软的Hakkani-Tür等人2016年[31]提出在一个序列中通过学习不同领域的数据建立多领域双向RNN-LSTM模型的方法解决意图和语义槽联合识别的问题。该模型使用具有长短时记忆的循环神经网络(RNN-LSTM)模型实现联合多领域、集成多任务(领域分类、意图识别和语义槽填充)的深度学习模型,输入是由用户话语的每个输入字wt组成的w1,w2,…,wn序列,输出是相应的语义槽标签s1,s2,…,sn序列,并在每个输入话语k的末尾添加一个额外的
该模型在ATIS数据集上的结果表明联合多领域、集成多任务的RNN-LSTM模型相较于传统的单领域、独立建模的方法在识别语义框架的准确率上提升了1%,证明了在多个领域上对意图和语义槽联合识别的有效性。但该模型中双向LSTM模型是独立进行的,不交互信息,而且不能很好地解决长期依赖问题。
注意力机制(Attention Mechanism)由Bengio团队于2014年提出并广泛应用于各个领域[32-34],在计算机视觉领域被用于捕捉图像上的感受野,在自然语言处理领域被用于学习深层次的表示特征。
3.2.1 注意力机制
在捕获上下文依赖关系方面,传统的采用编码器-解码器(Encoder-Decoder)结构的RNN、LSTM模型通常先用RNN、LSTM单元对输入序列进行学习,并编码为固定长度的隐向量表示,然后再用RNN、LSTM单元读取隐向量,并解码为输出序列得到最终结果。但这种模式限制了输入序列的长度,因为输入语句不论长短都将被编码为一个固定长度的向量表示,而且在编码和解码过程中随着长距离的信息传递还可能导致信息丢失。注意力机制不考虑序列中依赖词项的距离长短,通过对输入语句分配不同权重的方法对依赖关系进行聚焦式建模,可以有效解决梯度消失问题。注意力机制将每个输入位置的信息都进行保存,为对当前目标任务更关键的部分赋予更高的权重,使有限的信息处理资源分配给重要的部分,提高任务的执行效率。
自注意力(Self-Attention)机制[35]用于捕获同一语句中单词之间的句法特征和语义特征,减少对外部信息的依赖,捕获语句内部的相关性。自注意力机制在计算过程中直接将语句中任意两个单词相关联,远距离依赖特征之间的距离被缩短,从而可以捕获长期依赖关系。
3.2.2 基于双向RNN+Attention的联合识别
由于注意力机制能够捕获序列中的长距离依赖关系,Liu等人2016年[36]提出将对齐信息和注意力信息加入双向RNN解决意图和语义槽的联合识别问题。该模型使用LSTM作为RNN的基本单元,将来自双向LSTM(Bidirectional LSTM,BiLSTM)[37]的对齐隐状态信息和注意力信息一起作用于语义槽填充任务,用隐状态的加权和生成意图分类的结果。传统的LSTM模型仅使用前向单元处理序列问题,无法利用语句中的后向信息进行学习,但实际上,下文信息也至关重要。BiLSTM模型沿前向和后向读取输入序列并将得到的高维特征进行拼接作为最终含有上下文信息的语义向量表示,每个步骤的隐状态hi由前向隐状态 fhi和向后隐状态bhi共同组成,hi=[fhi,bhi]包含整个输入序列的信息,并在前向RNN中建模语义槽标签之间的依赖关系。但信息可能会随着向前和向后的长距离传递而逐渐丢失,因此,当进行语义槽标签预测时,注意力机制可以进一步聚焦式捕获上下文信息ci,ci是RNN隐状态hi=(h1,h2,…,hT)的加权平均值。双向LSTM模型得到了包含上下文信息的语义表示,以及注意力机制捕获长距离依赖关系,两者结合进一步提升NLU的性能。基于双向RNN+Attention的意图和语义槽联合识别模型如图3所示。
在基于双向RNN+Attention的意图和语义槽联合识别模型中,虽然双向RNN模型在理论上实现了捕获上下文信息的效果,但并没有达到真正双向的目的,只是两个不同方向RNN模型的简单拼接,无法交互信息,而且不能并行化处理,导致模型训练时间较长。
在意图和语义槽的联合识别任务中,卷积神经网络(Convolution Neural Networks,CNN)因为使用标量传递信息,所以它无法考虑底层对象之间的空间关系,而且池化层一般选取最大或平均概率的语义信息,会丢失大量小概率信息,无法保证特征的完整性以反映全局特征,此外受卷积核大小的影响,CNN只能提取到文本的局部特征,不能保持语义的连贯性,也不能一次性捕获全局信息,存在较大的局限性。基于RNN、LSTM的模型通常利用RNN、LSTM的最后一个隐状态识别意图,这种方法没有考虑单词、语义槽和意图之间的层次关系,而且随着序列长度的增加,依靠LSTM的门控机制捕获所有上下文信息是不全面的。
图3 基于双向RNN+Attention的联合识别
2011年Hinton等人提出“胶囊”的概念[38],用向量表示空间上的相对位置关系,2017年Sabour等人[39]提出胶囊网络(Capsule Neural Networks),通过动态路由机制捕获CNN模型丢失的小概率语义信息,用向量的方向表示不同类别,向量的模长表示对应类别的分类概率,比使用标量的传统方法具有更强的表示能力。因为胶囊的方向性优势可以对平移、旋转、缩放后的同一对象正确识别,还能从不同角度识别同一物体,因此胶囊网络不需要庞大的训练数据就可以在小规模数据集上学习各种情况下的特征信息。
2019年刘娇等人[40]对胶囊网络在意图识别任务上的应用做了详细综述,总结了胶囊网络需要的数据量少、可以捕获小概率信息等优势。2018年Zhang等人[41]提出将胶囊网络用于意图和语义槽联合识别任务,取得了较好的结果。该模型充分利用单词、语义槽和意图之间的层次结构关系,用胶囊层间协议动态路由代替池化,为输入话语中的每个单词指定正确的语义槽类别,并根据语义槽的结果帮助识别意图类别,然后通过重路由机制利用意图识别的结果指导修正语义槽填充的结果。该模型通过三种胶囊类型的分级神经网络结构对具有层次结构的特征信息进行捕获,如图4(a)所示[41],这三种胶囊分别是含有上下文信息单词表示的Word-Caps;通过动态路由机制按语义槽类型对单词进行分类的SlotCaps;根据具有词级信号的语义槽信息确定句子意图类别的IntentCaps,而且得到的意图标签可以通过重路由机制从句子中重新识别语义槽类别,实现单词级语义槽填充和句子级意图识别的协同效应。基于胶囊网络的联合识别模型如图4(b)所示[41],实线表示动态路由过程,虚线表示重路由过程。
胶囊网络使用协议动态路由代替CNN模型的最大池化方法不仅能够捕获小概率的语义信息,保证特征信息的完整性,而且保留了特征之间准确的位置关系,所以相较于基于CNN的意图和语义槽联合识别模型性能有了一定提升。但胶囊网络受胶囊间动态路由算法无法共享权重和参数个数多的影响,识别速度较慢,但相较于其他需要在大规模数据集上进行训练的深度神经网络模型来说,胶囊网络在小规模数据集上就可以达到较好的效果。2018年Hinton等人[42]又提出用矩阵代替向量以减少参数数量,进而降低计算量,但计算速度还是较慢。
传统的静态词向量无法根据语境动态表征词的多义性,Devlin等2018年[43]提出基于Transformer的BERT(Bidirectional Encoder Representations from Transformers)模型,通过先预训练(per-training)再微调(fine-tuning)的方式不仅可以得到语义更丰富的向量表示,有效解决一词多义的问题,而且微调的方法使得预训练模型能在更多的数据上进行训练,提升了泛化能力。Transformer是一种使用注意力机制编码每个位置信息的编码器-解码器架构,可以捕获长距离依赖关系,还可以并行化处理。2019年阿里巴巴团队[44]提出基于BERT的意图和语义槽联合识别模型,在ATIS数据集上意图识别的准确率达到97.5%,语义槽填充F1值达到96.1%,取得最优结果。
3.4.1 Transformer体系结构
RNN、LSTM模型的顺序计算机制存在两个问题:第一,因为模型本身结构的序列性,t时刻的计算依赖t-1时刻的计算结果,限制了模型的并行处理能力;第二,顺序计算的过程中信息可能会随着长距离传递而丢失,尽管LSTM使用门控机制在一定程度上缓解了长期依赖的问题,但是对于距离特别长的依赖现象,LSTM依旧无法解决。RNN是迭代结构,CNN是分层结构,CNN最大的优点是易于做并行计算,但是无法一次性捕获全局信息。基于注意力机制建模的Transformer模型解决了上述问题,不仅具有并行性,符合现有的GPU框架,而且通过注意力机制可以忽略距离,为不同的信息分配不同的注意力权重捕获长距离依赖关系,所以Transformer模型是目前优于RNN和CNN的特征提取器。
Transformer模型采用NLP任务中最常用编码器-解码器架构[35]。编码器共四层,第一层是多头注意力机制(Multi-Head Attention),为模型分配多组不同的注意力权重扩展模型关注不同位置的能力,从而捕获更加丰富的信息;第二层是求和并归一化层,求和即残差连接(Residual Connection),将模块的输入与输出相加后作为最终输出,目的是将前一层信息无差地传递到下一层以解决深度神经网络中梯度消失问题,然后进行归一化处理,加速模型训练过程,使得模型快速收敛[45];第三层是前馈神经网络层(Feedforward Neural Network,FNN);第四层再经过一个求和并归一化层,生成中间语义编码向量并传送给解码器。解码器共六层,和编码器结构类似,但第一层是带MASK(掩蔽)操作的多头注意力层,因为在输出时,t时刻无法获取t+1时刻的信息,所以解码器的输出需要右移,并遮挡后续词项进行预测,最后解码器再经过一个线性回归和Softmax层输出解码器最终的概率结果。Transformer模型的架构如图5所示[35]。
图5 Transformer架构图
Transformer模型通过多头注意力机制可以学习到不同维度的关系,而CNN通过卷积核只能学习到局部位置的信息,建立短距离依赖,RNN因为当前时刻的值高度依赖上一时刻的值,所以学到的信息不能充分考虑复杂的上下文关系。
在处理序列任务时,对文本的词序位置信息敏感、具有上下文依赖性,但Transformer是一个并行处理的特征提取器,对于输入句子的处理忽略了词序信息,即可以把Transformer看作是一个功能强大的词袋模型(Bag-of-Words,BOW)。在“我喜欢这场话剧因为它不是个煽情的故事”和“我不喜欢这场话剧因为它是个煽情的故事”这两句子中,“不”和“喜欢”的相对位置不同而导致文本所传递的情感信息完全不同。由此可见,文本位置信息是至关重要的,而且相对位置信息比绝对位置信息对文本的语义影响程度更为关键。
通过将位置编码信息添加到输入向量的方式可以一定程度上弥补Transformer因并行处理带来的问题。对词序位置信息进行编码的方式有两种,第一种是训练出一个绝对位置向量,但只能表征有限长度内的位置,无法对任意长度进行建模;第二种是先借助有界的周期性三角函数编码绝对位置信息,如公式(3)、(4)所示,再依据三角函数公式(5)、(6)的两个性质学习相对位置信息。
其中,pos表示单词在句子中的位置,取值是0到句子的最大长度,i表示词向量的某一维度,dmodel表示词向量维度。每个单词的位置编码仅与词向量维度和当前词的位置有关。由三角函数通过线性变换可以得到后续词语相对当前词语的位置关系,可表示为公式(7)和(8),对于 pos+k位置的位置向量可由 pos位置与k位置的位置向量线性组合得到,不仅蕴含了相对位置信息,并且值域在一定数值区间内,具有周期不变性,同时增强了泛化能力。而且三角函数不受序列长度的限制,可以对任意长度建模,但这种类似于点积计算的方法只能反映相对位置关系,缺乏方向性。
在得到相应的位置编码后,再和词向量组合起来作为模型的输入。组合的方式有两种,一种是将位置向量和词向量拼接成一个新向量,另一种是使两者维度相同然后相加得到新向量。虽然这种位置编码信息能在一定程度上缓解由于并行处理引发的局限性,但并不能从本质上解决问题,这是Transformer模型的一个不足之处。
3.4.2 BERT模型解决一词多义
Harris在1954年提出的分布假说中指出上下文相似的词其语义也相似[46],Firth在1957年对分布假说进一步阐述和明确,词的语义由其上下文决定,这两个假说将一个语言学问题转化成了数学问题,用当前词的上下文表示该词的语义信息[47]。在 Word2Vec[48]、GloVe[49]等词向量的年代,所有的词向量训练之后就不再发生变化,静态词向量无法根据不同语境表征词的多义性。但在实际应用中常会有一词多义现象,例如“他用苹果手机买了一箱苹果”这一语句,两个“苹果”的含义不同,但在传统的词向量表示方法中,两个“苹果”的向量表示是同一向量,与客观事实不符,影响了NLP的性能,所以解决词的歧义性一直是NLP的一个重要难题。
近年来,研究人员通过先预训练深度神经网络作为语言模型,再根据下游任务进行微调的方式解决了一词多义的问题。预训练语言模型先在可与最终任务无关的大规模数据集上训练出知识表示,再将学到的知识表示用于下游任务。而且预训练为模型提供了更好的初始化参数,使得在目标任务上具有更好的泛化性能和更快的收敛速度。
BERT模型采用表义能力强大的双向Transformer模型进行预训练,能够得到包含丰富句法和语义信息的词向量,然后根据上下文动态调整词向量以解决一词多义的问题。为了融合当前词的上下文,BERT模型不仅采用双向Transformer模型作为编码器,还通过“掩蔽语言模型(Masked Language Model,MLM)”和“下一句预测(Next Sentence Prediction,NSP)”两个任务分别捕获词级和句子级表示,并进行联合训练。词级任务就是如同“完形填空”一样的单词预测任务,通过学习每个词与其他所有词的关系以及其间的词序信息来预测被随机遮挡的词项,而不像传统的语言模型一样对每个词项进行预测,增强了模型的鲁棒性。句子级任务就是预测两句话是否为上下句的关系,Transformer忽略距离对全局信息编码,可以捕获到输入语句的全部特征,直接获得整个句子的向量表示,与基于BiLSTM建模的ELMo(Embedding from Language Models)模型[50]不同,ELMo在训练完成后迁移到下游NLP任务时对每一层求加权和得到全局信息。
BERT模型因为自注意力机制的计算是并行的,忽略了序列中的位置信息,所以BERT模型在输入时通过加入位置向量(Position Embeddings)的方法捕获词序信息。BERT模型的输入如图6所示,不仅在开头、两个句子之间和结尾分别加入[CLS]、[SEP]和[SEP]特殊字符,而且将单词本身的词向量(Token Embeddings)、句向量(Segment Embeddings)和位置向量相叠加。王楠禔[51]提出在预训练时增加乱序判断任务能强化模型对词序信息的捕获能力,让模型判断被随机打乱词序的语句是否合理的方式使模型对于语序更加敏感,而且强化了模型对单个句子的建模能力,从而更准确地表征语义信息,提升人机对话系统的性能。
BERT模型在训练期间,同一个词可以学习不同语境下的所有语义信息,使用时再将符合当前上下文语境更精准的细粒度语义向量提炼出来以有效解决一词多义的问题,帮助提升NLU的性能,进一步提升对话系统的效果。
2019年马月坤等人[52]提出使用BERT模型能够有效捕获语言的深层信息,并充分利用句子信息和对应的实体信息在关系抽取任务中获得较好的效果。段丹丹等人[53]提出用BERT模型代替Word2Vec模型对短文本进行向量表示,在一定程度上提升了中文短文本分类的效果。胡春涛等人[54]将BERT模型用于舆情分类任务,因为BERT模型能够捕获深层次的语义信息且能够捕获文档的全局话题结构,取得了较好的性能,进一步体现了BERT模型在NLP任务上的优越性。
3.4.3 基于BERT模型的联合识别
在2018年之前,几乎任何一个NLP任务都是以Word2Vec训练出的词向量为起点,在实现下游任务时,构建句向量的过程往往是对词向量简单的平均或者求和,难以提取深层语义特征,导致下游任务性能较差。随着BERT预训练语言模型的提出,大幅度提升了NLP任务的起点,BERT模型先用同领域或跨领域内、有标注或无标注的大规模数据预训练一个语言模型,再利用迁移学习的思想在小规模的标注数据集上完成NLP任务,所以BERT模型在一定程度上能解决端到端模型标注数据少、训练困难以及因此所导致对生词泛化能力差的问题[55]。
阿里巴巴集团提出基于BERT模型对意图和语义槽进行联合识别,目前在ATIS、Snips数据集上取得了最优的成绩。BERT模型利用在开头加入的[CLS]特殊标签进行意图识别,语义槽填充除了直接用Transformer输出的结果进行序列标注以外还加入CRF层对语义槽标签进行全局优化。基于BERT模型对“北京飞往上海的航班”这一语句的联合识别如图7所示。
在该模型中,输入为用户话语X1,X2,…,XT序列,输出是联合识别的结果h1,h2,…,hT序列。对于意图识别任务,BERT模型将Transformer作为模型的主结构,通过注意力机制忽略距离对句子进行建模,对在输入话语前增加的特殊标签[CLS]进行深度编码,聚合句子表示信息,同时[CLS]的最高隐层作为句子的最终表示直接和Softmax层相连接,因此[CLS]可以学习到整个输入序列的特征,将[CLS]的隐藏状态记为h1,其意图预测表示为公式(9):
对于语义槽填充任务,将其他词项的最终隐藏状态h2,h3,…,hT输入到Softmax层,然后对每一个输出进行语义槽标签分类,表示为公式(10):
当联合训练意图识别和语义槽填充两个任务时,需要最大化条件概率目标函数,使用交叉熵作为分类的损失函数,记为公式(11):
图6 BERT模型的输入图示
图7 基于BERT模型的联合识别
BERT模型能够根据不同的上下文动态生成词的语义表示,比传统的词向量更能表征语句特征,而且BERT模型堆叠多层Transformer模块,低层Transformer主要学习自然语言表层特征,中层学习编码句法信息,高层学习编码文本的语义特征,同时高层语义知识会对低层的知识有反馈作用,经过高层语义可以指导修正低层的句法特征。所以相对于Cove(Contextualized Word Vectors)[56]、ELMo模型,BERT模型编码了更多的句法信息,能够充分利用深层次的语义信息更好解决NLU任务。
BERT模型是自编码模型,MLM预训练任务的主要思想是去噪自编码器(Denoising Autoencoder,DAE),即通过引入噪声数据再利用含噪声的样本重新构造不含噪声输入的方法实现双向捕获上下文。但这种方法存在一些问题,BERT模型分为预训练和微调两个阶段,在预训练阶段出现的[MASK]噪声在微调阶段不会出现,这种操作不利于学习,还会影响NLU的性能。而且以字为单位进行建模的BERT模型对于每个词项的预测是相互独立的,模型很难学习到知识单元的完整语义表示,但在实际应用中,比如对于“内蒙古师范大学”这样的实体词,每个字之间都是有关联关系的,但BERT模型只学习语言相关的信息,忽略了内部关联关系,没有将知识信息整合到语言理解中。
针对BERT模型没有将知识信息整合到语言理解中的局限,2019年清华大学和华为公司联合提出了ERNIE(Enhanced Language Representation with Informative Entities)[57]模型,通过将知识图谱中的多信息实体作为外部知识的方法提高了模型表征能力,先抽取实体信息再将这些信息与知识图谱中的实体相匹配,并通过知识嵌入算法对知识图谱的图结构进行编码,然后将实体信息嵌入作为输入训练语言模型,最后在训练语言模型时通过从知识图谱中选择合适的实体和随机掩蔽的实体相对齐的方式完成目标任务。为了学习文本中蕴含的潜在先验知识,百度公司提出基于知识增强的ERNIE(Enhanced Representation through Knowledge Integration)[58]模型,通过对实体概念等先验语义知识建模的方法学习知识单元的完整语义表示,进行单词级和实体级的掩蔽训练,实体信息与外部知识的结合提供了丰富的结构化事实知识,增强了模型的语义表示能力[59]。在BERT模型基于局部词语共现学习语义表示的基础上增加了实体级任务,弥补了BERT模型以字为单位进行随机掩蔽以及较少利用语义知识单元建模的不足。例如对于“呼和浩特是内蒙古自治区的首府”这句话,ERNIE模型可以利用丰富的先验知识对“呼和浩特”这样的实体词整体进行掩蔽训练,而且能够充分考虑内部关系。这种加入知识的模型相较于独立预测词项的BERT模型,不仅能够聚合上下文和事实性知识的信息,而且可以同时预测词项和实体信息,使得语言表示模型更加知识化。
在意图和语义槽的识别任务中,可能存在以下四种歧义现象:
一是多义词引起的语义歧义,对于这种自然语言的不确定性可以通过基于规则、基于词典、基于语料库和基于神经网络深度学习的方法进行词义消歧。基于规则的消歧方法虽然简单,但是比较依赖语言专家的语言知识,有很大的主观性,难以适应领域的变化。基于词典的词义消歧方法先计算语义词典中各个词义的定义与上下文之间的覆盖度,然后选择覆盖度最大值对应的词义消除歧义,但由于词典中词义的定义比较简洁,通常得到的覆盖度为零,存在着严重的数据稀疏问题,而且缺乏可扩展性和灵活性。基于语料库的消歧又分为有监督的和半监督或无监督方法,前者在人工标注词义的训练语料上利用机器学习算法建立消歧模型,如决策树、K近邻算法、朴素贝叶斯等模型,这种方法性能较好,但需要大量高质量的人工标注语料,如果语料库标记规模较小,很容易造成数据的稀疏问题,不仅费时费力,而且词义标注者之间也很难达到较高的标注一致性。后者仅需要少量或不需要人工标注语料就可以消歧,如上下文聚类、词语聚类、共现图聚类等方法,但这种方法依赖在该语料上的句法分析结果,而且待消解词的覆盖度可能会受影响。目前比较主流的方法是基于神经网络的方法,例如上文所述的BERT模型,利于在大规模语料库上预训练得到的上下文敏感的动态语义向量消除歧义,同时一定程度上解决了有监督消歧模型数据稀疏的问题。
二是由于用户话语的自由度高,可能会存在指代的现象,例如在软件工程的知识问答系统中,对于“软件过程中的瀑布模型是什么?该模型与增量模型有哪些区别?”这一问句,“该模型”与“瀑布模型”存在指代关系,使得计算机不能准确识别语句中的指代关系,理解自然语言变得较为困难[60],所以解决指代消歧对语义槽填充的性能至关重要。指代消歧的方法从算法角度可以分为两类,一类是基于启发性规则的指代消歧方法,利用人工制定的一系列语言学规则进行指代消歧,但需要大量的人工参与,自动化程度较低,系统的可移植性也较差,另一类是基于数据驱动的指代消歧方法,利用标注好的语料消除歧义[61],但需要大规模语料库。陈远哲等人[62]对共指消解技术进行了详细综述,介绍了基于规则、基于机器学习、基于全局最优、基于知识库和基于深度学习的模型,分析了目前共指消解存在缺乏语义推理能力和过分依赖前置模型性能的缺点。付健等人[63]在端到端指代消解模型[64]的基础上,充分利用中文的词法、句法信息,将词性、文档压缩树叶节点深度与成分句法树的结构化嵌入作为三个特征向量,加入融合了结构化信息的中文指代消解模型中,取得了较好的效果,但是模型中的表述识别策略较为复杂,训练比较耗时。邹超[65]在问答系统中利用深度学习的方法捕获深层次的语义特征,实现中文代词消解算法,并从指代和省略两个方面对待检索问题进行语义补全,提高了系统检索的准确性。
三是在意图识别任务中,上一例句还存在“查概念”和“比较概念”两种意图的问题,对于多意图识别的研究,目前主流的方法有杨春妮等人[66]提出的结合句法特征和卷积神经网络的模型,虽然取得了较好的效果,但是比较依赖句法结构特征。刘娇等人[67]提出基于胶囊网络的多意图识别方法,性能优于基于CNN的模型,但是由于胶囊网络参数多会导致模型运行速度较慢的问题。
四是对于实体的消歧,高扬[68]针对词袋模型不能充分利用实体上下文语义信息的缺点,提出了一种基于卷积神经网络的中文实体消歧方法,将实体上下文中名词的词向量矩阵作为神经网络的输入,通过宽卷积的方式保留更多的词语组合可能性,并生成实体上下文的语义特征向量用于实体消歧任务,但是由于神经网络模型的复杂性,导致在大规模语料上训练的时间复杂度较大。ENRIE模型的提出也为实体消歧的解决提供了新思路,通过实体级掩蔽任务与外部知识库结合的方式增强了语言表征能力,可以更好地解决实体消歧。
这些歧义现象影响了模型的泛化能力,给NLP带来了极大的困难[69]。对于现有数据不均衡的现象,如何利用已有的低资源启动跨文本、跨语言的新领域是下一步的研究热点,迁移学习能够利用其他模型帮助新模型在低数据体系下进行训练,但是迁移学习并不适用于所有新领域。目前较为常用的方法是通过自动标注的方式帮助模型构建领域知识,利用领域知识增强数据包含信息的能力从而达到节约成本的目的,但领域知识的构建过程依旧需要消耗人力物力。此外,有研究者提出用机器模拟人类标注数据的思想,这样既可以减少人工消耗,也可以产生更多的可用数据[70],但是用户模拟器的反馈与真实用户的反馈还存在一定误差。还有研究者提出了动态学习(active learning)的方法,采用多种方式相结合的模式对数据自动标注以减少标注误差[71],这些都是未来研究的重点方向。
本文主要对最新的具有代表性的意图和语义槽联合识别的方法进行分析介绍,各模型在ATIS数据集上的性能如表2所示,评价指标包括语义槽填充F1值和意图识别准确率。第一组是RNN-LSTM模型,其中SD、MD分别代表在单领域、多领域上进行训练,Sep、Joint分别代表意图和语义槽独立建模、联合识别的方法,从实验结果可以看出无论是在单领域还是多领域,联合识别可以提高意图识别的准确率,但是语义槽填充F1值会降低,而从全局来看,联合多领域集成多任务的模型会提升识别语义框架的准确率。在第二组模型中,dropout为0.5,LSTM的单元数为128。基于双向RNN+Attention联合识别模型不要求编码器将所有输入信息都编码为一个固定长度的向量,而是在解码器的每一个时间步,都和编码器直接连接,通过对输入信息分配不同的权重聚焦式关注特定的部分,再与双向LSTM双向建模得到包含上下文语义信息的向量相结合,得到包含更丰富的语义向量表示,弥补了RNN对长距离依赖关系的不足,取得了较好的性能。双向RNN+Attention的模型与使用对齐输入的基于注意机制的编码器-解码器模型相比具有更高的计算效率,因为在模型训练期间,编码器-解码器模型读取输入序列两次,而双向RNN+Attention模型只读取输入序列一次。第三组是胶囊网络模型,dropout为0.2,胶囊网络通过动态路由机制改进了CNN的不足,捕获小概率的语义信息,保证了特征的完整性,而且重路由机制能利用意图识别的结果指导修正语义槽填充任务,性能有了一定的提升,同时证明了联合识别比独立建模效果更好,但其受模型复杂、参数多的影响导致计算速度较慢。第四组是BERT模型,目前在ATIS数据集上取得了最优性能,在该模型中Transformer设置为12层,dropout设置为0.1,包含768个隐藏状态和12个头部。基于BERT+CRF的联合识别模型用CRF取代Softmax分类器,但其性能与BERT相差不多,因为在序列标注任务中,标签之间是有依赖关系的,比如当采用BIO格式标注时,标签I应该在标签B之后出现,而不应该在标签B之前出现,CRF机制主要用于计算词标签之间的转移概率以进行标签全局优化。Tan等人[72]2018年提出使用深度注意力网络(Deep Attentional Neural Network)进行标注,在模型的顶层仅使用自注意力机制也能够学习到标签之间潜在的依赖信息,所以Transformer模型中的自注意机制已经对标签结构进行了充分建模,加入CRF后性能并没有提升。
表2 联合识别模型在ATIS数据集上的NLU性能结果%
表3 基于深度学习的联合识别模型对比
综上可以看出联合识别比独立建模的效果更好,而且在联合识别的两种方法中,将意图识别和语义槽填充合并成一个任务,求解联合概率的效果更好,因为这种方法能够充分利用两任务的相关关系进行建模,从而达到更好的性能,而共享底层特征再分别求解的方法不能实现真正的联合识别。
基于深度学习的方法能充分利用高性能计算能力从海量数据中总结规律,然后对意图和语义槽进行端到端的联合识别。表3对目前主流的基于深度学习的联合识别模型进行对比分析。
本文主要对基于深度学习的端到端任务型对话系统中意图和语义槽联合识别具有代表性的方法进行总结对比。目前性能较好的是BERT模型,不仅可以并行处理任务,而且可以双向捕获上下文信息,还能解决一词多义的问题,同时为迁移学习提供了可能。
NLU性能的提升还有很大的探索空间:第一,Transformer模型在捕获长距离依赖关系、深层次语义信息方面都优于CNN、RNN、LSTM等模型,但因并行化处理而丢失的词序信息对NLU至关重要,简单地在输入时加入位置编码向量并不能从根源解决问题,所以如何更好地捕获Transformer模型丢失的词序位置信息以及减小模型的复杂度是下一步研究的重点。第二,当CNN模型用于意图和语义槽联合识别任务时,池化层忽略了大量小概率的语义信息,不能保证特征的完整性,而胶囊网络通过动态路由机制可以捕获到小概率的语义信息,但胶囊网络因为算法复杂、参数多等原因导致计算速度较慢,所以如何提升胶囊网络的计算性能是一个值得研究的方向。第三,在意图和语义槽识别任务中,因为用户话语自由度高,可能会产生语义歧义、代词省略、多意图等歧义现象,因此针对口语的不确定性如何利用深度学习、迁移学习等方法进行有效消歧以提升人机对话系统的鲁棒性是下一步探索方向,以及如何利用低资源启动跨语言、跨文本的对话系统也是NLP的重要问题之一。第四,当NLU在处理复杂任务时,不仅需要语言的语义信息,还需要结合事实性知识进行逻辑推理才能完成任务,为此,如何将领域知识和事实性知识图谱加入模型以补充更丰富的信息,进而提升NLU处理复杂任务的能力是一个新的研究方向。