【多轮对话】多轮对话状态追踪技术综述
数据
研究任务型对话系统,首先得从数据集采集说起,关于数据之前文章介绍过了,这里就不详细介绍了,参考:任务型多轮对话数据集和采集方法
用户建模
用户模拟器是在任务型多轮对话场景中,用于模拟用户在指定目标下多轮对话过程,可以用于生成对话数据,以及通过强化的方式训练系统决策。在具体的任务型场景需要定义有哪些用户行为、用户意图、用户可能说的槽位等。
之前也分析过微软开源的规则版用户模拟器代码,这里就不赘述了,可以参考:【多轮对话】从微软源码看用户模拟器构建。
无论是规则还是模型版本用户建模,其一般输入包含: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
原谅我废话了一些(打)背(广)景(告)。下面主要介绍多轮对话状态最终的一些方法,主要包含以下内容:
会话状态跟踪
对话状态定义:对话一个会话状态StS_tSt,它包含知道前当前轮次t的对话历史的总结,StS_tSt中包含了系统选择下一步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
之前也介绍过NBT,这里就不啰嗦了,参考:【多轮对话】任务型多轮对话状态跟踪-NBT原理
2017Neural Belief Tracker- Data-Driven Dialogue State Tracking
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:除了用户当前和历史的会话,当前系统的回复,输入还包括: atinforma_t^{inform}atinform表示该槽位是否最近被系统问过,atdsa_t^{ds}atds表示槽位是否已经被用户说过。
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 model、slot type model、slot span model。
- slot carryover: 判断该槽位是否从上一轮状态中继承,如果否,继续第二步。对于每个slot-type会有一个specific的分类器。
- slot type:输入是qiq_iqi和e,预测当前槽位属于哪一种类型:{Yes, No, DontCare, Span},yes/no对应二值类型槽位,dontcare表示槽值无所谓,如果是span,那么会继续第三步骤。
- slot span:输入是qiq_iqi和会话历史,预测当前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},分别对应将槽位SjS^jSj的值设置为:
Vtj={Vt−1jif rtj=CARRYOVER NULL if rtj=DELETE DONTCARE if rtj=DONTCARE vif rtj=UPDATE 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. Vtj=⎩⎪⎪⎨⎪⎪⎧Vt−1jNULLDONTCAREvifrtj=CARRYOVERifrtj=DELETEifrtj=DONTCAREifrtj=UPDATE
图中的Dt包含系统回复At和用户表达Ut,Bt表示在t轮时的会话状态,J是槽位类型个数,输入Xt表示为:
Xt=[CLS]⊕Dt−1⊕Dt⊕Bt−1Dt=At⊕;⊕Ut⊕[SEP]Bt=Bt1⊕...⊕BtJBtj=[SLOT]j⊕Sj⊕−⊕VtjX_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 Xt=[CLS]⊕Dt−1⊕Dt⊕Bt−1Dt=At⊕;⊕Ut⊕[SEP]Bt=Bt1⊕...⊕BtJBtj=[SLOT]j⊕Sj⊕−⊕Vtj
其中“[SLOT]”、"-"是特殊字符标记,类似于槽位分隔符,不同槽位类型之间都是一样的。
然后[SLOT]字符的输出来预测该槽位该做哪一种operation。[CLS]向量预测属于哪一域,也可以作为意图分类器。
Slot Value Generator:通过GRU来生成槽位值,初始GRU的hisden state来自于htXh_t^XhtX,词向量是ht[SLOT]jh_t^{[SLOT]^j}ht[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如火如荼,上面说了太多,先留坑,后面在开篇讲吧。
关注公众号接收最新文章:百川NLP
reference
A Network-based End-to-End Trainable Task-oriented Dialogue System
Bootstrapping a Neural Conversational Agent with Dialogue Self-Play, Crowdsourcing and On-Line Reinforcement Learning
2021Conversational Semantic Parsing for Dialog State Tracking
Building a conversational agent overnight with dialogue self-play, git
Dialogue Learning with Human Teaching and Feedback in End-to-End Trainable Task-Oriented Dialogue Systems
2018Fully Statistical Neural Belief Tracking
2017Neural Belief Tracker- Data-Driven Dialogue State Tracking
2018Global-Locally Self-Attentive Dialogue State Tracker
2018Toward Scalable Neural Dialogue State Tracking Model
Scalable neural dialogue state tracking
SUMBT: Slot-utterance matching for universal and scalable belief tracking
2019BERT-DST- Scalable End-to-End Dialogue State Tracking with Bidirectional Encoder Representations from Transformer
2020TripPy- A Triple Copy Strategy for Value Independent Neural Dialog State Tracking
Dialog state tracking, a machine reading approach using Memory Network
Dialog State Tracking: A Neural Reading Comprehension Approach
2018scalable multi-domain dialogue state tracking
2018Flexible and Scalable State Tracking Framework for Goal-Oriented Dialogue Systems.pdf
2019Scalable and Accurate Dialogue State Tracking via Hierarchical Sequence Generation.pdf
An End-to-end Approach for Handling Unknown Slot Values in Dialogue State Tracking.pdf
2020MA-DST- Multi-Attention-Based Scalable Dialog State Tracking.pdf
2020Find or Classify? Dual Strategy for Slot-Value Predictions on Multi-Domain Dialog State Tracking.pdf
https://aclanthology.org/W18-5045.pdf
https://zhuanlan.zhihu.com/p/27470864
https://www.jiqizhixin.com/articles/2017-08-30-22
A Survey on Dialog Management: Recent Advances and Challenges
[Neural Approaches to Conversational AI](
【多轮对话】多轮对话状态追踪技术综述相关推荐
- IP反向追踪技术综述
IP反向追踪技术综述 zhuantie ---冉小* 摘 要 拒绝服务***(DoS)给政府部门和商业机构造成了严重的经济损失和社会威胁.IP追踪技术能够反向追踪IP数据包到它 们的源头,所以是识别和 ...
- 实录 | DSTC 8“基于Schema的对话状态追踪”竞赛冠军方案解读
本文将回顾平安人寿近期在 PaperWeekly 直播间进行的主题为「DSTC 8"基于 Schema 的对话状态追踪"竞赛冠军方案解读」的技术分享,由平安人寿 AI 团队高级算法 ...
- 直播 | DSTC 8“基于Schema的对话状态追踪”竞赛冠军方案解读
「PW Live」是 PaperWeekly 的学术直播间,旨在帮助更多的青年学者宣传其最新科研成果.我们一直认为,单向地输出知识并不是一个最好的方式,而有效地反馈和交流可能会让知识的传播更加有意义, ...
- 任务型对话(二)—— DST(对话状态追踪)
1,概述 关于任务型对话的简介看任务型对话(一)-- NLU(意识识别和槽值填充). 首先我们来看下对话状态和DST的定义. 对话状态:在$t$时刻,结合当前的对话历史和当前的用户输入来给出当前每个s ...
- 成立十个月,融资五个亿,创新奇智完成超4亿人民币A轮和A+轮融资
郭一璞 发自 青年路 量子位 报道 | 公众号 QbitAI 资本寒冬里,AI又爆发了吸金力. 1月24日,AI+B2B公司创新奇智宣布完成总金额超过4亿人民币的A轮和A+轮融资,本轮融资由中金甲子 ...
- php http长轮询,http长轮询短轮询
http 协议介绍: http 协议是请求/响应范式的, 每一个 http 响应都是由一个对应的 http 请求产生的; http 协议是无状态的, 多个 http 请求之间是没有关系的. http ...
- Boss直聘App上“天使投资、VC、PE” 与“A轮、B轮、C轮融资”的关系
我们经常看到朋友圈里某某公司获得了某轮融资,所谓的A轮B轮究竟是个什么概念呢?今天就跟小伙伴们分享一下A.B.C.D轮融资与天使投资.VC.PE的关系. 天使投资(AI):天使投资所投的是一些非常早期 ...
- swiper轮播---异形轮播
swiper轮播-异形轮播 最近经常会碰到很多用swiper插件做各种各样轮播图的需求,没有做过3d异形轮播图,所以研究了一下,把经验给大家分享一下 上面图片就是轮播图所要达到的效果:焦点图片居中并向 ...
- HTTP - 长连接 短连接 长轮询 短轮询 心跳机制
错觉与突然的察觉 大多数人都知道HTTP1.0不支持长连接,知道HTTP1.1支持长连接. 这是业界的一个常识. 然而这样的描述导致了一些不做网络底层开发的开发者都下意识的认为HTTP1.1是一个可以 ...
- 融资中种子轮、天使轮、A轮、B轮和C轮有什么区别?
最近这几年,互联网创业成为了一种潮流.伴随着创业浪潮的是投资机构的兴起,我们经常会听到某某公司又拿到融资了.比如,大家熟悉的滴滴公司,据说拿了到十几轮的融资,大约200亿美金,公司直到目前都没有盈利. ...
最新文章
- C++构造函数(一)
- LeetCode实战:删除排序数组中的重复项
- 【UVA】10012 - How Big Is It?(暴力)
- mysql链表_MySql链表语句--博客园老牛大讲堂
- Java基础day16
- 【Python基础】必知必会的8个Python列表技巧
- 飞鸽传书2009绿色版 官方网站下载地址
- 金额数字转中文大写(转)
- XSS-Game level 13
- python怎么读取excel-python如何读写excel文件
- Pr 入门教程,如何在节目监视器中修剪剪辑?
- mybatis 之 parameterType=list
- CAN BUS原理理解
- 成功破解某app加密接口
- 【MySQL】sql查询分组数据的前几名,mysql分组查询前三名
- RC微分积分电路/RC滤波电路/RC脉冲分压器/RC耦合电路
- 安徽新科技计算机学校是高中吗,2021最新安徽高中排名一览表 所以高中学校
- iOS开发之自定义键盘(数字,字母类型等随意切换)
- 【CANoe】车载网络的相关概述
- 怎样用excel按进行分类求和,最后再根据一列对其他列进行排序