当前社会正处于大数据时代,大部分数据被存储在数据库中。日常生活中,我们频繁地与数据库交互,例如网上购物、订票、订餐等,这些操作通常通过后台封装好的SQL模板进行,导致灵活性受限。为了解决这一问题,NL2SQL技术应运而生,用户只需通过自然语言表达意图,系统便能将其转换为SQL语句,缩短用户与数据库间的距离。自然语言处理领域中,将自然语言自动转化为SQL语句的过程被称为语义解析。
SQL语言的设计要求严格,结构复杂,难以将自然语言自动转化为正确的SQL语句。微软的研究团队将这一任务分解为六个子任务,以确保模型输出的空间尽可能符合SQL语言的要求。这项研究由Pengcheng He、Yi Mao、Kaushik Chakrabarti和Weizhu Chen四位研究员共同完成,并在WikiSQL数据集上取得了优异的表现,超越了人类水平。
WikiSQL是Salesforce在2017年发布的一个大型标注NL2SQL数据集,包含了24,241张表、80,645条自然语言问句及其对应的SQL语句。该数据集主要用于评估自然语言到SQL语句的转换效果,数据样例如图一所示。
本文提出了一种新的网络架构X-SQL,旨在利用BERT风格的预训练模型(MT-DNN)的上下文输出来增强模式表示,并结合类型信息来学习用于下游任务的新模式表示。X-SQL通过显式引入列类型来限制SQL语法中的一些约束,例如聚合函数只适用于数值列,而非字符串列。
X-SQL模型由三部分组成:Sequence Encoder、Context Enhanced Schema Encoder和Output Layer。每部分都负责不同的任务。
X-SQL模型将任务分解为六个子任务,每个子任务都有一个独立的子网络结构。这些子任务相互配合,共同生成正确的SQL语句。
X-SQL模型在WikiSQL数据集上的表现优于现有的SQLNet和SQLova模型。具体而言,X-SQL在逻辑形式精度上提高了2.6%,在测试集上的执行精度提高了2.5%。即使在没有使用增强技术(EG)的情况下,X-SQL依然表现出色,特别是在WHERE条件列和WHERE条件值任务上,分别提高了1.1%和1.2%。
X-SQL通过将任务分解为六个子任务,并相互约束,实现了对SQL语句的有效生成。尽管这一方法在单表查询中表现出色,但在多表查询场景下仍需进一步研究。未来可以探索更多子任务,以适应更复杂的SQL语法需求。总体而言,X-SQL模型为自然语言到SQL语句的转换提供了有价值的参考。