简介

    Text2SQL(也称为NL2SQL)是一项将用户的自然语句转为可执行 SQL 语句的技术,对改善用户与数据库之间的交互方式有很大意义。Text2SQL的本质,是将用户的自然语言语句转化为计算机可以理解并执行的规范语义表示 (formal meaning representation),是语义分析 (Semantic Parsing) 领域的一个子任务。

    目前比较火的英文数据集有WikiSQL、Spider、CoSQL、SParc、WikiTableQuestions、ATIS等,中文数据集有TableQA(即下图NL2SQL)、DuSQL、Chase等。

    在WikiSQL这个任务上目前主流的方法分为2种,一种是seq-to-seq序列的模型,这些模型直接生成最终SQL的语句,这方面比较出名的模型有:SEQ2SQL、Coarse2Fine、MQAN、NC-SQL、SeqGenSQL、Bridging、SeaD;另外一种是基于sketch-based的方法,把预测部门拆分成几个部分,每个模型只预测SQL语句的一部分,这方面比较出名的模型有:SQLNet、TypeSQL、SQLova、X-SQL、F-SQL、HydraNet、IE-SQL、SDSQL。

    目前在WikiSQL数据集上主流的方法是使用sketch-based系列的模型,但近期的研究表明,seq-to-seq序列的模型经过合理的设计,也一样可以取得很好的效果。在EG和不加EG的情况下取得最好的模型分别是sketch-based的模型(SDSQL、F-SQL)和seq2seq模型(SeaD)。

    这篇文章主要是介绍哈工大和微软亚洲研究院在2022年3月15号新发布的论文《UniSAr: A Unified Structure-Aware Autoregressive Language Model for Text-to-SQL》,论文地址为:https://arxiv.org/abs/2203.07781。这篇文章提出了一种不同与上面的方法,该模型属于Autoregressive Language Model,模型以Fairseq作为框架,在7个著名的数据集上(Multi-Domain:WikiSQL和TableQA;Multi-Table:Spider和DuSQL;Multi-Turn:CoSQL、SParc、Chase)都取得了一样甚至是更好的成绩。

摘要

    现有的 text-to-SQL 语义解析器是为特定设置而设计的,例如处理多表、 多领域或多轮的查询,这使得它们在应用于不同设置时效果会差很多。本文提出了统一结构感知自回归语言模型 UNISAR (Unified Structure-Aware Autoregressive Language Model) ,该模型直接采用现成的语言模型体系结构,在不同的环境下表现出一致的高性能。
    该模型在七个众所周知的涵盖多领域、多表和多轮的text-to-sql 数据集上,UNISAR与各个任务下专门设计的最先进的text-to-sql 模型相比,取得了一样甚至是更好的结果。重要的是,UNISAR是非侵入性的(non-invasive),因此在text-to-sql 任务下取得领先的核心模型也可以采用该模型的扩展,以进一步提高性能。
    具体来说,UNISAR 扩展了现有的自回归语言模型,加入了三个non-invasive扩展,使其具有结构感知能力:
     ○ Structure mark:编码数据库的schema、输入文本及这两者之间的关系;
     ○ Constrained decoding:在给定数据库schema的情况下,解码出结构良好的 SQL语句;
     ○ SQL completion:通过该机制来完成基于数据库模式的 SQL 中可能缺失的 JOIN 关系。

模型框架:

  • 采用预训练的自回归语言模型作为 UNISAR 的基础框架;
  • 使用BART进行编码,这是一个广泛使用的预先训练的encoder-decoder模型,遵循标准的从序列到序列的 Transformer 体系结构,它是通过有杂质的句子预先训练的,之所以没有使用 T5,是因为初步试验表明它具有良好的复用能力。(其中英文文本使用BART-Large模型、中文使用mBARF-CC25模型);

Structure Mark

1.schema property:扩展schema的语义信息;

  • The internal schema information:数据库schema的信息, 比如:primary key(主键)或者column type (INT, STRING or DATE),比如下图中,表Ranking中有字段名称有Play_id,它是Primary-key,数据格式是Integer,所以在这个字段前面加上Primary-key & Integer;
  • The name-based linking information:问题和schema直接的关系,作为schema linking的先验信息,比如:匹配schema和问题文本,如果能精确匹配到则加前缀exact,不能完全匹配则加partial,否则就不加。比如下图中,有一张表就叫players,而问题中也能完整匹配到players,所以players前面加Exact-Match;而表Ranking中有字段名称有Play_id,但问题中只出现了players没有出现play_id,所以是部分匹配到,在前面加Partial-Match,
  • The value-based linking information:通过数据库文本信息增强column representation。首先先规划化数据的表达形式(比如:统一日期的格式),然后再和问题中的文本进行匹配。

