Text-to-SQL小白入门(三)IRNet:引入中间表示SemQL

news2025/2/23 13:19:51

摘要

本文主要介绍了IRNet论文的基本信息,比如标题、摘要、数据集、结果&结论,以及论文中提出的不匹配问题和词汇问题以及对应的解决方案,重点学习了中间表示SemQL。

引言

学习论文时,可以先粗略看看论文标题-摘要-数据集-结果/结论,最后想详细了解信息的话可以重点看看模型结构/代码实践等

论文标题

今天学习的论文是西安交通大学、北京邮电大学、微软发表于2019年ACL的文章《Towards Complex Text-to-SQL in Cross-Domain Database with Intermediate Representation》,后面大家简称为IRNet (Intermediate Representation Network简写)

  • 英文标题:Towards Complex Text-to-SQL in Cross-Domain Database with Intermediate Representation
  • 中文翻译:使用中间表示(Intermediate Representation)在跨域数据集实现复杂的Text-to-SQL
  • 论文作者:Jiaqi Guo, Zecheng Zhan, Yan Gao, Yan Xiao, Jian-Guang Lou, Ting Liu, Dongmei Zhang
  • 作者单位:西安交通大学、北京邮电大学、微软
  • 发表会议:2019 ACL(Annual Meeting of the Association for Computational Linguistics),CCF-A
  • 文章链接:https://arxiv.org/abs/1905.08205
  • 代码链接:GitHub - microsoft/IRNet: An algorithm for cross-domain NL2SQL

看论文的意外之喜,仙交厉害啊

郭家琪和刘烃老师也是首个跨领域多轮Text2SQL中文数据集——CHASE数据集的作者!!!

那就顺带再放一下陕西省天地网重点实验室-刘烃老师组介绍:软件系统安全小组-陕西省大数据知识工程重点实验室

论文摘要

摘要已经把论文的核心说清楚了

核心创新点是在从自然语言问题->到SQL语言过程中,引入中间层表示,论文中称为SemQL

也就是:NL -> SemQL -> SQL

  1. 作者提出了一种称为IRNet的方法,适用于复杂和跨领域的Text2SQL。
  2. IRNet旨在解决两个挑战:
    1. mismatch problem:自然语言(NL)表达的意图与SQL实现细节之间的不匹配;
    2. lexical problem:大量的领域外的词给预测列带来了挑战。
  3. 与端到端合成SQL查询不同,IRNet将合成过程分解为三个阶段。
    1. schema linking:IRNet在问题和数据库模式之间执行模式链接。
    2. 生成SemQL:IRNet采用基于语法的神经模型来合成一个SemQL查询。(SemQL查询是作者设计的连接NL和SQL的中间表示)
    3. 生成SQL:IRNet确定地从具有领域知识的合成SemQL查询中推断出SQL查询。
  4. 在数据集Spider上,IRNet达到了46.7%的准确率,比以前最先进的方法获得了19.5%的绝对改进。
  5. IRNet在数据集Spider获得了第1名(2019年的时候)

论文数据集

论文数据集使用的是Spider数据集

  • Spider数据集是多数据库多表单轮查询的Text2SQL数据集,也是业界公认难度最大大规模跨领域评测榜单,由2018年耶鲁大学提出,由11名耶鲁大学学生标注。
  • 数据集下载地址:Spider: Yale Semantic Parsing and Text-to-SQL Challenge
  • 数据集介绍参考:Text-to-SQL小白入门(一)

论文结果&结论

结果

效果提升巨大!!!

  • Spider数据集上完全匹配精度exact matching accuracy在开发集和测试集都取得第1的效果,重点是提升巨大。
  • 加上BERT后,提升效果更大。

特别困难的SQL需要有经验的SQL从业者才能写出,确实有点为难模型了。

  • 可以发现在Spider的简单SQL上准确率已经77.2%,特别困难的SQL准确率才25.3%。

  • 2019年榜单Test集是54.7%,2023年榜单Test集已经是74.0(提升空间仍然很大)

结论

看完结论,完结散花,开始下一篇

论文提出了什么方法

解决了什么问题

在什么数据集上验证了效果

论文提出了一种神经网络方法SemQL,用于复杂的跨域文本到sql,旨在解决词法问题以及模式链接和中间表示的不匹配问题。在具有挑战性的Spider基准测试上的实验结果证明了IRNet的有效性。

问题引入

前面摘要已经大概讲了原来的SQL的主要问题有2个

接下来细致讲解一下

mismatch problem不匹配问题

