Text-to-SQL
1 Single table(WikiSQL)
1.1 Encode
1.1.1 NL和DB的交互(对齐)
-
预训练的方法
-
STRUG:https://blog.youkuaiyun.com/qq_42341984/article/details/115615653
-
TaBert:学习自然语言描述和数据库的(半)结构化信息的联合表示 https://www.sohu.com/a/413894298_657157
-
GRAPPA:ICLR 2021
在文本数据和表数据的联合表示中学习组合归纳偏见。
数据扩增:通过同步上下文无关语法(SCFG)在高质量的表上构造合成的Question-SQL对。
预训练:在合成数据上对模型进行预训练,将语义分析中常见的重要结构特性注入预训练的语言模型中。
-
两个预训练目标:
-
掩模语言建模(MLM): conduct masking for both natural language sentence and table headers
-
SQL语义预测(SSP):添加一个辅助任务来训练列表示。即给定一个自然语言语句和表头,预测SQL查询中是否出现一列,以及触发什么操作。然后将所有SQL序列标签转换为每个列的操作分类标签。例如,在图1中,列位置的操作分类标签是SELECT和GROUP BY HAVING。对于出现在嵌套查询中的列,我们在每个操作之前附加相应的嵌套关键字。例如,因为列nation在INTERSECT嵌套子查询中,所以它的标签是INTERSECT SELECT和INTERSECT GROUP BY。对于每个额外的表名,我们只预测它是否被选中,以便在FROM子句中构造可能的连接。在我们的实验中,总共有254个可供操作的类。
-
-
-
-
模糊匹配的方法
代表工作:BRIDGE
https://blog.youkuaiyun.com/qq_42341984/article/details/113059271
-
Schema Linking
代表工作:RATSQL
https://zhuanlan.zhihu.com/p/143400912
1.1.2 增强Schema表示
-
图神经网络的方法
-
利用 bert 风格的预训练模型(MT-DNN)的上下文输出来增强结构模式表示(schema representation),并结合类型信息(type information) 来学习用于下游任务的新模式表示。
1.2 Decode
1.2.1 generation-based(🙅ordering issue 顺序问题)
代表工作:BRIDGE pointer-generator network
https://blog.youkuaiyun.com/qq_42341984/article/details/113059271
1.2.2 sketch-based
设计了一种满足SQL语法的框架, 在这样的语法框架内,只需要预测并填充相应的槽位。 语法框架为:
SELECT $AGG $COLUMN WHERE $COLUMN $OP $VALUE (AND $COLUMN $OP $VALUE)*
代表工作:
-
X-SQL
https://blog.youkuaiyun.com/qq_42341984/article/details/113705355
-
SQLova
1.2.3 grammar-based
-
AST
-
预训练解码器
代表工作:Context-free Grammar Pre-training(GP)
https://blog.youkuaiyun.com/qq_42341984/article/details/114578466
其他方法:
-
Information Extraction Approach
信息抽取的方法: 采用统一的基于BERT的抽取模型来识别query提及的槽位类型,包括序列标注方法、关系抽取和基于文本匹配的链接方法。
-
Model Interactive
阅读理解的方法: 与传统槽位填充方法不同的是,该方法将NL2SQL转化为QA问题,通过统一的MRC框架来预测不同的槽位。
-
MRC Approach
基于用户交互的语义解析,更偏向于落地实践。在生成sql后,通过自然语句生成来进一步要求用户进行意图澄清,从而对sql进行修正。