
test
模型结构
- sequence encoder
- context enhanced schema encoder
- output layer
1. sequence encoder
使用了一个类Bert的模型,有以下改变:
- 在每个表结构中添加一个空列[EMPTY],这个空列会在
节被清除
- 用type embedding替换segment embedding,这里会从四个类学习embedding:
- question
- categorial列
- numerical 列
- special empty 列
- 使用MT-DNN作为初始化encoder(与Bert结构类似,但是是由多个GLUE任务训练得到的,在下游NLP任务中展现了不错的表示性能)
将Bert的[CLS]重命名为[CTX](目的:注重当前捕获到的上下文信息,而非为了下游任务作表示)
为了实现以上的变化,对比SQLova
中的NL2SQL layer,我们的方法主要是用了一个足够简单但是有效的layer
2. context enhanced schema encoder
令表示Encoder的输出,每个均是d维
- 每个question token被编为
-
表示第
列的第
个token
故 这个Encoder的目的是:对每一列学习一个新的表示
,通过使用
来捕捉全局上下文信息来增强原始编码器的输出。
因此,可以表示为:
<div align="center">
······(1)
</div>
其中:
-
表示列
中token数
-
表示第
列的第
个token捕捉全局上下文信息的好坏,
,
3. output layer
output layer结合了SQL程序以及:
- sequence encoder 输出,
- context enhanced schema encoder 输出,
这个output layer类似于Xu et al.(2017)
和Hwang et al.(2019)
,该任务被划分为6个子任务,每一部分均是最终SQL pragram的一部分。
首先介绍一个使用基于sub-network调整schema representation
的任务,特别是:
<center> ······(2) </center>
与公式(1)不同的是,对于每个子任务这个计算式分别进行的,以便于schema representation更好的对齐每个子任务应重点关注的自然语言query的特定部分。
(注:这个在另一篇论文中提到,虽然
已经通过token权重加强了上下文信息,但是
对query也有不错的~)
任务S-COL
预测SELECT
列,那么给SELECT选择的列即为:
<div align="center">
</div>
其中S-COL仅依赖于
任务S-AGG
对列预测Aggregator
,为了增强aggregator依赖被选择列的类别(例如MIN
不会用于string类型的列),我们明确地利用了type embedding
,则选择的AGG可以表示为:
<div align="center">
····(3)
</div>
其中,。
与其他子任务不同的是,这里我们没有使用而是使用了
,因为我们使用了一个类似于公式(2)的方法来合并列的类别,
type embedding
是由sequence encoder单独学来的。
<div align="center">
以下四个任务是围绕WHERE同时得到的
</div>
任务W-NUM
W-NUM使用来计算WHERE的条数,被建模为四个可能标签的分类任务,每个标签代表最终SQL语句中的1~4个where子句。不过这没法预测where子句为空的情况,这种情况会通过KL散度交给W-COL来完成。
任务W-COL
<div align="center">
</div>
(注:是一个分布,基于W-NUM,得到where选择的top score列)
任务W-OP
W-OP对于给定的where列选择合适的操作符,即:
<div align="center">
</div>
这个操作符也依赖于列的类别(text/real),能够类似于公式(3)的S-AGG进行建模。
任务W-VAL
W-VAL是从query中预测where语句的子串,因此转化为预测子串在query的起始和终止位置,即:
<div align="center">
</div>
其中。
网友评论