自然语言到 SQL 语句,微软只用六个子任务,结果超越人类水平
作者头像
  • ianchen888
  • 2021-09-06 14:23:41 11

论文标题:X-SQL:利用上下文增强模式表示

背景介绍

当前社会正处于大数据时代,大部分数据被存储在数据库中。日常生活中,我们频繁地与数据库交互,例如网上购物、订票、订餐等,这些操作通常通过后台封装好的SQL模板进行,导致灵活性受限。为了解决这一问题,NL2SQL技术应运而生,用户只需通过自然语言表达意图,系统便能将其转换为SQL语句,缩短用户与数据库间的距离。自然语言处理领域中,将自然语言自动转化为SQL语句的过程被称为语义解析。

问题难点

SQL语言的设计要求严格,结构复杂,难以将自然语言自动转化为正确的SQL语句。微软的研究团队将这一任务分解为六个子任务,以确保模型输出的空间尽可能符合SQL语言的要求。这项研究由Pengcheng He、Yi Mao、Kaushik Chakrabarti和Weizhu Chen四位研究员共同完成,并在WikiSQL数据集上取得了优异的表现,超越了人类水平。

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。每部分都负责不同的任务。

  1. Sequence Encoder:为每个表增加一个空列,然后将段编码替换为类型编码,学习四种类型:问题、分类列、数值列和空列。
  2. Context Enhanced Schema Encoder:增强Sequence Encoder的输出,使其能够捕捉到查询词与列之间的关系,从而得到增强的语义表示。
  3. Output Layer:完成SQL语句的生成,将其分解为六个子任务:选择列、选择聚合、WHERE条件数量、WHERE条件列、WHERE条件操作符和WHERE条件值。

六个子任务

X-SQL模型将任务分解为六个子任务,每个子任务都有一个独立的子网络结构。这些子任务相互配合,共同生成正确的SQL语句。

  1. 选择列:通过softmax找到最可能的列。
  2. 选择聚合:考虑列的类型来选择合适的聚合函数。
  3. WHERE条件数量:确定需要约束的列数。
  4. WHERE条件列:确定需要约束的列。
  5. WHERE条件操作符:确定操作符,如大于、小于、等于等。
  6. WHERE条件值:预测值在查询语句中的位置。

实验结果

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语句的转换提供了有价值的参考。

    本文来源:图灵汇
责任编辑: : ianchen888
声明:本文系图灵汇原创稿件,版权属图灵汇所有,未经授权不得转载,已经协议授权的媒体下载使用时须注明"稿件来源:图灵汇",违者将依法追究责任。
    分享
自然语言微软只用个子语句超越人类水平任务结果
    下一篇