前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【多轮对话】多轮对话状态追踪综述

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

作者头像
百川AI
发布2024-04-09 21:27:04
4220
发布2024-04-09 21:27:04
举报
文章被收录于专栏:我还不懂对话

数据

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

百川:【多轮对话】任务型多轮对话数据集和采集方法

用户建模

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

之前也分析过微软开源的规则版用户模拟器代码,这里就不赘述了,可以参考:

百川:【多轮对话】从微软源码看用户模拟器构建

无论是规则还是模型版本用户建模,其一般输入包含: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&NBT2

之前也介绍过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模块。

输入是上一轮的系统回复和当前用户query,但是不知道为何么有输入更多的历史信息?

Slot Value Dropout: 通过以一定概率将slot-value的token改为[UNK],提升模型对于OOV实体的识别效果,让模型学习依赖句式去抽取slot,而非slot具体的值。

TripPy

TripPy- A Triple Copy Strategy for Value Independent Neural Dialog State Tracking

会话状态中槽位来自于三种情况:

  • 用户当前轮次会话
  • 当前系统回复给用户中提及的槽位
  • 用户历史会话

因此提出了使用span机制来抽取用户当前和历史会话、系统回复中的槽位,然后提出门控机制:

  • slot getes是对每个domain-slot进行分类(注意没有value),包含五个类别:{none,dontcare,span,inform,refer},span表示槽位来自于用户当前轮,inform表示来自于系统当前回复,refer表示来自于来自于已有的会话状态。
  • Boolean slots:两类型的slot会单独分类,包含类别为{none, dontcare, true, false}。

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的值设置为:

V_{t}^{j}=\left\{\begin{array}{ll}V_{t-1}^{j} & \text { if } r_{t}^{j}=\text { CARRYOVER } \\ \text { NULL } & \text { if } r_{t}^{j}=\text { DELETE } \\ \text { DONTCARE } & \text { if } r_{t}^{j}=\text { DONTCARE } \\ v & \text { if } r_{t}^{j}=\text { UPDATE }\end{array}\right.
V_{t}^{j}=\left\{\begin{array}{ll}V_{t-1}^{j} & \text { if } r_{t}^{j}=\text { CARRYOVER } \\ \text { NULL } & \text { if } r_{t}^{j}=\text { DELETE } \\ \text { DONTCARE } & \text { if } r_{t}^{j}=\text { DONTCARE } \\ v & \text { if } r_{t}^{j}=\text { UPDATE }\end{array}\right.

图中的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
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如火如荼,上面说了太多,先留坑,后面在开篇讲吧。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-02-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 数据
  • 用户建模
  • 会话状态跟踪
  • Static Ontology DST Models
    • NBT&NBT2
      • GLAD
        • GCE
          • G-SAT
            • SUMBT
            • Dynamic Ontology DST Models
              • BERT-DST
                • TripPy
                  • Reading Comprehension
                    • SOM-DST
                      • NADST
                        • SG-DST
                          • DA-DST
                            • TOD-BERT
                            • 端到端
                            • 少样本&零样本
                            相关产品与服务
                            数据库
                            云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
                            领券
                            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档