【多轮对话】多轮对话状态追踪技术综述

数据

研究任务型对话系统,首先得从数据集采集说起,关于数据之前文章介绍过了,这里就不详细介绍了,参考:任务型多轮对话数据集和采集方法

用户建模

用户模拟器是在任务型多轮对话场景中,用于模拟用户在指定目标下多轮对话过程,可以用于生成对话数据,以及通过强化的方式训练系统决策。在具体的任务型场景需要定义有哪些用户行为、用户意图、用户可能说的槽位等。

之前也分析过微软开源的规则版用户模拟器代码,这里就不赘述了,可以参考:【多轮对话】从微软源码看用户模拟器构建

无论是规则还是模型版本用户建模,其一般输入包含:1)对话历史;2)用户profile(画像);3)任务的schema;4)数据库or API。

目前用户模拟器也面临一些挑战:

  • 开发更通用的用户模拟器,他的输入可以包含数据库或者API,这些数据库和API是根据领域变化的,从而尽可能将一些领域知识剥离。
  • 如果用规则的用户模拟器,最终生产的对话流也会被规则限制,如何通过众包、用户日志学习到更为真实的对话,而这些会话很有可能是规则对话流无法覆盖的。

所以也有一些论文提出了基于模型的方案,例如Bootstrapped:

Bootstrapping a Neural Conversational Agent with Dialogue Self-Play, Crowdsourcing and On-Line Reinforcement Learning
Domain-independent User Simulation with Transformers for Task-oriented Dialogue Systems

原谅我废话了一些(打)背(广)景(告)。下面主要介绍多轮对话状态最终的一些方法,主要包含以下内容:

会话状态跟踪

对话状态定义:对话一个会话状态S_t,它包含知道前当前轮次t的对话历史的总结,S_t中包含了系统选择下一步action的所有信息。St一般都是槽位状态的分布。(意图也可以作为一种槽位状态)

会话状态跟踪就是根据所有的历史上下文信息,获得到当前轮的会话状态。

The dialog state tracking challenge series: A review

Static Ontology DST Models

定义:dialogue state tracker(belief traker)。在会话的每一步去预测用户的目标,用户目标是一个不可观测的隐状态,所以通过观测用户utterence,通过belief state来表示用户目标。

  • belief state: 对话的每一个时间步的状态表示,由于当前观测状态具有不确定性(asr噪声、nlu不确定、用户表达本身的不确定性),所以belief state是一个概率分布,具体为每个slot的概率,slot包含type,value,action。

a belief state b is a vector whose component values give the probabilities of being in each machine state.

NBT

2017Neural Belief Tracker- Data-Driven Dialogue State Tracking

此篇文章提出NBT框架,通过引入预训练词向量,将用户query和会话上文表征为向量,解决语义理解任务需要大量数据和手工特征的问题,更适合复杂的对话。

之前也介绍过NBT,这里就不啰嗦了,参考:【多轮对话】任务型多轮对话状态跟踪-NBT原理

GLAD

2018Global-Locally Self-Attentive Dialogue State Tracker

glad也是计算state中每个slot-value的的概率,不同的是提出了Global-locally self-attentive encoder,希望通过共享参数的global模块,提升长尾slot-value对的识别效果。整体框架包含编码模块和打分模块:

Global-locally self-attentive encoder:通过global模块对所有的slot-value共享参数,提取公共特征,local模块提取slot-value的私有特征,所有encoder都是用了此种结构,典型的share-private结构:

GCE

2018Toward Scalable Neural Dialogue State Tracking Model

类似glad,两阶段,encoder和scoring。encoder中只使用global encoder,通过使用attention机制希望能够对域不同的slot type获取到私有的特征。他的编码器模块输入阶段融入了slot type信息和utterance,解码通过attention机制希望能够更关注于句子中槽值有关的信息,如图(a),scoring阶段,context vector由于更关注于槽值,所以一和slot-value对计算得分的时候,相同槽值得分会更大,如图(b)。

从整个过程看下来,网络结构比GLAD简单,还更合理。

G-SAT

之前的模型使用RNN来计算每个slot-value的概率,延迟会是一个很大的问题,难以在真实对话中使用,特别是slot-value特别多的情况。g-sat就是解决延时问题(Global encoder and Slot-Attentive decoders),global编码器使用了bilistm(噗..),然后每个slot-type会有一个私有解码器,去计算其得分。

反正他快了,就是因为网络减少了(共享),没啥大优化。

SUMBT

slot-utterance matching belief tracker (SUMBT)引入了bert作为预训练编码器。对于value值,使用bert编码成向量,然后对于对话历史和slot-type,也通过下图的编码器转化为一个向量,然后向量相似度得分作为该slot-value对的概率。

Dynamic Ontology DST Models

BERT-DST

BERT-DST: Scalable End-to-End Dialogue State Tracking with Bidirectional Encoder Representations from Transformer

通过span来预测context中的槽位,然后通过 per-slot classification module预测槽位值类型:{none, dontcare and span}。对于每种slot-type,都是共享的底层的编码器,然后上层的解码器是每个slot-type私有的,包括classification and span prediction模块。

Auxiliary Features:除了用户当前和历史的会话,当前系统的回复,输入还包括: $a_t^{inform}$表示该槽位是否最近被系统问过,$a_t^{ds}$表示槽位是否已经被用户说过。

Partial Masking:会对历史系统回复中的槽位值替换为UNK,目的是为了更多关注句式,避免值带来的干扰。(因为值是已知的,可以直接获得)

Reading Comprehension

Dialog state tracking, a machine reading approach using Memory Network
Dialog State Tracking: A Neural Reading Comprehension Approach