因为WikiSQL数据集相对简单,一些先进的端到端方法已经能达到80%以上的准确率了,但是在Spider数据集上却表现不佳。

Spider数据集带来了新的挑战

  • Spider中的SQL查询包含嵌套查询和子句,如GROUPBYHAVING,这比WikiSQL复杂。

考虑下图的Text2SQL,问题中从未提到要在SQL查询中进行分组的列“student id”。实际上,SQL中引入GROUPBY子句是为了方便聚合函数的实现。

  • 输入NL:
Show the names of students who have a 
grade higher than 5 and 
have at least 2 friends
(查询成绩大于5并且有至少2个以上朋友的学生姓名。)
  • 输出SQL:
SELECT T1.name
FROM friend AS T1 JOIN highschooler AS T2 
ON T1.student_id = T2.id WHERE T2.grade > 5 
GROUP BY T1.student_id HAVING count(*) >= 2

从本质上来说,SQL是为有效地查询关系数据库而设计的,而不是为了表示自然语言NL的含义。因此,在用自然语言表达的意图和用SQL实现的细节之间不可避免地存在不匹配,即mismatch problem。

lexical problem词汇问题

Spider数据集中划分了train训练集、dev验证集、test测试集

因为dev验证集中有35%的数据库模式的单词没有出现在训练集,相比之下,在WikiSQL中这个数字只有22%。

大量的OOD(out-of-domain)领域外的单词对SQL查询中的column列名预测提出了另一个严峻的挑战,因为OOD单词通常在神经模型中缺乏准确的表示。论文认为这个挑战是一个词汇问题

问题解决

论文提出了问题

那么就要解决问题

为了解决这些问题,论文提出了IRNet。通过中间表示intermediate representation和模式链接schema linking来解决不匹配问题和词汇问题

Intermediate Representation中间表示

为了消除这种不匹配,论文设计了一种特定于领域的语言,称为SemQL,它作为NL和SQL之间的中间表示。

下图左边就是与上下文无关的SemQL语法,下图右边代表一个SemQL查询的例子。

SQL例子:

SELECT T1.name

FROM friend AS T1 JOIN highschooler AS T2

ON T1.student_id = T2.id WHERE T2.grade > 5

GROUP BY T1.student_id HAVING count(*) >= 2

SemQL语法

如上图左边所示:简单理解一下:

  • Z:表示两个查询集合R之间的操作:交集、并集、差集或者不做任何操作
  • R:表示查询集:单纯查询(Select)| 查询过滤(Select Filter)| 查询排序后的结果(Select Order)| 查询聚合后的最值(Select Superlative)| 还有这些的组合情况
  • Select:若干个通过查询得到的字段。
  • Order:升序asc和降序desc
  • Superlative:最多most或者最少least(论文图里面写的suerlative,应该是少写了一个字母)
  • Filter:过滤条件之间的关系:and | or,或者其他的过滤条件(> | < | = | ..)
  • A:aggregation聚合函数
  • C:column列
  • T:table表

SemQL例子

结合SemQL语法,理解一下上图右边:SemQL例子:从上往下,自顶向下遍历这颗SemQL树

  • 只有一个查询集合,没有多个查询集的集合操作,所以直接从顶部 Z - R
  • R是一个Select Filter (因为SQL中是 SELECT T1.name ... WHERE),这个Filter是由2个Filter组成的。
    • Select 表friend的 name
    • 两个Filter之间是and 关系
      • 一个Filter是针对T2.grade > 5
      • 另一个Filter是count(*) >= 2

SemQL优点:

受lambda DCS (Liang, 2013)的启发,SemQL被设计为树形结构,有两个优点:

  • 有效地约束合成过程中的搜索空间。
  • 鉴于SQL的树结构特性,遵循相同的结构也使其更容易直观地转换为SQL。

为什么能解决mismatch问题?

不匹配问题主要是由SQL查询中的实现细节和自然语言问题中缺少具体信息引起的。

因此,很自然地将实现细节隐藏在中间表示中,这构成了SemQL的基本思想。

考虑到上图右边部分,SQL查询中的GROUPBY、HAVING和FROM子句在SemQL查询中被消除,WHERE和HAVING中的条件在SemQL查询中的Filter子树中统一表示。

在后面的推理阶段,可以使用领域知识从SemQL查询确定地推断出实现细节。

  • 举例子:SQL查询的GROUPBY子句中的列通常出现在SELECT子句中,或者它是聚合函数应用于其中一个列的表的主键。

