1. 作者简介
Pengcheng He, Yi Mao, Kaushik Chakrabarti, Weizhu Chen
Microsoft Dynamics 365 AI
2. 文献类型
#
3. 主要工作
- 论文提出了一种新的网络体系结构x-sql;
- x-sql提出利用bert风格的预训练模型(MT-DNN)的上下文输出来增强结构模式表示,并结合类型信息来学习用于下游任务的新模式表示;
- 论文中模型包含三层结构,分别是SequenceEncoder、ContextEnhancedSchemaEncoder、OutputLayer
4. 方法描述
- 第一层结构Sequence Encoder,在该结构中,我们为每个表增加一个empty列,然后段编码替换为类型编码,学习四个类型:question,categorial column,numerical column和empty column,使用MT-DNN初始化编码器。输出为:h[CTX]; h_q1; · · · ; h_qn; h[SEP]; hC11; · · · ; h[SEP]; hC21; · · · h[SEP]; · · · ; h_[EMPTY]; h[SEP]。其中问题中每一个词编码为h_qi,然后h_cij表示列i编码第j个标记,因为每个列名可能包含多个标记。
- 第二层结构是Context Enhanced Schema Encoder结构图如下:

该结构用于增强在equence Encoder(序列编码器)得到的H[CTX],虽然在序列编码器的输出中已经捕获了某种程度的上下文,但这种影响是有限的,因为自我关注往往只关注_某些区域。另一方面,[ctx]中捕获的全局上下文信息具有足够的多样性,因此用于补充序列编码器中的模式表示。通过这种方式可以捕获到哪一个查询词与哪一列最相关,从而得到增强的语义表示HCi它的计算过程如下图所示:

第三层结构是Output Layer,它的核心是完成sql语句的生成,它将SQL语句分为六个子任务,对于每个子任务首先使用下面的子网络结构得到使用融合hci和hctx的rCi,它的模型图如下所示:
需要注意的是每个子任务都具有一个这样的子网络,计算是针对每个子任务单独进行的,以便更好地将模式表示与每个子任务应该_关注_的自然语言问题的特定部分对齐。该子结构的计算机构如下所示:<br />
接下来为6个子任务
a. 第一个任务S-COL,这个任务表示SQL语句查询表的哪一列,我们使用前面得到的rci来完成这个子任务,使用softmax来找到最可能的列,计算公式如下所示:

b. 第二个子任务S-AGG,这个任务表示对第一个子任务使用什么函数操作,比如min、max,这里就需要注意我们前面提到字符串函数不可以应用min、max的问题,为了解决这个问题,我么们需要显式的将任务一得到的列类型Ectype嵌入到模型中,与其他子任务不同,我们在这里使用hci而不是rci,它的计算公式如下所示:
c. 其余4个任务w-num、w-col、w-op和w-val一起决定了SQL语句的where部分,其中w-num决定了对表的几列进行约束,w-col表示对哪几列进行约束,w-op表示对这几列的操作符,比如>、<、=等等,w-val表示对这几列进行约束的值。
d. 首先这w-col、w-op和w-val这三个任务是依赖w-num的,因为w-num决定了对几列进行约束,这样它们三个只需要取softmax最大的那几个就可以了。然后w-col和w-op也进行依赖,这个和任务二w-agg一样,字符串类型的列是不可以使用<或者>的,但是本论文实验过程中,这里并没有多少改善,所以我们这里可以不进行约束。

e. 最后一个任务就是w-val,这个值是多少,只能来源于query的语句,所以这里我们预测value值在query语句中的起始位置,计算公式如下:
5. 实验和数据集
数据集:wikiSQL
实验结果:
6. 存在问题
这是因为这个数据集只涉及到单表查询,想对来说语法比较简单,所以我们使用六个子任务就可以完成,但是如果有的数据集设计到多表联合查询,那么六个子任务是远远不够的,那么此时增加更多的子任务是否可以解决多表查询的任务,会成为负担。
