论文略读 | Dialog-to-Action: Conversational Question Answering Over a Large-Scale Knowledge Base

来源: 2018 NIPS–微软亚洲研究院
参考:https://www.msra.cn/zh-cn/news/features/nips-2018-papers-from-msra

1. 文章概述:

对话中的多轮问答和语义分析是NLP领域两个核心问题,对语音助手、聊天机器人和搜索引擎都至关重要。在本文中,我们提出了基于知识图谱的对话式语义分析模型。(有点没想通复制了之前的KB实体之后呢?就是复制完了有了固定的实体就可以直接去查数据库了更快?)

模型具有以下优势:

  • 该模型可以有效地处理多轮问答中的上下文指代和省略现象
  • 为了解决从外来词中有效地进行语义分析学习。通常采用搜索合法的逻辑形式进行在线学习,但这需要在大规模知识库上重复执行,非常耗时。因此本文将逻辑形式的生成视为一系列动作的预测,每个动作对应于简单灵活语法中的推导规则,以此来合理利用对话历史理解当前问题的语义,并推断出其对应的逻辑表达。具体来说,输入用户当前的问题及对话历史,该模型会以包含多种逻辑操作的语法为基础(如查找,比较,计数,复制历史逻辑表达)等语法为基础,使用自顶向下的方式预测出当前问题的逻辑表达。

解决方法:

  • 为了应对对话中的省略现象,我们引入了一个对话框内存管理组件,该组件在为当前对话生成逻辑表单时利用历史实体、谓词和操作子序列。
  • 为了避免训练期间在大规模知识库上重复执行的耗时情况,我们提前进行广度优先搜索算法,以获得能够产生正确答案的话语对及其动作序列,通过最大化产生预期动作序列的可能性来学习该模型。

结果:
在包含20万轮对话的CSQA数据集上进行试验,使用QA对作为监督学习信息训练模型,结果表明该模型的精度显著优于对比基线算法,并且可以有效地利用历史问题的语义解析结果推断当前问题的逻辑表达。
实验证明该方法大大优于基于内存网络的编码器-解码器模型。

论文略读 | Dialog-to-Action: Conversational Question Answering Over a Large-Scale Knowledge Base
上图展示了提出的问题,即省略词现象,以及大规模知识库多轮搜索训练。

目标是:解决基于大规模开放领域知识库的对话问答。本文通过语义解析的方式解决问题,首先将问题映射到可执行的逻辑形式,然后再KB上执行生成的逻辑形式来产生答案。我们希望在外来词上学习语义解析器,对于语句没有带注释的逻辑形式的解释。

2. 问题陈述及Grammar

定义了一系列的action,每个action由三个部分组成:

  • 语义类别
  • 可以省略的功能符号
  • 参数列表
    论文略读 | Dialog-to-Action: Conversational Question Answering Over a Large-Scale Knowledge Base

参数可以是语义类别,常量或者动作子序列。以A5为例,它包含一个语义类别(num),一个function symbol(count),还有唯一的一个参数(set,是一个语义类别)。

我们添加了A16-A18来实例化实体e,预测r,和数量num。

添加A19-A21用于从对话记忆中复制先前预测的动作序列的子序列。

逻辑形式的推导从语义类别start开始。之后模型通过应用合法动作以逻辑形式递归地重写最左边的非终结(即语义类别),直到不存在非终结符时解析过程终止。

3. Dialog-to-Action

基于Seq2Seq,模型将对话历史中的问题及其上下文作为输入并生成动作序列。通过了一个语法引导的解码器来控制动作序列的生成,并通过一个对话memory管理组件来利用历史上下文。

提出的模型结构如下:
论文略读 | Dialog-to-Action: Conversational Question Answering Over a Large-Scale Knowledge Base

3.1 编码

用了一个双向GRU,用之前的对话历史作为输入,分别得到前向和后向的隐藏层,然后将它们连接在一起作为源序列中每个词的最终表示。源序列表示论文略读 | Dialog-to-Action: Conversational Question Answering Over a Large-Scale Knowledge Base
被用作解码器的初始状态表示。

