对话式AI新方法:对话即数据流( 二 )


对话式AI新方法:对话即数据流文章插图
一旦神经网络预测到这个程序 , 对话代理就会执行它 , 根据结果对用户进行回复 , 并将结果存储在数据流图中 。
2. 面向任务的对话是交互式编程使用数据流表示用户意图的一个好处是 , 它可以非常自然地概括为在多次来回通信中展开的交互 。 如果用户开始的时候问“我下一次什么时候和 Megan 见面?” , 则对话代理首先预测一个小的图片段:
对话式AI新方法:对话即数据流文章插图
如果用户在接下来的一轮对话中继续问“那时的天气怎么样?” , 回答这个新问题所需的大部分工作已经完成了 。 对话代理返回到上一轮的程序片段 , 将其输出输入到新的 API 调用中 , 然后描述结果:
对话式AI新方法:对话即数据流文章插图
这个过程的结果与我们之前为一个复杂问题生成的程序完全相同!这种重用是我们这个框架的核心特性——复杂动作是通过组合更简单的动作来构建的 , 而不是定义一堆顶级行为 。 这种组合可以一次完成 , 也可以在多次循环中通过依次扩展数据流图逐步完成 。
3. 语义依赖语境【对话式AI新方法:对话即数据流】扩展后的图作为对话状态 。 它记录到目前为止代理为理解、服务和响应用户所执行的所有计算 。 随后的表达都是在这个上下文中被解释(通过深度学习) , 它们可以引用这些早先的计算和结果 。 正如我们在论文中所展示的 , 显式引用和重用早先计算的机制提高了对话代理机器学习的数据效率和准确性 。 它们还使工程师更容易推理和控制对话代理的行为 。
在前面的示例中 , 用户使用单词 then引用数据流图中较早的节点 。 其他指称表达 , 如that、her或the second meeting you mentioned , 也可以表示重用对话中之前提到的值或实体的请求 。
这种引用也可以隐式地发生 。 想象一下 , 问你的设备“天气怎么样?” , 通常你指的是近期的天气 。 但如果你在提及未来的一项活动后问同样的问题 , 你很可能是在询问活动期间活动地点的天气 。 最终 , 这两种情况需要两种不同的计算方法 。 如下所示 , 左边的计算将用于解释近期的情况 , 右边的计算用于解释特定于事件的情况:
对话式AI新方法:对话即数据流文章插图
弄清楚如何区分这些用法(更不用说对这个问题的其他解释)是一个具有挑战性的机器学习问题 。 但凭直觉 , 在这两种情况下 , “天气怎么样?”的意思是相同的——用户想知道与会话上下文最相关的时间和地点的天气 。
在我们的方法中 , 这种推理是显式的:当在上下文中解释用户输入时 , 我们的对话代理就显式地预测了引用现有计算片段的程序 , 包括从对话开始就隐式可用的片段 , 比如here和now 。 对于上面的两个例子 , 会是下面这个样子:
对话式AI新方法:对话即数据流文章插图
换句话说 , 在这两段对话中 , 对话代理用同样的方式解释“天气怎么样?”这个问题 。 它预测出了相同的数据流图片段 , 调用refer(Time)和refer(Place) , 但是 , 对这个片段的解释会根据前面的上下文发生变化 。
“公司休假期间怎么样?”这个问题与上下文的关系更紧密 。 这里 , 用户不只是引用一个现有的实体 , 而是要求对话代理为之前的问题计算出一个新的答案 , 其中一些细节已经变了 。 我们称这种转变为修正(revision) 。 与引用一样 , 修正提供了一种强大的机制 , 用于执行复杂的图转换 , 以响应简单的请求 。 下面这个示意图说明了代理预测的修正 , 当用户问完“我和 Megan 喝咖啡时天气怎么样?”之后又问“公司休假期间怎么样?”