SemQL推断SQL的前提

1.要求在SemQL中声明列所属的表

  • 比如列“name”及其表“friend”是在SemQL查询中声明的。
  • 表的声明有助于区分模式中重复的列名

2.基于数据库模式的定义是精确和完整的假设来执行推断。具体地说,

  • 列是另一个表的外键,应该在模式中声明外键约束
  • 这个假设通常成立,因为它是数据库设计中的最佳实践。在Spider基准的训练集中,超过95%的例子都持有这个假设。

SemQL推断SQL的流程

以SQL查询中FROM子句的推理为例:

  • 首先确定连接模式中SemQL查询中声明的所有表的最短路径
    • (数据库模式可以表示为无向图,其中顶点是表,边是表的外键)
  • 然后将所有在路径(path)上的数据表表都连接(joining)起来就得到了FROM从句

Schema Linking模式链接

IRNet中模式链接的目标是识别问题中提到的列名和表名,并根据它们在问题中提到的方式为这些列分配不同的类型:table | column | value

字符串匹配

实现方式:字符串匹配的方法。(简单但是高效)

  1. 首先枚举出一个NL问题中所有长度不大于的6的n-gram短语。(就是按不同长度找字符串子集)
    1. 从长度为1、2、3、4、5、6分别枚举一次,假如自然语言问题长度为x,总共可以有(6x -15)个分词
    2. 长度为1的短语有 x
    3. 长度为2的短语有 x - 1
    4. 长度为3的短语有 x - 2
    5. 长度为4的短语有 x - 3
    6. 长度为5的短语有 x - 4
    7. 长度为6的短语有 x - 5
  2. 如果某个n-gram短语恰好匹配上了某个字段名称, 或者是列名的子串, 那么就识别该n-gram短语是一个column
    1. 同理可以用相似的方法识别出某个n-gram短语是一个table;
    2. 如果某个n-gram短语同时被识别为column和table则优先认定为column;
  3. 如果某个n-gram短语以单引号开始+单引号结束,那么就认为是value
  4. 某个n nn-gram短语被指定了类型type, 那么所有与该n-gram短语字符串有重叠部分的n-gram短语全部被移除, 不再被考虑;
  5. 最后将所有识别出的实体序列(table 、column、value)与剩余的1-gram短语按原先NL问题中单词的顺序排列起来, 就可以得到一个互不重叠的实体序列;
  6. 根据⑤中得到的实体序列, 给序列中的每个n-gram短语分别附上table, column, value标签。这些短语在论文中称作一个span。

比如在下图中:自然语言问题Question中:

  • Show、the、and等都是剩下的1-gram短语,标记为none
  • book titles、years等是column
  • books 是table

模型

前面分享了论文提出的问题以及对应的解决办法

接下来分享一下模型的其他部分,模型结果如上图所示

NL Encoder

  • 作用:用于编码自然语言问题NL
  • 输入:问题Question + n-gram的分词type
  • 输出:Embedding
  • 通过Bi-LSTM实现

Schema Encoder

  • 作用:用于编码数据库schema信息。
  • 输入:接受整个s作为输入
    • s = (c, t)表示一个数据库结构schema
    • c = {(column, type),(column, type),....(column, type)},表示所有的列和类型
    • t 表示所有的table
  • 输出:Embedding

Decoder

  • 作用:用于生成SemQL查询。
  • 鉴于SemQL的树状结构,论文使用基于语法的解码器(Yin和Neubig, 2017,2018),该解码器利用LSTM通过动作的顺序应用对SemQL查询的生成过程进行建模。
  • 解码器与三种类型的操作交互以生成SemQL查询,包括APPLYRULE、SELECTCOLUMN和SELECTTABLE。
    • ApplyRule(r):生成规则r应用于SemQL查询的当前派生树
    • SelectColumn(c):从数据库schema中选择一个列column
    • SelectTable(t):从数据库schema中选择一个表table

额外

memory augmented pointer network内存增强指针网络

  • 作用:优化在合成SemQL过程中进行列column的选择。
  • 具体:当一个字段被选到时, 该网络首先决定是否要在内存(memory)中选出, 这一点与普通的 pointer network不一样。

Coarse-to-fine粗力度到细粒度

  • 作用:优化生成SemQL查询过程
  • 具体:引入Coarse-to-fine框架,该框架是用来将SemQL查询的解码过程分解成两个阶段:
    • 第一阶段: 一个框架(skeleton)解码器输出SemQL查询的框架(skeleton);
    • 第二阶段:一个细节(detail)解码器通过选择字段和数据表来向第一阶段输出中填写缺失的细节

