对话即数据流:对话式人工智能的新途径

2020-09-22 04:44:28

“说起来容易做起来难。”这四个词反映了对话式人工智能的前景。只要几秒钟就能问我和梅根什么时候都有空?但是要从日历上手动找出来需要更长的时间。事实上,我们用技术做的几乎每一件事都会让人感觉到通向短期目标的道路很长。在微软语义机,我们正在努力弥合这一鸿沟-建立对话式人工智能体验,在这种体验中,你可以专注于说出你想要的东西,系统会担心如何做到这一点。你应该能够在与朋友交谈时说话:自然的、上下文的和协作的。

一个真正强大的对话型人工智能需要做的不仅仅是深入理解语言。为了具有上下文、灵活性和健壮性,人工智能还必须深入理解动作-大多数目标涉及多个步骤和多个信息源。表示目标、动作和对话状态是对话式人工智能系统中的核心挑战之一。我们在计算语言学协会(TACL)会刊上发表的题为“作为数据流合成的面向任务的对话”的新论文描述了一个新的表示和建模框架,该框架将对话解释为数据流图,使关于跨越多个领域的复杂任务的对话成为可能。我们还发布了一个超过4万个对话的数据集,用数据流图和公共排行榜进行注释,以帮助人工智能社区在多轮、任务导向的对话中解决具有挑战性和现实的问题。

不同的目标。用户可能希望预订与Megan的会议。他们可能还想预约周二与梅根的会面,或者甚至在劳动节后梅根有空的第一个早上预约与她的会面。

不同的语言。询问信息可能会显示为明天的天气如何?同样的要求可能也会出现在明天外面会是什么样子,或者我徒步旅行需要一件夹克吗?

不同的背景。这句话三个怎么样?意思完全不同取决于探员刚才说的话。梅根2点很忙,你还有什么建议吗?建议改期开会。接下来是中午多云的天气预报,是关于天气的查询。在里沃利有两个人的空桌后,要求增加晚餐预订的大小。

传统的“填补”对话系统忽略了这种多样性。它们只支持一组常用的目标,除了当前目标中缺少的参数列表之外,它们没有任何上下文表示。在另一个极端,最近的“端到端”神经对话系统原则上可以自由地学习与上下文相关的任意反应,但在使用词语上的灵活性是不够的,因为对话还需要在执行的操作中具有灵活性。部署的系统对可控性和真实性的要求在非结构化系统中也是具有挑战性的。

我们的第三种方式使用深度学习来生成和使用功能强大的“数据流”表示,这些表示超越了槽填充,提供了灵活的操作和可控的语义。数据流旨在支持人类在日常对话中进行的自然、灵活、开放的对话。我们的方法基于五个关键思想:

既定的对话方法很擅长解释固定的、预先定义的任务的请求,比如开灯或设置一个名为意大利面的计时器5分钟。在这些方法中,对话系统设计者定义了一组固定的意图,每个意图都有一组固定的参数。系统使用每个用户请求所表达的意图和该意图的参数来标记每个用户请求:

但是更复杂的要求呢,比如我和梅根喝咖啡时的温度是多少?回答这个问题需要对话代理做一系列不同的事情:找出Megan是谁,在日历应用程序中与Megan一起查找事件,计算其开始时间,并使用这些时间查询天气服务。我们将自然语言请求转换为一个将所有这些调用捆绑在一起的程序,而不是要求系统构建者创建专门的weiseDuring_Event_with_Person Intent。我们将此程序表示为一个数据流图,它显式定义了对话代理计划中的步骤(节点)之间的数据依赖关系(边):

一旦神经网络预测到该程序,对话代理就执行它,根据结果回复用户,并将结果存储在数据流图中。

使用数据流表示用户意图的好处之一是,它非常自然地概括为在多轮来回通信中展开的交互。如果用户开始询问我与Megan的下一次会面时间,则对话代理最初会预测一个小图形片段:

如果用户接着问下一轮天气会怎么样,那么回答这个新问题所需的大部分工作已经完成了。这句话的意思是:“如果用户继续问下一个问题,那么回答这个新问题所需的大部分工作就已经完成了。”对话代理引用上一轮的程序片段,将其输出提供给新的API调用,然后描述结果:

此过程的结果与我们之前为单个复杂问题生成的程序完全相同!这种重用是我们的框架的一个中心特性--复杂的操作是通过组合更简单的操作来构建的,而不是定义大量的顶级行为。这种合成可以一次进行,也可以在连续扩展数据流图的多个转弯中逐步进行。

