Learning to Answer Complex Questions over Knowledge Bases with Query Composition
这是一篇密歇根安娜堡发表在CIKM上的文章,主题为KBQA,依然是SP-based。
Overview
这篇文章处理的是复杂问题,主题方法还是通过SP生成query graph,然后使用神经网络的方法进行语义匹配找到最佳的查询图,最后在KB中执行。但是本文的最大创新点在于:作者假设complex question可以被分解为多个simple question。其实这个假设是很合理的,之前的几篇文章曾经总结过复杂问题的主要特点,无外乎就是entity、relation、constraint变多了,需要多跳推理,这也会使得每个问题的search space呈指数级增长。因此本文在所做的就是把多跳推理转化为多个单跳推理,这样一来,search space能大大减小,并且query graph的生成也变得简单。于是,本文的主要问题就转化为了怎么找partial question和怎么根据partial question得到原问题的答案(或者说怎么对partial questions进行composition操作)。
本文的contribution如下:
- 设计出了TextRay,一个end-to-end的KBQA系统,可以将问题翻译为可在KB中执行的query
- 提出了decomposition-join-execute的方法来通过partial questions构建complex query
- 使用了神经网络的semantic matching模型对候选的partial question进行筛选
Approach
首先来看一下整个系统的结构图
总的概括一下,这个系统有两大核心组件:
- Query Composition:给定一个问题 Q Q Q,我们希望得到对应的query graph G G G,那么本文的做法是根据computation plan生成一系列的partial query { G i } i = 1 L \{G_{i}\}_{i=1}^{L} {Gi}i=1L,我们后面会说什么是computation plan,这里可以暂时理解为partial query的执行步骤。而在每一步,我们都会生成top-k的candidate,因此表示为 G i ( k ) G_{i}^{(k)} Gi(k)。然后最优的 M M M个会被执行得到相应答案,这些答案会被用来生成第 i + 1 i+1 i+1步的partial query。
- Semantic Matching:这一部分就是使用神经网络去求 S s e m ( Q , G i ( k ) ) S_{sem}(Q,G^{(k)}_{i}) Ssem(Q,Gi(k)),得到每一步的最优的candidate。
Query Composition
首先来看之前留下的概念:computation plan,包含两个操作: s i m Q A simQA simQA和 j o i n join join。 s i m Q A simQA simQA就是生成子问题,而 j o i n join join可以理解为一个条件,代表两个子问题之间互相独立。对于每个问题 Q Q Q,作者使用argumented pointer network来生成computation plan z = z 1 z 2 … z n z\ =\ z_{1}z_{2}\dots z_{n} z = z1z2…zn, z i ∈ { s i m Q A , j o i n } z_{i} \in \{simQA,\ join\} zi∈{simQA, join}。这样一来computation plan其实有两种结构
一种是(a)这样的并列式,另一种就是(b)这样的递进式。
Partial Query Generation
定义两个集合:
- 状态集合 S S S: { ϕ , S e , S r , S c , S t } \{\phi,\ S_{e},\ S_{r},\ S_{c},\ S_{t}\} {ϕ, Se, Sr, Sc, St},分别代表空问题、单个实体、单条关系路径、单个限制、终止状态。当达到终止状态 S t S_{t} St,模型就会去查询computation plan来决定如何生成下一步的 G i + 1 G_{i+1} Gi+1。
- 指令集和 A A A: { A e , A r , A c , A t } \{A_{e},\ A_{r},\ A_{c},\ A_{t}\} {Ae, Ar, Ac, At},分别代表找出seed entity(也就是topic entity)、添加一条关系路径、调价一条限制、终止并转移到终止状态。
至于 A e 、 A r 、 A c A_{e}、A_{r}、A_{c} Ae、Ar、Ac具体怎么操作就不赘述了。而 A t A_{t} At是终止操作,达到 S t S_{t} St之后回去查询computation plan,这事就有两种情况:
-
如果是join,那么代表 G i + 1 G_{i+1} Gi+1不依赖于 G i + 1 G_{i+1} Gi+1的答案,可以直接进行下一步的生成
-
如果是simQA,那么代表 G i + 1 G_{i+1} Gi+1需要 G i G_{i} Gi的答案,这时就要先执行 G i G_{i} Gi得到答案,把答案加入 G i + 1 G_{i+1} Gi+1的候选实体中。
Query Composition and Execution
作者管每一步通过beam search得到的候选 G i ( k ) G_{i}^{(k)} Gi(k)叫derivations,得到derivations之后作者训练了一个log-linear model来对这些derivations打分,选出最好的那一个作为当前这一步的partial query。
Semantic Matching Model
本文的semantic matching model和《Knowledge Base Question Answering via Encoding of Complex Query Graphs》这篇文章的基本一样,就是在question encoding的地方加了一个attention,其他没什么区别。
这里做的任务是判断一个partial query是不是争正确的,因此可以看作二分类,损失函数就是交叉熵
但是这样就有一个问题,没有标签。如果要人工再去构建一个数据集肯定是不行的,因此作者用了implict supervision的方法。
Experiment
这篇文章把之前那篇CompQA在CompQWeb数据集上的表现亮出来以后确实让我很惊讶,这样看来那篇文章的方法应该有很严重的过拟合。