该论文首次提出基于草图(sketch)的生成模型。基于草图的方法要完成的测序任务属于固定模式,不需要预测 SQL 语句中的所有内容,即只预测关键内容。(下图 a 中的标有“$”的部分)
image-20211118094519481

为了解决Seq2SQL使用强化学习效果不明显和WHERE子句条件“顺序问题”的问题,SQLNet将SQL语句分成了SELECT和WHERE两个部分,每个部分设置了几个槽位,只需向槽位中填入相应的符号即可。

SELECT子句部分与Seq2SQL类似,不同地方在于WHERE子句,它使用了一种sequence-to-set(由序列生成集合)机制,用于选取目标SQL语句中的WHERE子句可能出现的列。

基于列注意的序列到集合预测

Sequence-to-set预测

预测哪些列名出现在感兴趣的子集中,而不是生成一系列列名。image-20211118095355629

$E_{col}$和$E_Q$是分别为列名col和问句Q的在双向LSTM中的隐藏状态,$u_c$和$u_q$是两个可训练列向量。

Column attention

由于$E_Q$仅计算问句的隐藏状态,因此无法记住在预测特定列名时有用的特定信息。如“number”与预测WHERE子句中的列“No.”更相关。当预测某一特定列时,embedding应该反映自然语言问题中最相关的信息。

image-20211118101121271

image-20211202223104789

$w$是注意力权重,$H_Q$是问句Q经过LSTM的隐藏状态。

使用$E_{Q|col}$代替$E_Q$,得到了在WHERE子句中预测列名的最终模型:

image-20211118101943941

SQLNet MODEL

WHERE子句预测

列槽位。首先预测WHERE子句中的条件个数k,然后选取概率最高的前k个列。

image-20211118115922455

SQLNet选择使$P_{col}(K|Q)$最大化的列数K。

OP槽位。对于WHERE子句中的每一列,预测OP操作符是一个三分类问题:{=,>,<}。SQLNet在OP预测中使用列注意来捕获依赖关系。

image-20211118162414734

VALUE槽位。SQLNet使用一个sequence-to-sequence结构来生成子字符串。编码器使用Bi-LSTM。解码器使用具有列注意机制的指针网络计算下一个token的分布。h是之前生成的序列的隐藏状态。自然语言问题中每个token的LSTM输出为$H_Q^i$

image-20211118163318756

SELECT子句预测

SELECT子句有一个聚合操作符和一个列名。SELECT子句中对列名的预测与WHERE子句类似。主要的区别是,对于select子句,我们只需要从所有列中选择一列。

image-20211118164419495

对于聚合操作符,假设SELECT子句预测的列名是col,我们可以简单地计算:

image-20211118164608205

参考文献

SQLNet-GENERATING STRUCTURED QUERIES FROM NATURAL LANGUAGE WITHOUT REINFORCEMENT LEARNING