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

这篇具有很好参考价值的文章主要介绍了Text-to-SQL小白入门(三)IRNet:引入中间表示SemQL。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

摘要

Awesome-Text2SQL这个项目主要收集了针对大型语言模型和Text2SQL等的精选教程和资源,希望能够共同学习、共同推动Text2SQL领域进步!

地址:GitHub - eosphoros-ai/Awesome-Text2SQL: Curated tutorials and resources for Large Language Models, Text2SQL, and more.

本文主要介绍了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数据集的作者!!!

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

Text-to-SQL小白入门(三)IRNet:引入中间表示SemQL,Text-to-SQL,数据库,SQL,NLP,LLM,text2sql,IRNet

论文摘要

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

核心创新点是在从自然语言问题->到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后,提升效果更大。

Text-to-SQL小白入门(三)IRNet:引入中间表示SemQL,Text-to-SQL,数据库,SQL,NLP,LLM,text2sql,IRNet

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

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

Text-to-SQL小白入门(三)IRNet:引入中间表示SemQL,Text-to-SQL,数据库,SQL,NLP,LLM,text2sql,IRNet

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

Text-to-SQL小白入门(三)IRNet:引入中间表示SemQL,Text-to-SQL,数据库,SQL,NLP,LLM,text2sql,IRNet

结论

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

论文提出了什么方法

解决了什么问题

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

论文提出了一种神经网络方法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

Text-to-SQL小白入门(三)IRNet:引入中间表示SemQL,Text-to-SQL,数据库,SQL,NLP,LLM,text2sql,IRNet

从本质上来说,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

Text-to-SQL小白入门(三)IRNet:引入中间表示SemQL,Text-to-SQL,数据库,SQL,NLP,LLM,text2sql,IRNet

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

Text-to-SQL小白入门(三)IRNet:引入中间表示SemQL,Text-to-SQL,数据库,SQL,NLP,LLM,text2sql,IRNet

模型

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

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

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

Text-to-SQL小白入门(三)IRNet:引入中间表示SemQL,Text-to-SQL,数据库,SQL,NLP,LLM,text2sql,IRNet

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小白入门(一) - 知乎文章来源地址https://www.toymoban.com/news/detail-684969.html

到了这里,关于Text-to-SQL小白入门(三)IRNet:引入中间表示SemQL的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 论文阅读:DIN-SQL: Decomposed In-Context Learning of Text-to-SQL withSelf-Correction

    NL2SQL是将自然语言转化为SQL的任务,该任务隶属于NLP的子任务,NL2SQL在AIGC时代之前,以seq2seq、BERT等系列的模型在NL2SQL的主流数据集上取得了不错的效果,2022年底,ChatGPT爆火,凭借LLM强大的逻辑推理、上下文学习、情景联系等特点,按理说LLM应该可以超过seq2seq、BERT等系列的

    2024年02月11日
    浏览(44)
  • ChatGPT论文:大语言模型LLM之战:Dolly、LLaMA 、Vicuna、Guanaco、Bard、ChatGPT--在自然语言转SQL(NL2SQL、Text-to-SQL)的比较(一)

    ChatGPT的成功引发了一场AI竞赛,研究人员致力于开发新的大型语言模型(LLMs),以匹敌或超越商业模型的语言理解和生成能力。近期,许多声称其性能接近GPT-3.5或GPT-4的模型通过各种指令调优方法出现了。作为文本到SQL解析的从业者,我们感谢他们对开源研究的宝贵贡献。然

    2024年02月02日
    浏览(45)
  • NLP-语义解析(Text2SQL):技术路线【Seq2Seq、模板槽位填充、中间表达、强化学习、图网络】

      目前关于NL2SQL技术路线的发展主要包含以下几种: Seq2Seq方法: 在深度学习的研究背景下,很多研究人员将Text-to-SQL看作一个类似神经机器翻译的任务,主要采取Seq2Seq的模型框架。基线模型Seq2Seq在加入Attention、Copying等机制后,能够在ATIS、GeoQuery数据集上达到84%的精确匹配,但是在

    2024年02月12日
    浏览(65)
  • Relation-Aware Graph Transformer for SQL-to-Text Generation

    SQL2Text 是一项将 SQL 查询映射到相应的自然语言问题的任务。之前的工作将 SQL 表示为稀疏图,并利用 graph-to-sequence 模型来生成问题,其中每个节点只能与 k 跳节点通信。由于无法捕获长期且缺乏特定于 SQL 的关系,这样的模型在适应更复杂的 SQL 查询时将会退化。为了解决这

    2024年01月17日
    浏览(52)
  • 【论文阅读】Relation-Aware Graph Transformer for SQL-to-Text Generation

    SQL2Text 是一项将 SQL 查询映射到相应的自然语言问题的任务。之前的工作将 SQL 表示为稀疏图,并利用 graph-to-sequence 模型来生成问题,其中每个节点只能与 k 跳节点通信。由于无法捕获长期且缺乏特定于 SQL 的关系,这样的模型在适应更复杂的 SQL 查询时将会退化。为了解决这

    2024年02月20日
    浏览(49)
  • 【postgresql 基础入门】数据表的创建,永久数据放普通表,中间结果放临时表,附带信用卡业务案例SQL设计

    ​ 专栏内容 : postgresql内核源码分析 手写数据库toadb 并发编程 ​ 开源贡献 : toadb开源库 个人主页 :我的主页 管理社区 :开源数据库 座右铭:天行健,君子以自强不息;地势坤,君子以厚德载物. 入门准备 postgrersql基础架构 快速使用 初始化集群 数据库服务管理 psql客户

    2024年02月07日
    浏览(254)
  • 小白详解Vue3项目中怎么引入 SVG 图标

    今天一淘模板给大家来详解Vue3项目中怎么引入 SVG 图标具体流程 SVG 图标 既然是页面,肯定离不开一些图标 icon ,所以肯定要去最全的 阿里图标库 来寻找 这里讲解下如何将 阿里图标库 里面的东西,放到我们的页面上 阿里图标库 进入页面,找到 资源管理 下面的 我的

    2024年02月09日
    浏览(43)
  • T5模型: Transfer Text-to-Text Transformer(谷歌)

    🔥 T5由谷歌发表于2019,《Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer》,最终版本发布在:JMLR。 一句话总结T5: 大一统模型,seq2seq形式完成各类nlp任务,大数据集预训练,大量实验,财大气粗,诚意满满,给nlp预训练模型领域提供了一个通用框架,提供了

    2024年02月17日
    浏览(39)
  • C# WPF 中 外部图标引入iconfont,无法正常显示问题 【小白记录】

    正确的格式,注意字体文件 “xxxx.ttf” 应写为 “#xxxx” 比如我的图标字体在当前项目的 /Assets/Fonts/ 路径下,那么我在MainWindow中引入该图标的话,应该如下面的代码一样。 点击字体文件,然后右键–属性,将生成操作选为Resource(资源)即可

    2024年02月12日
    浏览(44)
  • Text-to-3D Generation

    1)《Zero-shot text-guided object generation with dream fields》【CVPR 2023】 Project: https://ajayj.com/dreamfields Device: 未公布 前置知识: 伪影(Artifacts) 是指本不存在却出现在的影像片子上的一种成像。在图像生成领域中,可以理解是合成图片中,不自然的、反常的、能让人看出是人为处理过

    2024年02月06日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包