将状态追踪问题转化为阅读理解的QA问答,问题例如:当前对话提及的地点是?

模型包含三个主要模块,slot carryover modelslot type modelslot span model

  1. slot carryover: 判断该槽位是否从上一轮状态中继承,如果否,继续第二步。对于每个slot-type会有一个specific的分类器。
  2. slot type:输入是$q_i$和e,预测当前槽位属于哪一种类型:{Yes, No, DontCare, Span},yes/no对应二值类型槽位,dontcare表示槽值无所谓,如果是span,那么会继续第三步骤。
  3. slot span:输入是$q_i$和会话历史,预测当前slot-type下的槽位值,类型MRC-NER思想。

对于不同的slot-type,dialogue embedding只用计算一次,不同的question和e作为slot type的输入,

SOM-DST

Selectively Overwriting Memory for Dialogue State Tracking
2020Efficient Dialogue State Tracking by Selectively Overwriting Memory.pdf

不同于之前的模型直接追踪状态,SOM会依赖于历史的mermory,然后预测会话状态的更新情况。整个过程包含两步,1)预测状态操作(包含继承、删除、更新、不在乎),2)如果是更新,就用识别新槽值来更新状态。

operation predictor:包含四种操作,{CARRYOVER, DELETE, DONTCARE, UPDATE},分别对应将槽位$S^j$的值设置为:

图中的Dt包含系统回复At和用户表达Ut,Bt表示在t轮时的会话状态,J是槽位类型个数,输入Xt表示为:

X_t = [CLS] \\oplus D_{t-1} \\oplus D_t \\oplus B_{t-1} \\\\ D_t = A_{t} \\oplus ; \\oplus U_{t} \\oplus[\\mathrm{SEP}] \\\\ B_{t} = B_t^1 \\oplus ... \\oplus B_t^J \\\\ B_{t}^j = [SLOT]^j \\oplus S^j \\oplus - \\oplus V_t^j

其中“SLOT”、"-"是特殊字符标记,类似于槽位分隔符,不同槽位类型之间都是一样的。

然后SLOT字符的输出来预测该槽位该做哪一种operation。CLS向量预测属于哪一域,也可以作为意图分类器。

Slot Value Generator:通过GRU来生成槽位值,初始GRU的hisden state来自于$h_t^X$,词向量是$h_t^{SLOT^j}$,即保证生成的槽位值是槽位j的,每次解码的时候解码出EOS则结束。

感觉生成方式还是不太靠谱,会在整个词语空间生成,如果这里加一点限制,比如当前中出现过的槽位值,应该会更高效一些。其实如果更新槽位值,一般就是当前轮次进行了槽值纠正,更可能在当前轮次中。

NADST

NON-AUTOREGRESSIVE DIALOG STATE TRACKING

自回归的一些方法,不太实用,线上预测耗时高,本文提出一种非自回归方案,并且显示引入了domain和slot-type之间的关系。

SG-DST

Schema-guided multi-domain dialogue state tracking with graph attention neural networks

如果预测意图和槽位的时候,加入一些意图的槽位的说明,是不是有利于模型理解呢?一定程度上是否也能够解决某些槽位数据稀疏的问题,所以这篇文章提出了SST模型,通过引入包含槽位关系的schema graphs,将graph和句子融合(fuse),来进行状态追踪。

DA-DST

2020Domain-Aware Dialogue State Tracker for Multi-Domain Dialogue Systems

文中提出domain-aware dst方法,基于数据驱动,但是预测的时候能够支持dynamic service schemas,(这个有点意思,有点prompt的味道)。该方法将domain和slot信息联合抽取为向量表达(这里会用到描述,所以能够支持动态的),然后用这种向量表达来预测slot的值。

对于域、意图、slot-type、可分类的slot-value都通过分类来预测,对于非分类的槽位值,文章通过span预测来从当前系统回复和用户utterance中抽取。

这种方法会使用到slot、domain中的描述信息,作为一些先验知识输入,无论是对于冷启动还是数据稀疏问题应该一定程度上能够缓解,有点类似于prompt。

TOD-BERT

TOD-BERT: Pre-trained Natural Language Understanding for Task-Oriented Dialogue

作者认为通用的语料和多轮对话语料之间存在语义和句式上的差异,因此需要语言模型针对对话语料也做一定的daptation,所以提出了TOD-BERT,利用对话语料进行适配的预训练,主要改进在编码层。

端到端

End-to-End Multi-Domain Task-Oriented Dialogue Systems with Multi-level Neural Belief Tracker

ConvLab: Multi-Domain End-to-End Dialog System Platform

个人觉得端到端在任务型会话上,达到工业级应用远远不够,而且不可控,然后一般论文不仅端到端,还要Multi-Domain,看到标题我就发憷。但是在闲聊领域应该是有很多个案例。这块了解不多,

Non-Autoregressive Dialog State Tracking

少样本&零样本

这一块确实是很热门的话题,Prompt如火如荼,上面说了太多,先留坑,后面在开篇讲吧。

关注公众号接收最新消息

reference

本站文章资源均来源自网络,除非特别声明,否则均不代表站方观点,并仅供查阅,不作为任何参考依据!
如有侵权请及时跟我们联系,本站将及时删除!
如遇版权问题,请查看 本站版权声明
THE END
分享
二维码
海报
【多轮对话】多轮对话状态追踪技术综述
研究任务型对话系统,首先得从数据集采集说起,关于数据之前文章介绍过了,这里就不详细介绍了,参考:任务型多轮对话数据集和采集方法
<<上一篇
下一篇>>