其他分享
首页 > 其他分享> > 关于CrossWOZ【转载以学习、回忆】

关于CrossWOZ【转载以学习、回忆】

作者:互联网

任务:github CrossWOZ下有个trade模型 训练起来 模型架构 输入输出 损失函数是什么 整理成文档。

因此先了解一下CrossWOZ的论文,转载以学习、回忆

转载链接:https://mp.weixin.qq.com/s/_oEdeeTNcoJwN9_gWDsBiA

 

 

相比于之前的任务导向对话数据集(特别是MultiWOZ),CrossWOZ有三大特点: 

1. 在对话中,用户在某个领域的选择可能会影响到与之相关的领域的选择。如上面的这个例子,用户选择了北京欢乐谷作为景点领域的结果,那么之后选择的酒店就要在它附近。不同的景点选择会对酒店产生不同的约束。这种跨领域约束随着对话的进行而具体化,需要对话双方都能对上下文有更好的理解,因而更具有挑战性。

2. 这是第一个中文大规模多领域任务导向对话数据集,包含 6K 个对话,102K 个句子,涉及 5 个领域(景点、酒店、餐馆、地铁、出租)。平均每个对话涉及 3.2 个领域,远超之前的多领域对话数据集,增添了对话管理的难度。 

3. 标注信息全面,可以用于研究任务导向对话系统中各个方面。除了提供对话双方的对话意图、系统端的对话状态这些信息之外,还额外提供了每轮用户端的对话状态。用户端状态记录了目标的完成情况,每轮根据系统回复动态更新,可用于研究用户模拟器的搭建。(这个对话状态具体是哪里)

数据收集过程:

收集数据时模拟的对话场景是一名游客向系统咨询北京的旅游信息,分为以下几个步骤: 
1. 领域数据库构建:从网络上爬取了北京的景点、酒店、餐馆信息,以及这些地点的邻近关系。同时这些地点附近的地铁站组成了地铁数据库。出租领域无需数据库。

 

 2. 用户目标生成:通过随机采样的方式生成各领域的目标。如下表,有值的表示约束条件,没有值的表示需求信息,粗体的表示跨领域的约束,用占位符表示。这个例子里用户要找一个免费的景点及其附近一家提供叫醒服务的酒店,并预订一辆从景点到酒店的出租。

 

 3. 对话数据收集:雇佣人员在线匹配进行实时对话。用户端以用户目标作为初始状态,通过对话获取信息,每轮更新用户状态,填写需求的信息和替换跨领域的约束。并选择本轮要表达的约束或者要询问的信息。系统端每轮维护各个领域的查询表单作为系统状态,根据查询结果回复用户。 (系统端是人工扮演的的?)

4. 数据处理:使用一些规则根据用户和系统的状态推导出对话意图。经过三个专家对少量对话的核验,数据标注质量较高。

数据统计:

将对话分成五种类型:单领域 S,多领域 M,多领域加交通 M+T,跨领域 CM,跨领域加交通 CM+T。交通代表了地铁和出租领域,M 和 CM 的区别是有没有跨领域的约束。

统计信息如下表。可以发现含有跨领域约束的对话 (CM,CM+T) 会导致更多的系统多次查找 (Multi-query)、找不到结果 (NoOffer)、用户自主修改目标 (Goal change) 的情况。

 

 基线模型:

由于丰富的标注信息,CrossWOZ 数据集可用于多种任务的研究。依托于 ConvLab-2 对话平台,我们提供了 NLU、DST、Policy、NLG 的基线模型以及 user simulator,部分结果如下表。实验说明跨领域的约束对各个任务都有挑战性。

 

 

转载链接:

https://mp.weixin.qq.com/s/u9Mr6EjI5LSSIX5LciWtqA

常见任务

 

有了多轮对话数据集,而且标注这么详细,我们就有研究多轮对话的条件了。

多轮对话有以下五个研究方向:

多轮对话下的自然语言理解(NLU)

多轮对话下的NLU通常是对用户的输入语句让模型填满这样一个四元组

(intent=inform,domain=Attraction,slot=fee,value=free)

通过意图识别和ner我们就可以完成nlu。本文提出了一种BERTNLU-context的模型来做多轮对话下的nlu。BERTNLU不必多说,就是把bert作为encoder对输入文本进行编码。然后为了利用上下文信息,BERTNLU-context会把对话历史的之前三句话用sep分割作为文本输入另一个BERT模型,取出那个模型的cls位置变量作为上下文表征。然后把该上下文表征和用户输入的语句的特征向量一一concat再进行ner和文本分类,效果很好。