代码

GitHub - microsoft/IRNet: An algorithm for cross-domain NL2SQL

preprocess/sql2SemQL.py:

  • 把sql 转化为 SemQL,便于训练。

sem2SQL.py:

  • 把SemQL转化为 sql,便于输出测试。

参考

https://arxiv.org/abs/1905.08205

Spider: Yale Semantic Parsing and Text-to-SQL Challenge

【论文阅读】让数据库听懂人话(Text-to-SQL)_text2sql_囚生CY的博客-CSDN博客

Text-to-SQL小白入门(一) - 知乎

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/927164.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

YB2411是一款内部集成有高边高压功率MOSFET管的高频率(2MHz)降压型开关稳压器。

概述&#xff1a; YB2411是一款内部集成有高边高压功率MOSFET管的高频率(2MHz)降压型开 关稳压器。提供单路最大0.6A高效率输出&#xff0c;以电流模式控制方式达到快速环路响 应。 宽范围输入电压(33V至36V)可在移动环境输入的条件下实现各种降压型电 源变换的应用。1uA的…

为什么产品经理不适合做项目经理呢?

虽然产品经理需要具备一定的项目能力&#xff0c;但在实际执行过程中&#xff0c;通常会在开发团队中设置一个类似项目经理的角色&#xff0c;负责把控项目进度和质量。一般情况下&#xff0c;技术经理就是项目经理。 技术型项目经理的特点如下&#xff1a; 充当救火队员的角…

C#矩阵XY排序