2.database structure :聚合schema neighbors的信息;

  • The affiliation relations(附属关系):表格和字段直接的关系 (e.g., ID of MATCHES),这个可以直接根据表格的属性获取;
  • The foreign key relations between columns (和变量相关的外键):(e.g., WINNERID links to PLAYERID),假设The tables relations已经包含了这项关系,所以这里只考虑The tables relations;
    【补充知识】主键(Primary Keys)是表中的一列,用作每一行的唯一标识符;外键(Foreign Keys)将一个表中的数据链接到另一个表中的数据。表中的外键列指向另一个表中具有唯一值的列(通常是主键列),以创建交叉引用两个表的方式。
  • The tables relations(表关系):表格直接的关系 (e.g., MATCHES links to RANKING),通过模板‘schema1 links to schema2’ 来生成(问题:怎么批量判断两个表有没有关系)。

3.discourse structure:从历史提问中补充文本信息

  • 在输入中加入了之前的 SQL 语句,从实体和意图两个方面改进了语篇的建模。

Constrained Decoding

  • BART 已经熟练掌握了 SQL 语法,然而它有时会在schema预测方面遇到困难。例如,BART 可能会输出 NATION 而不是 CITIZENSHIP。这里通过构造数据库schema的前缀树来解决这个问题,在beam search期间过滤掉不正确的token(问题:怎么批量构造前缀树)。
  • 注意,UNISAR 和基于语法的解析器之间的区别在于,UNISAR不需要指定具体的语法。

SQL Completion

    在研究中,作者发现生成的 SQL 语句经常会遗漏 JOIN 组件,因为它们通常在自然语言问题中没有被明确提及。为了使 SQL 完整,需要根据数据库模式找回可能丢失的 JOIN 组件;
     具体地说,作者首先构造一个模式图,其中节点是表或列,边是schema关系。然后尝试在一个不完整的 SQL 中找到位于现有表和列的最短路径中的表和列;
    以下图为例,这是一个不完整的 SQL,在 FROM 子句中没有提到表 MATCHES 和列 WINNER _ id。我们根据它们的邻居: PLAYERS 和 RANKING 来推断这两个信息。因为MATCHES 位于这两个表连接的路径上,而 WINNER _ id 是 MATCHES 的主键,通过这种方式可以补充完整的SQL语句。

模型实验

  1. 模型在7个不同的数据上进行了实验:
  • Multi-Domain:WikiSQL和TableQA(通过指标logic form accuracy (LX) and execution accuracy (EX) 来评估)
  • Multi-Table:Spider和DuSQL(通过指标exact set match accuracy (EM) 来评估)
  • Multi-Turn:CoSQL、SParc、Chase(通过指标question match accuracy (QM) and interaction match accuracy (IM)来评估)
  1. 7个不同的数据上的模型baseline:
  • Multi-Domain:SQLNet 、 SQLova、 Coarse2Fine 、 X-SQL 、 F-SQL 、 Bridge 、 SeaD
  • Multi-Table:RYANSQL、 IRNet、 RAT-SQL、 IRNetExt
  • MultiTurn:EditSQL、 IGSQL、 RAT-SQL-con

实验结果

  • 模型使用Fairseq框架进行数据清洗、训练和推理;使用了4张V100-16G GPUs显卡,训练了10个小时;
  • 在 WikiSQL(不加EG)、TableQA、Spider、DuSQL、SParc、CoSQL、Chase这7个数据集上都取得了最好的结果,见下表:

本文贡献:

  • 提出了一个统一的解析框架,可用于包括多领域、多表和多轮对话场景下的各种text-to-sql 的任务,而不依赖于特定的体系结构设计;
  • 通过简单地合并三个non-invasive扩展(structure mark, constrained decoding and SQL completion)使自回归语言模型具有结构感知性;
  • 在7个text-to-sql 数据集进行了实验,实现了整体的改进,证明了统一解析器 UNISAR 与专门设计的其他模型相比更有效。

