1。引言1.1研究背景随着互联网和个人智能终端的普及和广泛应??用,各种互联网应用和个人应用如雨后春笋般涌现,如旅行预订、在线购物和提醒设置等,这使得人们的日常生活和旅行变得更加便捷和便捷。越来越方便,但越来越多的应用增加了用户的时间成本和使用难度,因此对虚拟个人智能助理的需求越来越大。对话式人工智能是实现虚拟个人智能助理的核心技术,可分为两大类:开放域对话系统和面向任务的对话系统。然而,人类对话本质上是复杂和模糊的,要打造一个可以面对任何场景的开放域对话人工智能,还有很长的路要走。因此,工业实践侧重于构建完成特定任务的对话系统,即基于任务的对话系统。基于任务的对话系统首先通过理解消息确定用户需求,主动询问和解释说明,然后通过调用应用程序接口完成相关资源的查询,最后返回正确的结果。用户与对话系统交互过程中产生的对话可以称为任务对话,是由任务驱动的多轮对话。一个典型的基于模块化任务的对话系统如图1所示,由四个关键部分组成:自然语言理解模块:将用户文本消息转换为机器可以理解的语义标签,如意图、槽和槽值;对话状态跟踪模块:在每一轮对话中,根据对话历史维护最新的对话状态,通常表示为一组slot-slot值对;对话策略模块:根据当前对话状态,决定对话系统的下一步动作,如确认用户需求,查询资源库,提供符合条件的结果等。另外,结合对话状态跟踪对话策略模块称为对话管理器;自然语言生成模块:将对话策略模块确定的系统对话行为转化为人类语言,并回复用户。图1模块化任务型对话系统结构图其中,对话状态跟踪的研究是任务型对话系统领域非常重要的研究课题之一。具体来说,对话策略和自然语言生成这两个模块需要根据当前的对话状态来选择下一个系统动作并生成系统回复。因此,正确识别对话状态对于提高基于任务的对话系统的整体性能至关重要。1.2动机近年来,随着深度学习方法在图像、语音和文本领域的突破,其应用范围逐渐扩展到对话系统领域。得益于其强大的表示能力,基于深度学习的任务型对话系统性能不断提升,逐渐成为主流。由于对话状态跟踪是基于任务的对话系统的核心模块,因此也提出了许多基于深度学习的对话状态跟踪器(可称为神经对话状态跟踪器),表现出优异的性能和更强的泛化能力。.另一方面,DSTC2[1]、WOZ2.0[2]、MultiWOZ2.0[3]、CrossWOZ[4]等众多基准数据集的引入,使得利用深度神经网络结构来实现解决对话状态跟踪任务,同时提供Testbeds以广泛和公平地评估对话状态跟踪系统的性能。神经对话状态跟踪的新兴研究需要系统地调查和分析工作的最新进展。对此,我们在本文中整理总结了基于深度学习方法的对话状态跟踪的发展过程。1.3对话状态跟踪的新范式自然语言理解和对话状态跟踪模块密切相关。从模块的输出形式来看,两者都完成了对话槽的填充,但实际上起到的作用不同。自然语言理解模块尝试对当前用户文本消息进行分类,例如意图、领域类别以及消息中每个词所属的槽。也就是说,它通常通过用槽标签标记用户文本消息中的每个单词来完成槽填充。但是,对话状态跟踪模块不会对用户消息进行分类或标记。相反,基于整个对话历史,尝试在预定义的槽列表中为每个槽名称找到对应的槽值。在对话的每一轮,它都会搜索直到当前轮的整个对话历史,以确定可以在槽列表中的特定槽中填充什么。不难发现,与对话状态跟踪模块相比,自然语言理解模块存在以下不足:其输入一般只有本轮用户消息,分类过程缺乏系统消息和对话的帮助历史;直接出现在文本中的插槽。例如,当用户在预订酒店时要求房间内有无线网络时,“网络”槽的槽值应该为“yes”,而不会直接出现在用户输入的文本中;错误的语义槽识别结果可能会对后续模块产生不利影响。早期的对话状态跟踪方法使用自然语言理解模块的输出作为对话状态跟踪模块的输入,而最近的方法考虑到自然语言理解模块的许多局限性,直接使用原始用户消息来跟踪对话状态。2.任务概述在本节中,我们首先给出对话状态跟踪的任务定义,然后简要描述常用的数据集和评估指标。2.1任务定义对话状态对话状态跟踪的目标是从系统回复和用户话语中提取相关信息,以在每一轮对话中更新对话状态。对话状态是连接用户和对话系统的桥梁,包含了对话系统完成一系列决策所需要的所有重要信息。考虑到跟踪效率、跟踪精度、领域适应性和端到端训练等众多需求,对话状态以多种形式存在。下面以第二个对话状态跟踪挑战赛DSTC2提供的基于任务的对话数据集为例,简单介绍一下数据集对话状态的定义。在对话框中,用户通过指定约束来搜索合适的餐厅,也可以要求系统提供某些槽位的信息,例如餐厅的电话号码。该数据集提供了一个本体,其中详细描述了所有可能的对话状态。具体来说,列出用户可以询问的属性,称为可请求槽,例如餐厅提供的菜肴类型或餐厅的电话号码。它还列出了用户可以作为约束提出的属性及其可能的值。这些属性称为信息槽。图2显示了DSTC2的详细信息。因此,对话轮的对话状态被定义为三个部分:目标约束:用户可以指定每个可通知槽的值,因为用户达到了某个目标(例如在西苑饭店周日下午6点订了6人桌))约束。槽值可以来自,或特殊值或。其中,表示用户对这个slot的值没有偏好,表示用户没有为这个slot指定一个有效的target;请求插槽(RequestedSlots);这些槽位的槽位值是用户可以查询的,应由系统通知用户确定;本轮搜索方式(SearchMethod):搜索方式表示用户与系统交互的类型。表示用户试图发起一个约束,表示用户需要一个备选选项,表示用户想要请求槽名对应的槽值,表示用户想要终止对话,以及其他情况是。图2DSTC2本体在DSTC2对话状态的定义中,本轮的搜索方法也可以看作是一个特殊的slotSearch_Method,它有五个可能的取值。可以看出,基于任务的对话的对话状态可以统一定义为一组(slot,slotvalue)对,随着对话的进行不断更新。接下来给出对话状态跟踪任务的正式描述。形式化定义令表示一轮对话,分别表示第轮对话的系统回复和用户话语。假设我们有预定义的槽位,那么对话回合的对话状态定义为。其中,表示slot对应的槽值,是slot的值空间。将所有时隙的值空间放在一起,就可以构建本体。基于对话和本体,任务被定义为学习一个对话状态跟踪器,它可以有效地捕捉用户在对话中表达的意图。根据定义,可以看出一个tracker在每一轮中可能需要预测多个slot的值。另外,有些槽的取值空间可能是巨大的,也就是说这些槽有大量的可选值。这些现象使对话状态预测更具挑战性。值得注意的是,我们使用术语“插槽”来表示领域名称和插槽名称的组合,因此包含领域和插槽信息。例如,我们使用restaurant-price-range而不是price-range来表示餐厅域中的价格范围槽。当对话包含多个域时,这种格式很有用,并且已被许多以前的研究工作广泛采用。2.2数据集Neuraldialoguestatetracker需要一定规模的面向任务的对话数据集进行训练或验证,这些数据集中的每一轮对话都应该有一个对应的对话状态。由于面向任务的对话数据获取难度高,对话状态标注费时费力,大大增加了人工标注的工作量。目前大多数方法使用的训练和测试数据集主要基于DSTC2、WOZ、MultiWOZ和CrossWOZ数据集。数据集统计数据如表1所示。表1常用任务型对话数据集统计其中,CrossWOZ是中文任务型对话数据集,DSTC2和WOZ是单域任务型对话数据集。2.3评价指标利用构建的开放数据集,研究人员可以训练神经对话状态跟踪器,判断训练好的跟踪器的好坏需要建立一个通用的评价标准。评估对话状态跟踪器的常用指标是联合目标准确度和时隙准确度。联合目标准确性在对话的每一轮,对话状态跟踪器的输出与人类地面实况注释进行比较。其中,人工ground-truth标注包括所有可能的(domain,slot)对的槽值。联合目标准确性被定义为正确预测每个槽值的对话轮次的比例。如果一个slot还没有被提及,它的人工ground-truth标签被设置为,并且有值的slot也需要被预测。Jointtargetaccuracy是一个比较严格的评价指标,即使在一轮对话中只有一个slot被预测错误,那轮的对话状态也是错误的。因此,对话回合的联合目标准确度的值为,或。SlotAccuracySlotAccuracy独立地将每个(realm、slot、slot)三元组与其对应的人工地面真值注释进行比较。与联合对象精度相比,它具有更细的评估粒度,但不适合评估对话跟踪器的整体性能。每一轮对话中的大部分槽位都没有被提及(即槽值为),即使槽值都被预测为,槽准确率也会很高。3.现有的方法和分类对话状态跟踪有着悠久的历史。早期的研究工作使用人为设计的规则或统计方法来跟踪对话状态。由于人类总结的规则不能涵盖对话中的所有情况,基于规则的方法有很多局限性,如泛化性能有限、错误率高、领域适应能力差等。另一方面,统计方法建立在数据的概率分布之上,其性能会因数据中的噪声、歧义、矛盾等而受到严重损害。随着硬件计算资源的快速提升和深度学习的兴起,研究人员开始考虑将各种深度神经网络结构引入到对话状态跟踪器中。代表性研究工作如DNN[5]、RNN[6]、NBT[7]和TRADE[8]等。这些神经对话状态跟踪器在大规模标记数据集上训练时优于基于规则和统计方法。与早期的方法相比,这类方法完全将研究人员从设计规则的繁琐工作中解放出来,也增加了对话状态跟踪器对不完美数据的鲁棒性。典型的神经对话状态跟踪器将对话历史、当前对话回合和预定义的槽列表作为输入,并输出当前对话回合的最新对话状态。为了更具体地总结现有方法的核心特征,我们提出了神经对话状态跟踪器的通用架构,由三部分组成:特征提取、状态动作预测和状态解码。3.1特征提取3.1.1槽位和对话的特征提取由于需要跟踪对话状态中的所有槽位,研究人员关注如何从对话文本中提取与每个槽位相关的信息,这不仅需要槽位和对话语义表示,以及两者的可能交互建模。因此,插槽和对话框之间的信息交互可以分为两种类型:分离建模;分别代表slots和dialogs交互建模:得到的dialogrepresentation与slot相关,slotrepresentation也与dialog相关分离建模Mrk?i?等人。2017年提出NBT模型,如图3所示,利用表示学习的方法将候选槽-槽值对和对话中的词嵌入到稠密词向量中。在状态解码阶段,NBT模型对两种表示进行推理计算,判断对话中是否出现槽-槽值对。图3NBT模型结构图这种分离特征提取方法具有以下特点:(1)得到的时隙特征和对话历史特征相互独立;(2)在一轮对话中,无论有多少个slot-slotvaluepairs,对话历史的特征提取只需要进行一次。交互式建模如果选择对候选slot-slot值对和对话进行交互式建模,会有以下两个缺点(1)依赖于完整的本体:应用时需要明确每个slot值的可能性,未见过的插槽的插槽值无法识别;(2)当slot的可选slot值个数过多时,该类方法的时间和空间复杂度较高。为了避免上述缺点,研究人员转而探索对时隙和对话之间的关系进行建模的方法。山等。[9]提出了CHAN(ContextualHierarchicalAttentionNetwork)模型(结构如图4所示),利用slot-wordattention机制从前一轮对话中提取slot相关信息,利用slot-turnattention机制进一步从整个对话历史中有效地选择与插槽最相关的特征。图4CHAN模型结构图与单独建模相比,槽和对话历史的联合建模可以帮助槽更准确地定位对话历史中与槽密切相关的部分;然而,联合建模在时间和空间上的复杂性高于分离建模。3.1.2slot之间的关系建模除了对slot和dialogues之间的相关性进行建模外,一些工作还考虑了slot之间可能存在的关系[10,11,12,13],例如Coreference和slotvalueco-occurrence等。共指关系是指一个slot的值来自另一个已经存在的slot;槽值共现是指槽值之间可以有很高的共现概率,比如餐厅的名字与其提供的菜品类型高度相关。不考虑槽间关系的对话状态跟踪器独立预测每个槽的槽,忽略槽之间的现有连接。CSFN-DST[10]和SST[11]模型构建了一个模式图,试图捕捉不同时隙之间的相关性。SAS[12]模型通过计算槽相似度矩阵来实现相似槽之间的信息流动和信息交互。在槽相似度矩阵中,如果认为两个槽相似,则将它们之间的相似度设为,否则为。判断slot相似度的方法有两种:(1)计算不同slot的名称和类型之间的余弦相似度,根据两个超参数判断是否相似;(2)K-meansofslotnamesandtypes聚类结果。但是,CSFN-DST和SST模型不可扩展。在这两种模型中,人工构建的schema图不能完全反映slot之间的关系,在构建图的过程中使用了大量的先验知识。对于SAS模型,一方面难以设置超参数,另一方面非i.e.相似度设置方案显然不合理。此外,上述三种方法仅根据槽位名称来衡量槽位相关性,可能会忽略或高估某些槽位之间的关系。为了解决上述缺点,Ye等人。[13]提出了STAR模型,它使用槽名称和对应的槽值来更准确地建模槽关系。3.2状态操作预测对槽和对话文本进行表示和特征提取后,提取的特征可以用来判断槽的操作类型,即状态操作预测。根据不同的槽更新机制,我们可以将状态操作分为两类:面向状态识别和面向状态更新。使用前者的跟踪器专注于从整个对话中提取状态,而后者更关注提高状态跟踪的效率。面向状态识别的操作就是采用这种状态操作方法,直接使用提取的特征来预测从对话开始到当前状态的最新对话状态。不需要设置状态操作,也不需要设置特殊的操作来辅助模型完成状态识别。如图5所示的TRADE模型使用三种状态操作来判断槽是否属于特殊值,即,和。图5TRADE模型结构图虽然包括TRADE在内的方法取得了不错的效果,但是这类方法仍然存在问题:在每一轮对话中,模型需要预测从对话开始到当前对话出现的所有槽位-插槽值对。随着对话的继续,从更多冗余的对话历史文本中提取对话状态变得越来越困难,这种方案可以称为独立方案,如图6所示。图6.独立方案示意图在在方案的形式上,独立方案将一个包含多轮交互的完整对话的对话状态生成问题拆解为独立的子问题,子问题之间互不干扰。每个子问题的解决方案是将直到本轮的对话历史作为一个整体来考虑,并直接从中生成所有发生的对话状态。可以看出,这种方法重复预测同一个slot的slot值,导致跟踪状态效率低下,在实际使用中难以满足极短响应速度的要求。State-update-orientedoperation采用面向状态更新的操作方式,高效完成状态跟踪,尽可能减少不变槽的重复计算,进而降低任务型对话系统的响应速度。例如,SOM-DST(SelectivelyOverwritingMemoryforDialogueStateTracking)模型[14]可以通过减少冗余计算和并行跟踪所有时隙,将每轮对话的状态跟踪推理时间减少到TRADE模型的8%。具体来说,SOM-DST将对话状态视为一个选择性可重写的存储结构(内存),然后将对话状态跟踪解耦为两个子任务:(1)状态操作预测子任务决定了的每个槽执行的操作类型,包括、和等操作;(2)槽值生成子任务为内存中需要改写的槽生成新的槽值。图7显示了SOM-DST如何在第一轮对话中更新对话状态。操作发生在第b个槽,第-个槽的新槽值需要推理并参考第一个槽的槽值“center”。图7选择性改写示例图如图8模型图所示,SOM-DST以上轮对话、本轮对话和上轮对话状态为输入,并行处理本体中的所有槽位,输出本轮的对话状态。事实上,解耦模型只需要生成需要改变的槽的槽值(所有槽的最小子集),状态操作预测器负责筛选需要生成新值的槽,并且slotvaluegenerator只为被选择的slot解码slotvalue。减少需要解码的时隙,并行处理所有时隙,使得SOM-DST模型的平均响应时间达到27ms,相比于TRADE模型的340ms,这是一个更容易被用户接受的响应时间。图8SOM-DST模型结构图与其类似,Lin等人。[15]提出了一个最小的信念跨度,认为当系统与不同领域的API交互时,从头开始生成对话状态是不可扩展的。他们提出的MinTL框架是基于最小信念广度,对上一轮的对话状态进行、和三个操作,从而实现对话状态的更新。我们称这种方法为渐进式方案。如图9所示,progressivescheme将每一轮的对话状态作为一个清晰的数据结构,不仅可以在生成当前轮的对话状态时看到对话历史,还可以利用之前已经生成的对话状态回合。这类方法可以根据本轮对话更新上一轮的对话状态,从而更快的完成对话状态的生成。图9progressiveschematicschematicdiagramofprogressivescheme3.3状态解码作为神经对话状态跟踪器的最后一个组件,状态解码部分根据前面组件获得的所有信息完成槽值的解码。虽然tracker的目的是从对话中找出某个slot的slot值,但是对于不同的应用场景,slot值的解码方式也不同。3.3.1基于预定义的本体如果在一个应用中,一个槽所有可能的槽值都是已知的,那么在对话的每一轮,状态解码器都可以尝试找到与该槽最相关的槽-槽值对对话历史。这种解码方法需要事先知道完整的本体,因此可以概括为基于预定义本体的状态解码器。多类解码器对于每个槽,多类解码器从所有可能的槽值中选择正确的一个,如STAR模型[13]。图10中,槽位特征经过线性层变换,得到槽位所有槽位值的向量表示,代表相似度计算,取相似度最高的值作为结果。图10STAR模型结构图二分类解码器利用本解码器的对话状态跟踪器一次性完成一个槽-槽值对和对话历史的特征提取。binaryclassificationdecoder根据提取的特征判断slot-slotvaluepair是否出现在对话中,如图3中的NBT模型所示。由于每个slot需要完成多次完整的模型推理计算,所以binaryclassificationdecoder增加了系统的响应时间。3.3.2基于开放词汇表然而,在任务型对话系统的实际应用场景中,有些槽位的槽值列表是无法完全获取的。例如与时间相关的槽位、预约就餐时间等,设计者很难枚举出所有可能的槽位值;也可能是对话系统无法访问所有现有的餐厅,因为没有遍历后端数据库名称的权限。针对此类应用场景,许多研究工作设计了基于开放词汇表的状态解码器,以直接从对话中查找或生成槽值。复制生成机制在每一个槽值的解码步骤中,TRADE模型[8](图5)结合了复制机制(copymechanism)和生成机制,对两种机制得到的词汇概率分布进行加权平均,以及最高概率的单词作为解码步骤的输出。其中,复制机制实现从对话历史中选择值,生成机制生成不直接出现在对话中的词。两者的结合提高了对话跟踪器的实用性和开放性。识别文本跨度基于文本跨度的解码器通过选择对话历史文本中的子序列,直接从对话历史中提取槽值。例如,高等人。[16]将对话状态跟踪任务转化为抽取式问答任务,然后提出DST-Reader模型通过预测子序列的开始和结束从输入的对话文本中抽取槽值。图11DST-Reader模型结构图如图11所示,该模型将对话文本序列视为一段(passage),为每个slot构造一个问题(question),询问当前对话中某个slot的内容是什么位的槽值,例如“槽i的值是多少?”;如果状态操作类型为,从对话中选择子序列的起始位置和结束位置,得到的子序列就是槽值。3.3.3混合方法根据槽值的可枚举性,槽可以分为可枚举槽和不可枚举槽。可枚举槽位是指槽位可能的槽位值是固定的,比如“酒店星级”一般分为一星到五星。不可枚举的槽位就是前面提到的预订就餐时间和餐厅名称等槽位。上述两种类型的状态解码器都以相同的方式处理所有槽。然而,基于预定义本体的状态解码器在面对不可枚举的槽时,无法解码没有出现在槽值列表中的值。虽然基于开放词汇表的状态解码器理论上可以生成不直接出现在对话中的槽值,但显然基于预定义本体的状态解码器更适合处理可枚举槽。因此,一些研究工作提出了使用两个状态解码器分别处理可枚举槽和不可枚举槽的混合方法。4.结论基于深度学习方法的对话状态跟踪模型,即神经对话状态跟踪模型,在过去几年受到了研究人员的广泛关注。针对这一基于任务的对话系统中的重要模块,本文首先介绍了对话状态跟踪任务的重要性、定义、常用数据集和评价指标。随后,提出了一个通用框架,对近年来的神经对话状态跟踪模型进行了仔细梳理,分为特征提取、状态操作预测和状态解码三个阶段。在特征提取阶段,跟踪器完成槽位和对话历史的特征提取,得到包含丰富信息的文本表示;相关特征表示,帮助后续模块更准确地跟踪槽位状态;更重要的是,对时隙之间的特征表示进行建模,并充分利用时隙之间的共指和共现关系。在状态操作预测阶段,提取的特征可用于确定每个时隙的操作类别。在每一轮对话中,面向状态识别的操作帮助tracker找到对话历史中所有slot的slot值;而面向状态更新的操作识别出需要更新的槽位,并在状态解码阶段对它们的槽位值进行解码,减少了冗余计算,但可能会损失一定的跟踪精度。状态解码器将前面组件得到的所有信息作为输入,输出槽的槽值。基于预定义本体的解码方法需要完整的本体,对每个槽位所有可能的槽位值完成分类;基于开放词汇表的解码方法直接从对话历史中获取槽值,可以复制和添加。也可以通过识别文本跨度在对话历史中识别包含槽值的连续子序列;混合方法分别对可枚举槽和不可枚举槽采用第一种和第二种解码方法,从而同时保证了对话状态跟踪的准确性、实用性和公开性。