矩阵XY快速排序 using MyVision.Script.Method;public class MyScript : ScriptMethods {//struct MOTIONPOSXY_S{public double Pos_x;public double Pos_y;};//脚本执行该方法public bool Process(){//try{//脚本代码写在下方 List<double> PointX GetDoubleList(&qu…

会员管理系统实战开发教程03-会员管理功能

我们上篇介绍了会员管理的列表页&#xff0c;及新增功能开发。本篇我们继续我们的会员管理功能&#xff0c;介绍一下详情、修改、删除功能。 1 创建详情页 打开控制台&#xff0c;点击创建页面的图标&#xff0c;创建详情页 2 数据详情组件 详情页我们也是使用数据容器组…

RTSP/Onvif视频服务器EasyNVR视频平台微信端出现播放失败的问题解决方案

EasyNVR是基于RTSP/Onvif协议接入的视频平台&#xff0c;具备视频直播监控、录像、检索与回看、存储、国标级联等视频能力&#xff0c;可支持将接入的视频流进行全平台、全终端的分发&#xff0c;包括RTSP、RTMP、HTTP-FLV、WS-FLV、HLS、WebRTC等。 有用户反馈&#xff0c;在…

shopee平台好做吗,有什么优势?

shopee平台提供了一个庞大而活跃的用户群体。作为东南亚地区最受欢迎的购物平台之一&#xff0c;shopee平台吸引了数百万用户每天在该平台上进行交易。这意味着商家可以通过shopee平台获得更大范围和更广泛的曝光机会。无论是刚创业还是已经有一定规模和知名度的企业&#xff0…

最简单的Obsidian图床配置

参考文章&#xff1a; Obsidian 将图片批量上传至图床 Obsidian中图床自动上传设置 前言 配置图床的目的&#xff1a;解决 Obsidian 图片存储问题&#xff0c;一般来说 Obsidian 图片是以本地链接的方式存储在文章当中&#xff0c;当图片移动的时候文章中的图片就会出错。 …

翻倍以链表形式表示的数字

题目&#xff1a; 示例&#xff1a; 思路&#xff1a; 有点相似于&#xff1a;链表相加II&#xff0c;这道题我们仍然有进位&#xff0c;但不同的是&#xff0c;链表相加我们选择了开辟新节点&#xff0c;这道题我们选择反转两次链表&#xff0c;开始一次&#xff0c;结束一次…

能够解决问题的客服电话系统方案

客服电话的应用场景通常是以呼入的电话为主&#xff0c;属于服务性质的更重视服务质量&#xff0c;客服电话方案主要解决呼叫中心运营中的一些问题&#xff0c;下面就来详细了解下。 企业的客服电话通常都是统一的一个热线号码&#xff0c;如&#xff1a;400电话、800电话、95号…

若依Cloud集成Flowable6.7.2

项目简介 基于若依Cloud的Jove-Fast微服务项目&#xff0c;集成工作流flowable(接上篇文章) 若依Cloud集成积木报表 项目地址&#xff1a;https://gitee.com/wxjstudy/jove-fast 后端 新建模块 目录结构如下: 引入依赖 前提:引入依赖之前先配置好maven的setting.xml &…

基于SpringBoot和Vue的前后端分离项目(高校毕业生信息管理平台)

本项目为前几天收费帮学妹做的一个项目&#xff0c;Java EE JSP项目&#xff0c;在工作环境中基本使用不到&#xff0c;但是很多学校把这个当作编程入门的项目来做&#xff0c;故分享出本项目供初学者参考。 一、项目描述 基于SpringBoot和Vue的前后端分离项目&#xff08;高校…

OceanMind海睿思签约常州市建筑科学研究院,打造检验检测行业数字化转型标杆

近日&#xff0c;中新赛克海睿思 与 中国知名综合性建筑研究和科技创新型高科技企业——常州市建筑科学研究院集团股份有限公司&#xff08;以下简称“建科股份”&#xff09;达成深度战略合作&#xff0c;为建科股份提供行业领先的数据工程建设服务&#xff0c;携手推进检验检…

视频云存储/安防监控视频AI智能分析网关V3:抽烟/打电话功能详解

人工智能技术已经越来越多地融入到视频监控领域中&#xff0c;近期我们也发布了基于AI智能视频云存储/安防监控视频AI智能分析平台的众多新功能&#xff0c;该平台内置多种AI算法&#xff0c;可对实时视频中的人脸、人体、物体等进行检测、跟踪与抓拍&#xff0c;支持口罩佩戴检…

助力工业物联网,工业大数据之服务域:可视化工具Grafana介绍【三十八】

文章目录 前言08&#xff1a;可视化工具Grafana介绍09&#xff1a;可视化工具Grafana部署10&#xff1a;Grafana集成Prometheus11&#xff1a;Grafana集成MySQL监控 前言 项目所需工具: 链接&#xff1a;https://pan.baidu.com/s/1sIa8nninf2Fz6YqE3vUpqQ?pwd5wr3 提取码&…

mysql数据库管理及增删改查

目录 1、数据库管理 1.1、数据库表的文件 1.1.1、MYD”文件&#xff1a; 1.1.2、“.MYI”文件 1.2、日志&#xff1a; 1.3、mysql 数据库管理 1.3.1、数据库管理命令 1.3.2、数据库列的类型 2、SQL语句 2.1、DDL&#xff1a;数据定义语言&#xff0c;用于创建数据库对…

盖革核辐射检测仪pcba方案设计

核辐射检测仪又可以称为辐射检测仪&#xff0c;根据它的类型可以分为便携式与固定式&#xff0c;两种类型的仪器所应用的领域是不同的。目前市场上存在的辐射报警仪&#xff0c;是一种不带剂量显示功能的仪器&#xff0c;仅有辐射超标报警功能&#xff0c;不能具体显示出它的数…

【PHP】PHP基本语法

1、PHP标记 当解析一个文件时&#xff0c;PHP 会寻找起始和结束标记&#xff0c;也就是 <?php 和 ?>&#xff0c;告诉 PHP 开始和停止解析二者之间的代码。此种解析方式使得 PHP 可以被嵌入到各种不同的文档中去&#xff0c;而任何起始和结束标记之外的部分都会被 PHP…

【VUE】数字动态变化到目标值-vue-count-to

vue-count-to是一个Vue组件&#xff0c;用于实现数字动画效果。它可以用于显示从一个数字到另一个数字的过渡动画。 插件名&#xff1a;vue-count-to 官方仓库地址&#xff1a;GitHub - PanJiaChen/vue-countTo: Its a vue component that will count to a target number at a…

10.Oracle中decode函数

【函数格式】&#xff1a; decode ( expression, condition_01, result_01, condition_02, result_02, ......, condition_n, result_n, result_default) 【函数说明】&#xff1a; 若表达式expression值与condition_01值匹配&#xff0c;则返回result_01&#xff0c;…

XGBoost,NVIDIA是什么

目录 XGBoost 算法层面 什么是 XGBoost GBDT是什么 GBDT中的GB 为何选择 XGBoost&#xff1f; XGBoost 的优势和属性 XGBoost 和数据科学家 为何 XGBoost 在 GPU 上表现更出色 XGBoost RAPIDS GPU 加速的 XGBoost NVIDIA是什么 使用 Spark XGBoost 的 GPU 加速端…