3.2 Grammar-guided Decoder

用了一个带注意力机制的GRU作为解码器,它用顺序方式生成了action 序列。表示为 a1; :::; an,即decoder将对话转换成一个动作序列,类似于一棵生成树的形式。在每一步我们用一个注意力机制来获取上下文向量ct。解码器隐藏层计算如下:
论文略读 | Dialog-to-Action: Conversational Question Answering Over a Large-Scale Knowledge Base
其中st-1是上一时刻的隐藏状态,vt-1是上一时刻预测出的动作的嵌入,ct是上下文向量。如果上一层预测出的动作是一个实例化动作,则vt-1是被选择的常量的表示。然后结合输入和输出隐含层来得到最终的隐含层状态。

为了生成有效的逻辑形式,我们采样了一个动作约束语法来过滤非法行为,即:如果一个动作的左侧语义类别和到目前为止解析的部分逻辑形式中最左边的非终结符相同,则该动作是合法的。定义时间t上的合法动作为At
论文略读 | Dialog-to-Action: Conversational Question Answering Over a Large-Scale Knowledge Base
该集合上的概率分布计算如下:
论文略读 | Dialog-to-Action: Conversational Question Answering Over a Large-Scale Knowledge Base

3.3 Dialog Memory

对话历史对于生成之后的对话的逻辑形式来说非常重要,因此我们使用了一个对话memory来维护对话历史信息。如图2所示,对话存储器包含三种类型的信息,包括实体(entities),谓词(predicates)和动作子序列(action subsequences)。

  • Entity:考虑两种实体,分别来自于前一句的问题和前一句的答案。
  • predicates:记录之前句子中的位于,防止出现之前位于的省略。比如,前一句问了清朝是什么时候建立的呢?,后一句文那么明朝呢?,就需要记录下来前一句中的谓词,即建立的年份
  • action subsequences:可以简单地分为实例化或者不实例化。实际上,具有实例化动作的动作子序列代表完整或者部分逻辑形式。例如,图2的对话存储器中的第一个动作子序列与逻辑形式find(UnitedStates; isP residentOf)相同,这意味着美国的总统。当前问题“他从哪里毕业?”实体“他”的省略号实际上指的是美国总统。因此,模型执行一个动作(即A19)来复制第一个动作子序列。没有实例化的动作子序列传达逻辑形式的软模式。例如,目前的问题“中国怎么样?”与上一个问题具有相同的软模式,但前一个问题中提到的国家应该被“中国”取代。

3.4 Incorporating Dialog Memory(合并对话记忆)

本章提出了将对话记忆中的内容复制为解码过程的策略,A16-A21。

  • 实例化:当解码器实例化实体,谓词或数字时,我们允许实例化操作(即A16-A18)访问对话记忆。以实体为例,为每个实体分配以下三个标签之一:上一个问题,上一个答案或当前问题。在t时刻实例化实体的概率计算如下,其中pg(.)是标签gt被选中的概率,pe(.)是实体上标签的概率分布。
    论文略读 | Dialog-to-Action: Conversational Question Answering Over a Large-Scale Knowledge Base
    论文略读 | Dialog-to-Action: Conversational Question Answering Over a Large-Scale Knowledge Base
    谓词有两个标签:之前问题或当前问题
    数量有一个标签:当前问题
  • Replication:模型通过选择A19-A21来学习复制先前操作子序列。有两种方式来复制实例化或非实例化的动作子序列。为了获得前一个问题的实例化动作子序列,我们将先前的整个逻辑形式解析为生成树,并对所有子树进行枚举,其中每个子树对应于实例化的动作子序列。子序列被复制的概率用公式4来计算:
    论文略读 | Dialog-to-Action: Conversational Question Answering Over a Large-Scale Knowledge Base
    复制subt的概率:
    论文略读 | Dialog-to-Action: Conversational Question Answering Over a Large-Scale Knowledge Base