论文概要
提出一个结构感知的神经架构,将语义解析过程分解为如下两个步骤:给定一个输入语句,1)首先生成它含义的粗略草图(a rough sketch of its meaning),其中低级信息被掩盖(如变量名和参数)。2)然后考虑输入本身和草图来填充丢失的细节。 RNN 在多种 NLP 任务中的成功应用对 seq2seq 的语义解析产生了强大的冲击力,如Jia and Liang, 2016; Dong and Lapata, 2016; Ling et al., 2016。 我们认为,这种方法至少有三个优点。首先,分解步骤将高级语义信息与低级语义信息分离开来,使译码器能够在不同的粒度级别对语义进行建模。其次,模型可以明确地为具有相同草图(即基本含义)的示例共享粗糙结构的知识,即使它们的实际含义表示不同(例如,由于不同的细节)。第三,在生成草图后,解码器知道语句的基本含义是什么,模型可以将其作为全局上下文来改进对最终细节的预测。 使用如下数据集: 1. GEO 2. ATIS 3. DJANGO 4. WikiSQL
问题阐释
定义 \(x = x_1 \dots x_{|x|}\) 为自然语句,\(y = y_1 \dots y_{|y|}\)为意义表示,\(a = a_1 \dots a_{|a|}\)为 sketch 表示。注意 sketch 的定义为:一个中间变量,如将自然语句转化为 Logical Form,Source Code,SQL,noSQL,SPARQL等表示,这些表示都算是一个 sketch。下图论文架构:
Sketch Generation
encoder 将自然语句编码为向量,decoder 去计算 \(p(a|x)\) 从而通过encoding 向量 生成 sketch a。具体来讲,Input Decoder 将字转为词向量,并使用 Bi-LSTM 训练。Coarse Meaning Decoder 生成 sketch a,也使用 LSTM 并且加上 attention 机制。
Meaning Representation Generation
Meaning representation 由输入 x 以及生成的 sketch a 预测产生,具体就是计算 \(p(y|x,a)\)。Sketch Encoder 与 Input Decoder 类似,使用 Bi-LSTM 并将 sketch a 映射为词向量。Fine Meaning Decoder 与 Coarse Meaning Decoder 类似。
总结
总的来说就是先用自然语句生成 coarse sketch,然后再用 coarse sketch 生成 fine sketch。一共使用了两个 encoder-deocder 模型,但是将这两个模型连起来用。
三个语义分析任务
为了证明我们的框架适用于跨域和意义表示,我们为三个任务开发了模型,即将自然语言解析为逻辑形式、Python 源代码和 SQL 查询。对于每一个任务,我们都描述了使用的数据集以及 sketch 提取的提取步骤。