IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> Text to SQL综述 -> 正文阅读

[人工智能]Text to SQL综述

摘要
自然语言被认为是许多领域的最佳交互方式。但现今仍然不存在一个通用模型能提供自然语言和任何领域的接口。对绝大多数精通或不精通SQL查询语言的用户而言,通过自然语言就可以链接关系型数据库的接口很有意义。随着深度学习技术的兴起,开始涌现大量研究关系型数据库与自然语言之间的接口的工作。

本综述旨在概述从自然语言生成SQL查询这一领域中提出的一些最新方法和模型。我们描述了各种结构的模型,如卷积神经网络、递归神经网络、指针网络、强化学习等。解释并简要概述了几个旨在解决SQL查询生成问题的数据集。最后,该领域中使用的评估指标主要是作为执行精度和逻辑形式精度的组合。

关键词
SQL查询生成、文本到SQL、深度学习、语义解析、NL2SQL、Table QA
SQL Query Generation, Text-to-SQL, Deep Learning, Semantic Parsing

介绍
使用自然语言就可以查询数据库,对绝大多数不熟练使用结构化查询语(SQL)等查询语言的用户很有价值。SQL语言是当前使用的关系数据库的主要查询语言。自然语言到SQL的映射可视为语义解析问题[1]。语义解析是长期存在的问题,也是自然语言处理(NLP)中被广泛研究的问题。因此,它引起了学术界和业界的广泛关注,特别是将自然语言转换为SQL查询。当今时代,从金融、电子商务到医疗领域,大量数据都存储在关系型数据库中。因此,使用自然语言查询数据库有许多应用场景。如自助式仪表盘和动态分析,可以通过自然语言来获取与业务最相关的信息。将自然语言转换为SQL相关的任务,还有代码生成和模式生成(code generation and schema generation)。这些任务可以总结为,将自然语言翻译成完整应用程序的一般任务。

如图-1所示,用户提出自然语言问题:“what 's the total number of songs originally performed by anna nalick?”,输入到Text to sql解析器中,解析器输出SQL语句“𝑆𝐸𝐿𝐸𝐶𝑇 𝐶𝑂𝑈𝑁𝑇 𝑆𝑜𝑛𝑔 𝑐h𝑜𝑖𝑐𝑒 𝑊𝐻𝐸𝑅𝐸 𝑂𝑟𝑖𝑔𝑖𝑛𝑎𝑙 𝑎𝑟𝑡𝑖𝑠𝑡 = 𝑎𝑛𝑛𝑎 𝑐h𝑟𝑖𝑠𝑡𝑖𝑛𝑒 𝑛𝑎𝑙𝑖𝑐𝑘”,执行模块再在数据库中执行sql,返回执行结果:1。

在这里插入图片描述

图-1.Text to SQL问题示例[27]

已经有很多方法被提出来解决语义解析问题,例如:基于规则的[2]、无监督的[3]、有监督的[4]、基于响应的[5]和许多其他方法。然而,生成SQL比传统的语义解析更具挑战性。一个简短的自然语言问题可能需要连接多个表或包含多个过滤条件。这需要更多基于上下文的方法。

近年来,随着深度学习技术的发展,特别是cnn、rnn、transformer,本任务测试结果提升显著。已有不少研究试图通过将表格中的记录直接连到自然语言输入的语义表示层来生成结果,如[6]和[7]。但是,该方法无法扩展到大型表,并且在数据库结构有变更时,模型不能再复用。

最新的方法是仅使用自然语言输入、数据库结构和元数据来生成sql查询。人工标注了自然语言问题和对应数据库查询的数据集的发布,更加适合用深度学习或监督技术来解决此问题。同时,相比于原来的单表简单sql,现在发展成多表、复杂sql的问题,因此新的模型应该具备领域迁移能力。

本文的主要目的是对自然语言生成SQL的最新方法以及不同数据集和评估技术进行全面的解释和分析。下面内容:第二节描述该问题的不同数据集。第三节解释从文本生成SQL查询的不同方法。第四节概述了用于此问题的不同评估方法。最后,第五节对本文进行总结。

二、Text to SQL数据集