UNISAR: A Unified Structure-Aware Autoregressive Language Model for Text-to-SQL相关推荐

  1. 【NLP】AutoRegressive Language Model

    AutoRegressive Language Model 回归分析(regression analysis)是确定两种或两种以上变数间相互依赖的定量关系的一种统计分析方法.AutoRegressiv ...

  2. 17.深度学习练习:Character level language model - Dinosaurus land

    本文节选自吴恩达老师<深度学习专项课程>编程作业,在此表示感谢. 课程链接:https://www.deeplearning.ai/deep-learning-specialization ...

  3. 吴恩达深度学习5.1练习_Sequence Models_Character level language model - Dinosaurus land

    转载自吴恩达老师深度学习课程作业notebook Character level language model - Dinosaurus land Welcome to Dinosaurus Isla ...

  4. Assignment | 05-week1 -Character level language model - Dinosaurus land

    该系列仅在原课程基础上课后作业部分添加个人学习笔记,如有错误,还请批评指教.- ZJ Coursera 课程 |deeplearning.ai |网易云课堂 CSDN:http://blog.csdn ...

  5. 序列模型第一周作业2: Character level language model - Dinosaurus land

    来自吴恩达深度学习系列视频:序列模型第一周作业2: Character level language model - Dinosaurus land.如果英文对你说有困难,你可以参照[中文][吴恩达课 ...

  6. GLM General Language Model Pretraining with Autoregressive Blank Infilling

    GLM: General Language Model Pretraining with Autoregressive Blank Infilling 论文地址 [2103.10360v2] GLM: ...

  7. 文本生成(一)【NLP论文复现】Unified Language Model 文本生成从未如此轻松

    Unified Language Model 文本生成从未如此轻松 前言 UniLM How to build UniLM Get 2D MASK Send 2D MASK to Bert 使用Uni ...

  8. UIE:Unified Structure Generation for Universal Information Extraction

    论文:https://arxiv.org/pdf/2203.12277.pdf 作者采用生成式text to structure结构统一了信息抽取的四个任务,并且在13个数据集上采用有监督.低资源和少 ...

  9. LLMs:《BLOOM: A 176B-Parameter Open-Access Multilingual Language Model》翻译与解读

    LLMs:<BLOOM: A 176B-Parameter Open-Access Multilingual Language Model>翻译与解读 导读:BLOOM(BigScienc ...

最新文章

  1. 存储过程和函数——概述||创建存储过程||调用存储过程||查看存储过程||删除存储过程
  2. Cortex-M3内核中的异常
  3. LSMW批处理使用方法(10)_步骤12、13
  4. win10弹不出密码输入框_电脑互访提示输入网络密码,怎么办?
  5. object.assign
  6. 封装一个Array 数据 绑定 html select 方法
  7. portlet java_Java Portlet 规范概述
  8. Image Warp插件实现图片点击扩大渐隐效果
  9. 矢量合成和分解的法则_专题06 共点力的合成与分解
  10. rancher 使用部分运维操作
  11. 线程的创建以及线程的本质
  12. 遗传算法及其应用_遗传算法及其广泛应用
  13. 使用subs和evals函数对sympy中的符号进行赋值并且设置数值位数
  14. 产品读书《B端产品经理必修课:从业务逻辑到产品构建全攻略》
  15. Android中导航栏之溢出菜单OverflowMenu
  16. 【Vue】Emitted value instead of an instance of Error
  17. javascript-ECMAScript
  18. Execl操作基础——自动填充空白单元格
  19. 使用YOLOX进行物体检测
  20. ffmpeg 的那些坑

热门文章

  1. 非root用户服务器安装matlab
  2. 怎么把xml文件到url post方法 android,如何在android中使用http post发送xml文件。我在哪里把xml文件放在代码中...
  3. app定位、地图、坐标系的那些坑
  4. 闭包函数到底是什么?有什么用?
  5. android 获取微信计步数量,微信运动步数是怎样计算的?终于有人研究出来了!
  6. 朋友圈广告助手_2019年,微信朋友圈广告最受喜爱的10条
  7. 发布自己的Python包(Pypi)
  8. 使用Git下载项目到本地
  9. Excel折线图设置坐标轴起点不为0
  10. 微服务编排引擎Cadence简介