NatSQL
最编程
2024-10-01 20:18:28
...
NatSQL出自2021年9月的论文《Natural SQL: Making SQL Easier to Infer from Natural Language Specifications》(github),它是一种SQL 中间表征(SQL intermediate representation(IR))方法。
NatSQL作者认为Text2SQL的关键挑战是自然语言描述和其对应的SQL查询之间存在不匹配(mismatch),比如论文图1的SQL语句中的GROUP BY 和JOIN ON在自然语言描述问题中没有被提到。因为SQL是被设计成高效地查询关系数据库的,不是用来表示自然语言问题的含义。对不匹配的解决办法是使用中间表征。
NatSQL的主要语法如论文表1,其设计原则是简化SQL的结构并使其语法与自然语言描述接近:
- 它只保留SQL中的SELECT, WHERE, ORDER BY 子句。 去掉了GROUP BY,HAVING, FROM, JOIN ON,集合操作符(INTERSECT,UNION,EXCEPT),子查询。
- 大写斜体字符为SQL和NatSQL关键词,其他大写字符表示特殊的含义:‘TABLE_NAME’, ‘COLUMN_NAME’ 为数据库而定义的, ‘NUMBER’, ‘STRING’ 表示数据类型。
- 除了被删除的SQL子句外,NatSQL和SQL的差别在表1中用下划线表示。NatSQL将被删除的子句的功能通过添加新的关键字以及允许where条件之前出现conjunct来实现。
论文图1用一个例子示意了NatSQL与其他几种中间表征方法,NatSQL与SemQL最像,论文认为它在如下方面提升了SemQL:
- 相比SemQL对SQL语句的兼容范围更大;
- 简化了带集合操作符(INTERSECT,UNION,EXCEPT)的查询语句结构;
- 去掉了嵌套子查询;
- 减少了需要预测的schema元素的个数;
- 使用与SQL一样的关键字和句法,比SemQL可读性更好且更易扩展。
论文后续部分更详细介绍了这些细节,本笔记主要对NatSQL作一个基本了解,就不详细记录了。
注:NatSQL的github没有包括将SQL转换成NatSQL的代码(有几个issue(1, 2)都提到了这个问题)
推荐阅读