扩展图用作对话状态。它记录代理到目前为止为理解、服务和回复用户而执行的所有计算。随后的话语在这个上下文中被解释(通过深度学习),并且它们可以参考这些先前的计算和它们的结果。正如我们在论文中所展示的那样,引用和重用早期计算的显式机制提高了对话代理的机器学习的数据效率和准确性。它们还使工程师更容易推理和控制对话代理的行为。

在前面的示例中,用户使用单词THEN引用数据流图中较早的节点。你提到的其他指代表达,比如那个,她,或者你提到的第二次会议,也可以表示要求重新使用对话中前面提到的价值观或实体。

这样的引用也可以隐式发生。想象一下,你问你的设备天气会是什么样子?通常你是指不久的将来的天气。但是,如果你在提到未来的活动之后问同样的问题,你很可能会询问该活动期间和活动地点的天气情况。最终,这两种情况需要两种不同的计算。下面,左边的计算将用于上面提出的近期解释。右侧的计算将用于后一种特定于事件的解释:

弄清楚如何区分这些用法(更不用说对这个问题的其他解释了)是一个具有挑战性的机器学习问题。但是凭直觉,天气会是什么样子呢?在这两种情况下意味着相同的事情-用户想要知道与对话上下文最相关的时间和地点的天气。

在我们的方法中,这种推理是明确的:当在上下文中解释用户输入时,我们的对话代理显式地预测引用现有计算片段的程序,包括从对话开始就隐式可用的像HERE和NOW这样的片段。对于上述两个示例,如下所示:

换句话说,对话代理解释天气会是什么样子?两个对话的方式都是一样的。它使用REFER(时间)和REFER(地点)调用来预测相同的数据流图片段,但是该片段的解释会根据前面的上下文发生变化。

一个与背景互动更强烈的问题是,在公司撤退期间会发生什么?在这里,用户不仅仅是指现有的实体,而是要求对话代理计算先前问题的新答案,并更改一些细节。我们称这种转变为修正。与引用一样,修订为响应简单请求执行复杂的图形转换提供了强大的机制。以下是当用户询问我与Megan喝咖啡期间天气如何时,代理预测的修订版的示意图。那在公司休息会期间呢?

在这里,对第一个事件搜索(针对包含Megan的名为Cafee的事件)的约束被替换为一个新约束(指定一个名为Company Rise的事件)。有关更多细节,请参阅该报。

在任何复杂的对话中,意想不到的事件都有很多发生的方式。与Megan会面的请求可能会失败,因为用户的联系人列表中没有人叫Megan;因为多个人都叫Megan;因为没有空闲时间开会;甚至因为互联网断了,对话代理无法联系服务器。这些情况中的每一种都需要不同的响应,并且现有的对话系统通常使用复杂的硬编码逻辑来从错误中恢复。

我们通过从数据流图的某个节点抛出异常来处理所有这些故障。我们的对话代理通过为用户生成适当的警告或问题来响应这个不幸的“结果”。用户可以自由响应,也许可以通过纠正问题;例如,我的意思是,在此上下文中,Megan Bowen将被解释为改进原始请求的修订。此方法允许系统和用户在错误出现时进行处理-灵活、上下文、模块化和协作。

要成为一个有效的队友,对话型人工智能系统需要能够生成语言,而不仅仅是解释它。大多数现有的对话方法要么是硬代码生成规则(导致听起来像机器人的输出不会随着不同的上下文而改变),要么是非结构化的神经语言模型(有时不能说出真相!)。在我们的方法中,语言生成被建模为一个神经引导的组合程序转换过程,在这个过程中,Agent轮流扩展数据流图。代理可以谈论图表中显示的任何内容,而不仅仅是它计算的最后结果。它甚至可以将新的计算和结果添加到图表中,用户可以在随后的轮次中自由参考:

我们相信,这种方法是迈向新一代自动对话代理的第一步,这种对话代理可以像人们彼此交互的方式那样与人互动。然而,解决这个问题需要整个社会的共同努力。为了促进对基于数据流的对话代理的开放研究,我们将发布迄今为止最大、最复杂的面向任务的对话数据集:一个名为SMCalFlow的新数据集,其中包含41,517个用数据流程序标注的对话。这个数据集来自人类之间关于日历、天气、人物和地点的开放式对话。与现有的对话数据集不同,我们的对话收集不是基于预先指定的脚本,参与者在他们可以要求什么以及他们应该如何完成任务方面没有受到限制。因此,SMCalFlow在性质上不同于现有的对话数据集,其特点是对代理能力、多轮错误恢复和复杂目标进行了明确的讨论。

数据集、代码和排行榜可以在我们的GitHub页面上找到。我们期待着看到自然语言处理社区如何利用这一新资源。

在语义机器方面,我们正在继续突破对话人工智能的界限。来和我们一起工作吧!