Text to SQL的数据集由人工标注了自然语言问题和对应的SQL查询。自然语言问题是限制在数据库数据所在领域的问题,其答案来自其数据库。即该问题是描述一个SQL查询。执行SQL查询可以从其数据库中获得问题的答案。
在这里插入图片描述
表-1
在这里插入图片描述
表-2
表-1为目前主流数据集的统计数据。表-2为另一篇文章里的统计角度[https://blog.csdn.net/tMb8Z9Vdm66wH68VX1/article/details/106324048]。

早期数据集只包含一个领域和一个数据库: ATIS [8], GeoQuery [9], Restaurants [8], [10], Academic [11], Scholar [12], Yelp [13], IMDB [13] and Advising[1] [14]。最新的数据集WikiSQL[2][15]和Spider[3][16]包含多个领域、更多的自然语言问题和更类型更全面的sql查询。数据集的大小对评估模型至关重要,语义解析的准确率与训练数据量之间存在Log的关系[Daya Guo, Yibo Sun, Duyu Tang, Nan Duan, Jian Yin, Hong Chi, James Cao, Peng Chen and Ming Zhou. Question Generation from SQL Queries Improves Neural Semantic Parsing. 2018. EMNLP.]。测试集中那些在训练集里未见过的复杂查询可以评估模型的泛化能力。[14]中的作者指出,传统数据集夸大了系统的通用性。WikiSQL虽然包含大量的自然语言问题和SQL查询,但这些SQL查询很简单,只集中在单个表上[16]。与WikiSQL相比,Spider数据集包含的问题和SQL查询数量较少,但更复杂,其SQL查询包含了不同的SQL子句,如表联接和嵌套查询[16]。

SParC[17]和CoSQL[18]是Spider数据集的扩展,该数据集是为上下文跨域语义分析和SQL系统多轮对话而创建的。这些新的数据集为该领域的研究带来了新挑战。

在这里插入图片描述
图-2 Text to SQL数据集发展趋势,代表数据集参见表-2。

涉及概念

  • 领域:根据数据库数据涉及领域数量,可分为单领域和多领域。

  • 单表/多表:根据自然语言问题涉及表格数量,分为单表和多表。在多表中,SQL生成涉及到表格的选择。

  • sql复杂度:根据自然语言问题对应的sql复杂度,数据集分为简单问题和复杂问题,其中问题复杂度由SQL查询语句涉及到的关键词数量、嵌套层次、子句数量等确定。

  • 对话轮数:根据完整SQL生成所需对话轮数,数据集分为单轮和多轮。

  • 结合对话:若SQL生成融进渐进式对话,则数据集增加“结合对话”标记。当前只有CoSQL数据集是结合对话的数据集。

三、 方法

先介绍基于编码器-解码器框架的模型。

A.SQLNet
一个完整的SQL中往往包含多个WHERE约束子句,这些子句的顺序并不影响查询结果,但从语法上看,顺序不同,对应的sql也不同。该问题会影响序列到序列模型的性能。SQLNet[4][20]试图解决该问题。SQLNet是处理WikiSQL任务的基于草图(sketch)从自然语言生成SQL查询的新方法。

在这里插入图片描述
图-3 草图语法和草图中的依赖关系[20]

如图-3所示,该草图可以表示所有该数据集涉及的SQL查询。这些sql分为两种不同的标记类型:关键字(keywords)和要填充的槽(slots)。槽存在于SELECT子句或WHERE子句中,即图中长方形框。槽值分为以下几类:其中AGG为聚合函数,一般有五种:sum,max,min,std,count ;COLUMN是列名,OP有>,=,<等,VALUE是自然语言问题中的子字符串。

SQLNet的思路:采用插槽填充的思想,通过对自然语言问句的刨析来向SQL结构中的插槽填充各种值。这样有效地避免了seq2seq中where语句的顺序问题。

提出两种方法来完成插槽填充:
Sequence-to-set(序列到集合)
Column attention(列注意力)

Sequence-to-set(序列到集合)完成where子句预测:

WHERE子句由三种槽组成:列(column)、操作符和值(value)。这些槽可以出现多次,就像在实际sql中,可以有多个过滤条件。在预测WHERE子句时,作者首先需要预测条件中包含哪些列,这些列是表格所有列名集合的一个子集,这种思想即为Sequence-to-set。即列名出现在自然语言查询中的概率,计算公式为:
在这里插入图片描述

  • 其中σ是sigmoid函数
  • E c o l E_{col} Ecol? E Q ∣ c o l E_{Q|col} EQcol? 分别是列名称和自然语言问题的词嵌入
  • u c T u^T_{c} ucT? u q T u^T_{q} uqT?是两个可训练的列向量。

E c o l E_{col} Ecol? E Q ∣ c o l E_{Q|col} EQcol? 嵌入分别被双向LSTM[21]编码成隐状态(hidden states),两个双向LSTM之间不共享权重,这使得对某一列的选择是独立于其他列的。具有额外的列注意机制,能够记住在预测特定列名时有用的特定信息。计算(col | Q)后,下一步是预测WHERE子句中需要包括哪些列。更准确地说,作者使用网络预测列槽的数量,将其转化为+1分类问题,其中是要选择的列数的上限。Ecol情商|上校情商|上校PwherecolKNN
在where子句中选择顶部列后,将进行预测,以预测三个可能的操作数{=,}中的一个。此预测再次使用列注意嵌入,它清楚地显示了操作数与将在其上使用操作数的特定列之间的逻辑连接。对于每一列,该方法还需要预测值槽。与列槽不同,标记的顺序在值槽中很重要,因此sequenceto序列结构用于从自然语言问题预测子串。编码器阶段仍然采用双向LSTM,而解码器阶段使用带有列注意机制的指针网络[22]、[23]计算下一令牌的分布。K><情商|上校
另一方面,SELECT子句由两种类型的插槽组成:聚合器和列名。另一个区别是SELECT子句中只有一个列名,而WHERE子句中有多个列名槽。但是,该预测与WHERE子句中的预测相同,请记住,该模型仅尝试预测一列。在预测列之后,还将预测聚合器的概率,该聚合器共享
结构类似于WHERE子句中对操作槽所做的预测,因为有五个可能的聚合器可供选择。

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-08-05 17:21:26  更:2021-08-05 17:24:22 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/7 23:17:17-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码