简介
SQLNet模型是紧随WIkiSQL数据集之后的一个比较知名的Baseline。由于WikiSQL数据集中的SQL比较简单,如下图所示为一个WIkiSQL中的示例,因而SQLNet将预测一个SQL语句转换为预测构成SQL语句的六部分任务分别解决。
如下图所示,SQLNet将WikiSQL中的SQL语句分为以下几个部分:包括SELECT后的聚合符、使用的column、WHERE子句后的column、操作符OP以及VALUE等。
结构
SQLNet使用slot filling的思想,引入了一个sketch(即上图所示的模板),申明需要预测的所有slot。
在SQLNet中,一共有以下六个模块需要预测:
- SELECT_COL(主句中填哪一个列名)
- AGG(主句中使用哪一个聚合函数)
- COND(WHERE子句的条件数量)
- COND_COL(某个WHERE子句的条件为哪个column)
- OP(某个WHERE子句的条件使用哪个运算符,如><=)
- COND_VAL(某个WHERE子句的条件值)
技巧
SQLNet中有两个重要的技巧:seq2set和column attention。其简要概况如下:
Seq2set:WHERE语句会包含有不同条件,多是并列关系,顺序不影响结果,问题转换为“预测WHERE语句中应该包含哪些columns Column attention:对于特定column的预测,Question中不同部分起到的作用是不一样的,引入Attention机制来表示这种关联关系。即使用Question对每个column做一个attention