面向任务的对话的键值检索网络
原文:《Key-Value Retrieval Networks for Task-Oriented Dialogue》
原作者:Mihail Eric, Lakshmi Krishnan, Francois Charette, and Christopher D. Manning
摘要
面向任务的神经对话系统一直在尽力实现与知识库的平滑对接。在本试验中,我们试图通过提出一种新型神经对话代理来解决此问题。通过一种新颖的键值对索引机制,该对话代理可有效的支持多域语篇(discourse)。该模型是端对端(end-to-end)可微的(differentiable),无需显式地建模对话状态或置信追踪器(belief tracker)。我们还发布了3031个对话的新数据集,这些对话基于底层知识库,并跨越了车载个人助理空间中的三个不同的任务:日程安排,天气资讯和兴趣点导航(point-of-interest/POI navigation)。我们的体系结构同时对来自所有领域的数据进行了训练,并且根据自动评估和人工评估的指标,在给定的领域上显著地超越了基于竞争规则的系统和其他现有的神经对话体系结构。
1. 介绍
随着新的基于语音(speech-based)的人机界面的成功,面向任务的高效对话代理的需求量显著提升,它可以处理日常任务,如事件安排和预订酒店。目前的商业级对话代理往往是脆弱的模式匹配(pattern-matching)系统,无法满足人们想要的灵活对话。神经对话代理是当前最有前途的方法之一,借助强大的distributed representations(词向量)可以从数据上直接建立统计模型。
图1:采样自项目数据集。(由于空间限制,一些行列并未显示出来。”-“符号表示该值缺失)
尽管本实验已经取得了一些成功,这些面向任务的神经对话模型仍然面临以下问题:1) 很难在推理和整合知识库信息的同时保留自身端对端的可训练性(trainability)。2) 通常需要用belief trackers和dialogue state information为用户对话明确地建模,这不但需要额外的数据注释,而且会破坏可微性。
为了解决以前神经对话代理的一些建模为问题,我们引进了一个新的体系结构:键-值对检索网络(Key-Value Retrieval Network)。受到近期的键值对内存网络的启发(Miller et al., 2016),该模型将一个基于注意力(attention-based)的键值对机制增加至现有的循环神经网络架构的知识库条目上。由此,无需像传统面向任务的对话系统一样特别训练置信或意图追踪,可以学习如何从知识库里以端对端的样式直接提取有用的数据。该体系不依赖数据域的特性,可通过底层知识库键值对条目的注意力来学习如何适当地将世界知识(world knowledge)并入自己的对话语句。
此外,我们制作了一个公开可用的新语料库,包含3031个对话并涵盖了车载个人辅助空间的三种不同领域类型:日程安排,天气资讯和兴趣点导航。对话是建立在知识库之上的。这使它们成为构建能够无缝地解释世界知识的对话体系结构的理想选择。语料库中对话的多领域特性也使该数据集成为建模架构的可泛化性的测试平台。
因此,我们的工作的主要贡献是两点:1) )我们引入了键值检索网络,这是一种高性能的神经任务型对话代理,它能够通过一个新的键值检索机制,顺利地从底层知识库中整合信息。不像其他只依赖于之前的对话历史的对话代理(Kannan et al., 2016; Eric and Manning, 2017),我们的体系结构能够访问和使用数据库样式的信息,同时还保留了最近神经模型的文本生成优势。由此,我们的模型在许多自动度量和人类评估的基础上,超越了基于竞争规则的系统和其他基准神经模型。2)我们在车载个人助理空间中发布了一个新的公开可用的对话语料库,我们希望这将有助于进一步研究面向任务的对话代理。
2. 键值对检索网络
尽管最近的神经对话模型通过信念和用户意图追踪器显式地为对话状态建模,我们选择依赖于已学习的神经特征来进行对话状态的隐式建模,形成一个真正的端到端可训练系统。我们的模型从编码-解码器序列体系结构开始,并进一步增强了基于注意力的检索机制,它可以有效地通过底层知识库的键值表示来推理。我们将在后面的部分中描述模型的每个组件。我们将在后面的部分中描述模型的每个组件。
2.1 编码器
在用户( u u )和系统之间()进行对话时,我们将表示对话语句表示为 {(u1,s1),(u2,s2),…,(uk,sk)} { ( u 1 , s 1 ) , ( u 2 , s 2 ) , … , ( u k , s k ) } , k k 表示对话的次数。在第 轮对话中,我们用 (u1,s1,…,si−1,ui) ( u 1 , s 1 , … , s i − 1 , u i ) 组成对话的上下文并对其进行编码。让 x1,x2,...,xm x 1 , x 2 , . . . , x m 表示这些tokens,首先使用已训练的内嵌函数 ϕemb ϕ e m b 将每个token映射到一个固定维度的向量。这些映射被输入到编码器中,通过重复使用下述递归来产生上下文有关的hidden representations h1,......,hm h 1 , . . . . . . , h m :
2.2 解码器
通过循环单元来计算解码器的隐层状态,该vanilla(本意为香草,此处应该为普通的意思?不太确定)序列对序列(sequence-to-sequence)解码器对第 i i 个系统的响应的token进行了预测。我们用 h̃ 1...h̃ i h ~ 1 . . . h ~ i 来表示解码器的隐层状态, y1,...,yn y 1 , . . . , y n 表示输出tokens(output tokens)。我们使用一个基于注意力的模型(Bahdanau et al., 2015; Luong et al., 2015a)来扩展这个解码器,在每个解码的时间步(time step) t t ,都会使用一种注意力机制(Vinyals et al., 2015)为解码器的每个隐层状态来计算一个注意力分值(attention score) ati a i t 。这种注意力可以正式用以下公式来描述:
2.3 键值对知识库检索
最近,一些面向任务的神经对话通常用以下方法来查询底层知识库和提取有关条目:1) 创建和执行格式良好的API来调用知识库,操作需要中间监督的形式训练槽追踪器(slot tracker),并且这会破坏可微性。2) 静静地留意(softly attend to,不知道怎么翻译。。。望指正)知识库,将概率分布与置信追踪器结合,作为强化学习政策(reinforcement learning policy)的状态输入。我们选择构建后一种方法,因为它可以很好地融入到序列到序列模型的端到端可训练框架中。尽管我们在一个监督学习的环境中,我们不需要明确表示置信跟踪器或对话状态。
为了存储给定对话的知识库,我们从(Miller et al., 2016)的工作中获得了灵感,它发现一种可允许机器高效读取文档的键值结构化内存。我们使用(
subject,relation,object
s
u
b
j
e
c
t
,
r
e
l
a
t
i
o
n
,
o
b
j
e
c
t
)的表示方式来存储知识库的每个条目。在我们的表示中,一个来自图1对话的知识库条目,如(event=
dinner
d
i
n
n
e
r
, time=
8pm
8
p
m
, date=
the13th
t
h
e
13
t
h
, party=
Ana
A
n
a
, agenda=“-”)将被规范化成4个单独的三元组形式(
dinner,time,8pm
d
i
n
n
e
r
,
t
i
m
e
,
8
p
m
)。每个知识库最多有230个标准化的三元组,类似新戴维森(neo-Davidsonian)或RDF式表达。
最近的文献表明,将一种复制机制加入到神经结构中可以提高各种序列对序列任务的性能。我们以如下方式建立:在每次解码时,取出解码器隐层状态,并使用每个规范化的知识库条目的键来计算一个注意力分值。一个条目的键(key)对应于主题
(meeting)
(
m
e
e
t
i
n
g
)
和关系
(time)
(
t
i
m
e
)
的词向量(word embeddings)总和。然后,注意力的分对数就成为了该知识库条目的值(value)。对于知识库的注意力,我们用规范化的表征表示替换了该值的嵌入。例如,
5pm
5
p
m
的值将被
meeting_time
m
e
e
t
i
n
g
_
t
i
m
e
这样的规范化表示所取代。在运行时,如果要解码这个规范化表示的表征,我们将通过知识库查询(lookup)将它转换成知识库条目的实际值(actual value)(在示例中为
5pm
5
p
m
)。请注意,这意味着我们正在将原始输出词汇表(original output vocabulary)扩展到
|V|+n
|
V
|
+
n
,其中
n
n
为知识库条目的单独的规范化键值表示的数目(the number of separate canonical key representation KB entries)。
特别地,让表示嵌入第
j
j
个规范化知识库条目的键值的词向量。现在,我们可以形式化基于注意力的知识库检索解码(formalize the decoding for our KB attention-based retrieval)。假设我们的知识库中有m个不同的三元组且我们处在解码的第步:
图2:键值检索网络。对于解码的每个time-step,使用cell state(元件状态)来计算一个对编码器状态的注意力(attention over the encoder states)以及与每个知识库条目的键值有关的单独注意力( a separate attention over the key of each entry in the KB)。编码器注意力用来生成一个上下文向量(context vector),其与cell state结合以获得一个标准词汇表的分布。键注意力将成为相关值的logits,同时也是argmax扩充词汇表中分离出来的单独条目。
(至此,本论文的核心理论部分已经完成,剩余的诸如数据收集和实验结果将慢慢翻译)
3. 一个多回合,多领域的对话数据集
为了多领域对话代理的进一步工作,我们在三个不同领域构建了多轮对话的语料库(corpus):日程安排,天气资讯和兴趣点导航。尽管这些域是不同的,但它们都与用户期望的高级车载个人助理的任务主题相关。
3.1 数据收集
多回合对话的数据是用Wizard-of-Oz方案来收集的(Wizard-of-Oz意思为由人替代机器,以完成数据收集)。在我们的方案中,用户有两种可能的模式:Driver(司机)和Car Assistant(汽车助理)。在Driver模式下,用户被提交了一项任务,其中列出了他们试图从Car Assistant中提取的信息,以及Driver和Car Assistant之间的对话历史。一个可能的示例任务为:You want to find what the temperature is like in San Mateo over the next two days。然后,Driver只需负责提供单行对话,在给定对话历史和任务定义的前提下,使对话可以合适地进行下去。
根据领域类型,任务通过选择3到5个slots(time, date, location, etc.)的values(5pm, Saturday, San Francisco, etc.)来随机指定。为slot指定的value是根据一个per-domain的候选集(candidate set)的均匀分布(uniform distribution)选择的。
在Car Assistant模式中,用户将得知一个来自正在进行中对话的截至当前的对话历史(dialogue history exchanged up to that point in the running dialogue)和一个仅有Car Assistant可知的私有知识库,它包含可满足Driver查询的有用信息。知识库的例子可能包含:一个事件信息日程表,附近城市的每周预报的集合(collection),或包含相关信息的附近兴趣点的集合。然后,Car Assistant负责使用这些私有信息来提供单行语句,从而进行用户导向的对话。Car Assistant还被要求根据当前对话历史的mentioned slots和value填写对话状态信息(dialogue state information)。
每个私有知识库有6到7个不同的行和5到7个属性类型。所使用的私有知识库通过以下方法来生成:为给定的属性类型统一选择一个值,其中每个属性类型都有可变数量的候选值(a variable number of candidate values)。一些知识库会故意缺少一些属性,以支持话语的多样性。
在数据收集过程中,日程安排领域的一些对话没有显式地要求使用知识库。例如,在一个像“Set a meeting reminder at 3pm”这样的任务中,我们希望激励对话要求Car Assistant执行一个任务,同时要求Driver对未指定的信息进行澄清。大约一半的日程安排对话都属于这一类。
3696

被折叠的 条评论
为什么被折叠?