对话状态追踪(DST)

DST的目地是根据用户和系统的对话历史,动态识别出用户的目地,并转为预先定义好的格式。

本文介绍了两种方法做DST

  1. RuleDST。设计一些规则动态识别用户状态,比如识别到用户说任意一个槽就给它填上。

  2. TRADE。TRADE模型需要专门的篇幅来介绍它。


TRADE模型

首先它要解决的问题是如何在一个涉及多个领域的对话中利用跨领域domain的信息来完成一个综合的任务。举个例子:吴先生要去一家餐厅约会,使用智能助手订好了餐厅,其中收集了餐厅名 时间这些信息(slot),而之后吴先生还需要一辆出租车回家,那么此时他会期望智能助手明白上车点就是餐厅。那么问题来了,在传统的基于一个个独立领域的对话系统中,两个不同领域之间相互独立,不共享信息,你定的餐厅,订完了说一句我要订餐厅回家的出租车,好嘞进入订车的领域,从头开始问“您从哪里出发呀”。显然不够聪明。TRADE就是试图所有的domain使用同一个模型,并利用前面几句话历史,来预测出当前吴先生说这句话的状态(state):(domain,slot,slot value)就能判断这是【订出租车的】domain,slot是出发点,还能从之前吴先生确认的餐馆名就知道出发点是XX大酒店。

那么,这么聪明的性能要如何做到呢?

TRADE由三部分组成:

 

Utterance Encoder,    Slot Gate ,   State Genrator

Utterance Encoder(双向GRU):把包括当前句子的对话历史所有单词embedding拼接(Ⅰ轮)编码得到H_t=[H_1,H_2,...,H_XL]

State Generator:首先将所有可能的diomain和slot配对得到J个(domain,slot)对,将它们用GRU解码,解码过程中得到一个隐藏层h_dec^jk将他映射到词汇空间P_vocab^jk,同时还用这个隐藏层来计算对话历史的attention P_history^jk,加权而后得到context vector cj0.P_vocab和P_history加权相加(权值是另一个可训练sigmoid元得出)后就是最终某个(domin,slot)对基于当前对话历史的在所有单词上的概率分布。这一过程要做J词。考虑P_history和P_vocab的目的是能让模型同时可以从对话历史中找出信息,又有机会得到未在历史中出现过的单词。

Slot Gate G_j:每个(domain,slot)对都有一个TGate,将它们每个都对上面由对话历史得到的context vector cj0做一个计算Gj=Softmax(Wg*(cj0)>)属于R3,得到dont care   none   ptr三个选项的概率,如果是前两者,那么无需填入特定槽值,若为ptr则将State Generator得到的槽值填入对应槽,也即Slot Gate的工作是找出要填的哪个domain的哪个槽。而Srate Generator是找出这个槽的值。至此,TRADE便俩用对话历史得到了状态(domain,slot,value),对每一段对话历史的计算都不以来于某一个domain。

对话策略学习(DPL)

DPL就是根据之前的对话状态和用户输入,生成一个系统action。在我们做传统的基于状态机的多轮对话中,对话策略通常是基于规则的。本论文介绍了ConvLab-2对话平台下使用SL polciy完成了监督学习下的对话策略学习模型。

自然语言生成(NLG)

我们有了用户和系统的状态和对话动作,同时又有用户生成的自然语言。那么便可以制作生成模型来生成灵活的系统回复语言。本文用两种方式做这个,一个是基于模板的TemplateNLG,一个是SC-LSTM。两个效果如下:

 

 

SC-LSTM模型参考地址:https://github.com/andy194673/nlg-sclstm-multiwoz

 

用户模拟器

用户模拟器是用来模拟用户说话的。最简单的模拟器就是规则型的比如约定第一句话说订酒店,第二句话说要五星的。

用户模拟器对多轮对话系统的自动化评估和对话策略学习都是很有帮助的。本文也构建了一种rule-based 用户模拟器。比如当用户的目标中有未填充的槽时,用户模拟器就会不断追问该槽值,直到所有目标的槽全部填充为止。

论文结果

 

 

1 BERTNLU部分准确率都很高。

2 DST/SL policy准确率在80以下,具有很大提高空间。

3 越是跨领域,对话状态越难追踪。

 

标签:slot,domain,模型,用户,领域,对话,CrossWOZ,转载,回忆
来源: https://www.cnblogs.com/nlpers/p/15817621.html