SQLNet阅读笔记
该论文首次提出基于草图(sketch)的生成模型。基于草图的方法要完成的测序任务属于固定模式,不需要预测 SQL 语句中的所有内容,即只预测关键内容。(下图 a 中的标有“$”的部分)
为了解决Seq2SQL使用强化学习效果不明显和WHERE子句条件“顺序问题”的问题,SQLNet将SQL语句分成了SELECT和WHERE两个部分,每个部分设置了几个槽位,只需向槽位中填入相应的符号即可。
SELECT子句部分与Seq2SQL类似,不同地方在于WHERE子句,它使用了一种sequence-to-set(由序列生成集合)机制,用于选取目标SQL语句中的WHERE子句可能出现的列。
基于列注意的序列到集合预测
Sequence-to-set预测
预测哪些列名出现在感兴趣的子集中,而不是生成一系列列名。
$E_{col}$和$E_Q$是分别为列名col和问句Q的在双向LSTM中的隐藏状态,$u_c$和$u_q$是两个可训练列向量。
Column attention
由于$E_Q$仅计算问句的隐藏状态,因此无法记住在预测特定列名时有用的特定信息。如“number”与预测WHERE子句中的列“No.”更相关。当预测某一特定列时,embedding应该反映自然语言问题中最相关的信息。
$w$是注意力权重,$H_Q$是问句Q经过LSTM的隐藏状态。
使用$E_{Q|col}$代替$E_Q$,得到了在WHERE子句中预测列名的最终模型:
SQLNet MODEL
WHERE子句预测
列槽位。首先预测WHERE子句中的条件个数k,然后选取概率最高的前k个列。
SQLNet选择使$P_{col}(K|Q)$最大化的列数K。
OP槽位。对于WHERE子句中的每一列,预测OP操作符是一个三分类问题:{=,>,<}。SQLNet在OP预测中使用列注意来捕获依赖关系。
VALUE槽位。SQLNet使用一个sequence-to-sequence结构来生成子字符串。编码器使用Bi-LSTM。解码器使用具有列注意机制的指针网络计算下一个token的分布。h是之前生成的序列的隐藏状态。自然语言问题中每个token的LSTM输出为$H_Q^i$
SELECT子句预测
SELECT子句有一个聚合操作符和一个列名。SELECT子句中对列名的预测与WHERE子句类似。主要的区别是,对于select子句,我们只需要从所有列中选择一列。
对于聚合操作符,假设SELECT子句预测的列名是col,我们可以简单地计算:
参考文献
SQLNet-GENERATING STRUCTURED QUERIES FROM NATURAL LANGUAGE WITHOUT REINFORCEMENT LEARNING