SQLNet是一种将自然语言问句转化为SQL的深度学习模型,它应用在wiki数据集上,能够实现select(可以加聚合函数),where功能,其中where预测的好坏决定了整个模型的好坏。如:
在SQLNet之前人们主要用seq2seq+attention网络进行NL2SQL任务解析,但seq2seq存在一个问题:即seq2seq对序列的前后顺序要求极为严格,但SQL语句对顺序要求没那么严格,例如:
上述两个SQL语句的执行结果相同,但seq2seq模型认为这是两个SQL语句。
SQLNet针对上述问题提出三个创新点:
1 seq2set seq即指问句序列与表头信息,set指的是预测出的select列名集合、聚合函数、条件约束等
2 网络结构:
SQLNet将任务解析为select和where两部分,其中聚合函数的预测依赖于select columns,where字句中op与value依赖与where columns。
3 列注意机制
该机制主要是为了提高where 字句中columns的预测准确率,
该公式用来预测该列是否属于where字句中的columns,其中u分别代表网络中模型的参数,E代表模型对col和Q进行编码。从该公式可以看出,select字句中的columns与where字句中的columns的权重相同,该公式并不能将两者区分开来。
当计算出上述p值后,即该列属于where字句columns的概率。该模型并不是设置阈值取高于阈值作为where colmns,而是再设置一个任务来预测包含的条件个数k,然后取p值的最高的前k作为where columns。
预测生成where columns后,op的预测即为一个分类问题,从[>,<,=]集合中取一个,value的预测变为了一个预测问句字串的问题,即序列标注问题。