当前位置: 首页 > article >正文

ZeroNL2SQL:零样本 NL2SQL

发布于:2024 年 10 月 30 日 星期三

#RAG #NL2SQL # Zero-Shot

自然语言到 SQL(NL2SQL)的转换是一个重要的研究领域,它允许非技术用户轻松访问和分析数据,在商业智能、数据分析等领域具有广泛的应用前景。然而,现有的 NL2SQL 方法在面对新的数据库、新的语言现象或 SQL 结构时,往往表现出性能下降的问题。为了解决这一问题,本文研究零样本 NL2SQL,旨在构建一个能够适应各种测试环境的 NL2SQL 模型,而不需要来自测试环境的标注样本。

欢迎关注作者,接收最前沿的人工智能技术

一、引言

1.1 研究背景与动机

自然语言到 SQL(NL2SQL)的转换是一个重要的研究领域,它允许非技术用户轻松访问和分析数据,在商业智能、数据分析等领域具有广泛的应用前景。然而,现有的 NL2SQL 方法在面对新的数据库、新的语言或 SQL 结构时,往往表现出性能下降的问题。为了解决这一问题,本文研究零样本 NL2SQL(Zero-shot NL2SQL),旨在构建一个无需标注样本就能够适应各种新环境的 NL2SQL 模型(ZeroNL2SQL)。综合实验表明,ZeroNL2SQL 在真实的基准测试中可以实现最佳的零样本 NL2SQL 性能。具体而言,ZeroNL2SQL 在执行准确性方面比最先进的基于 PLM 的方法高出 3.2%至 13%,比基于 LLM 的方法高出 10%至 20%。

1.2 零样本 NL2SQL 的挑战

1.2.1 数据库模式对齐

在 NL2SQL 任务中,理解数据库的结构对于生成准确的 SQL 查询至关重要。然而,将自然语言问题与数据库模式中的表、列和关系正确对齐是具有挑战性的,尤其是当存在多个可能匹配的表时。

1.2.2 复杂的自然语言推理

NL2SQL 任务通常涉及复杂的自然语言问题,需要高级推理能力。理解问题的语义、解决歧义以及进行逻辑推导对于生成精确的 SQL 查询是必要的。

1.2.3 数据库实例对齐

这涉及将自然语言问题中提供的信息映射到数据库中存储的相关数据的值。模型需要理解问题的意图,并识别与问题和数据库内容都匹配的特定谓词。例如,在图 1 中,NL2SQL 模型需要生成一个 SQL 谓词 given_name = 'timmy' (而不是 'timmothy')

1.3 现有方案的优势和局限性

1.3.1 基于预训练语言模型(PLMs)

优势:在模式对齐子任务中表现出色,能确定 SELECT 子句中要包含的适当属性以及 FROM 子句中要包含的相关表。

局限性:在零样本设置下不擅长复杂推理。

1.3.2 大型语言模型(LLMs)

优势:在复杂推理任务中表现优越,特别是在处理 WHERE 子句下的谓词时,能够处理复杂的逻辑推导。

局限性:无法实现精确的模式对齐,倾向于选择更多的列和表,导致执行结果不正确,在数据库实例对齐方面存在不足。

1.4 提出的框架 ZeroNL2SQL

基于 PLMs 和 LLMs 的优势互补,作者提出了 ZeroNL2SQL 框架,该框架主要包括两个关键步骤:

1.4.1 SQL 草图生成

利用可调的 PLMs 进行数据库模式对齐并生成一个 SQL 草图,包括 SELECT 的属性、FROM 包含的表以及组成 SQL 查询的必要关键字。

1.4.2 SQL 查询补全

利用 LLMs 填充 SQL 草图中缺失的信息,并通过与数据库中的数据值对齐来校准谓词。

二、预备知识

2.1 零样本 NL2SQL

零样本 NL2SQL 是指推理环境中的数据不在训练集中出现,主要包括在新数据库上测试、在新问题上测试和在新 SQL 上测试三种情况。

2.2 SQL 草图(SQL Sketch)

SQL Sketch 由三部分组成(图 5 所示):SELECT(需要返回给用户的属性)、FROM(用于获取数据的表)和 KEYWORDS(代表子句的关键字)。

2.3 SQL 语言模型

  1. 预训练语言模型(PLMs):可以由普通用户本地托管,并针对不同的下游任务进行微调,如 BERT、BART 和 GPT2 等。
  2. 大型语言模型(LLMs):只能通过网络服务或 API 调用访问,如 ChatGPT、PaLM、GPT4 和 GLam 等。LLMs 通过上下文学习和指令遵循实现零样本复杂推理,而 PLMs 主要通过微调适应下游任务。

2.4 用于 NL2SQL 的语言模型

可以利用适当的提示来引导语言模型进行 NL2SQL 任务,并且考虑到 NL2SQL 任务的复杂性,可以采用上下文学习来更好地引导语言模型生成 SQL 查询。

三、ZeroNL2SQL 框架概述

3.1 PLMs 生成 SQL 草图

给定用户问题和数据库模式,SQL Sketch Generation Module 生成一个 SQL 草图候选列表,并传递给固定的 LLM。

3.2 LLMs 完成 SQL 查询

给定一组 SQL 草图候选,SQL Query Completion Module 利用 LLM 完成细节并选择最优的 SQL 查询作为最终输出。为了支持该框架,开发了两个关键模块:

3.2.1 SQL Sketch Generation(SQL 草图生成) 模块

首先将问题建模为一个序列到序列的生成问题,使用基于编码器 - 解码器的 PLM 生成 SQL 草图。采用数据库感知序列化策略和问题感知对齐器来提高草图生成的准确性。

3.2.2 SQL Query Completion(SQL 查询补全) 模块

设计了谓词校准方法来解决数据库实例对齐问题,并提供合适的谓词推荐给 LLM。采用基于执行的选择策略来选择最优的 SQL 查询。

四、SQL 草图生成

这段文本主要介绍了 SQL 草图生成,它能生成一个排序列表的 SQL 草图,正如在图 7 中所示。首先在 4.1 节引入了一个配备数据库感知序列化策略的 SQL 草图学习框架,然后在 4.2 节开发了问题感知对齐,以便根据自然语言问题的语义进一步对 SQL 草图进行排序。

4.1 SQL Sketch Learning 的过程

4.1.1 数据库感知序列化

在 SQL Sketch Learning 中,数据库感知序列化是一个关键步骤。它将用户问题和数据库模式与不同的指令进行组合,为每个子任务构建特定的输入。通过使用括号和索引对数据库进行序列化,使得 PLM 能够根据用户问题准确地选择与问题最匹配的表 / 列索引,而不是简单地从问题中直接复制表 / 列名称。这种方法有效地避免了 PLM 在面对不同测试环境时可能出现的错误选择,提高了草图生成的准确性。例如,在处理一个关于汽车模型的问题时,如果数据库中有多个与汽车相关的表,通过数据库感知序列化,PLM 能够准确地选择到包含所需信息的表和列。

4.1.2 参数学习

同时,为了训练 PLM 能够更好地生成 SQL 草图,还需要进行参数学习。对基于编码器 - 解码器的 PLM 进行监督微调,在这个过程中,同时在三个子任务上进行多任务学习。通过从标注的 NL2SQL 数据集中提取训练数据,构建包含指令、数据库模式、用户问题和目标标签的数据集。然后通过最小化最大似然来优化模型的参数,使得 PLM 能够更好地学习到如何生成准确的 SQL 草图。

4.2 问题感知对齐器的作用与实现

4.2.1 作用

问题感知对齐器的主要作用是进一步优化 SQL 草图候选。虽然 PLM 通过数据库感知序列化能够生成初步的草图,但在语义层面上,对于 SELECT 和 KEYWORDS 部分可能还不够精准。问题感知对齐器就是为了弥补这一不足,使这两个部分能够更紧密地与问题的意图和要求对齐。例如,当问题是关于 “某个课程的最高得分” 时,问题感知对齐器能够确保 SELECT 部分选择的是 “课程得分” 相关的属性,KEYWORDS 部分包含 “ORDER BY” 关键字。

4.2.2 实现

问题感知对齐器的实现过程如下:首先,它取 SELECT 集合和 KEYWORDS 集合的笛卡尔积得到最终候选集。然后,对于候选集中的每个元素,将其与用户问题串联形成输入序列,通过基于编码器的 PLM 将其转换为高维表示。接着,将这个高维表示输入到一个全连接层,计算出 SELECT 和 KEYWORDS 与用户问题之间的对齐分数。最后,根据对齐分数选择最优的候选组合,从而实现对 SQL 草图的进一步优化。为了训练问题感知对齐器,对基于编码器的 PLM 进行监督微调。根据 SELECT 和 KEYWORDS 是否正确设置对齐标签,通过最小化交叉熵损失来优化参数,使得问题感知对齐器能够更好地学习到如何选择最优的候选组合。

五、SQL 查询补全

5.1 谓词校准的方法与流程

5.1.1 多级匹配

在谓词校准过程中(算法 1 所示),多级匹配是一个重要的方法。由于 LLM 预测的谓词可能存在错误,包括预测值不正确或预测列不正确等情况,多级匹配就是为了纠正这些错误。它按照列、表和数据库三个级别顺序匹配谓词的值。在任何一个级别,如果找到一个与预测值足够接近的值,就会终止匹配过程,并将这个新的值和对应的列作为新的谓词返回给 LLM。例如,当 LLM 预测的谓词中某个值与数据库中的实际值不完全匹配时,通过多级匹配,可以在表级别或数据库级别找到更合适的值来替换,从而确保谓词的准确性。

5.1.2 相似度计算

相似度计算是多级匹配过程中的一个关键环节。相似度计算方法主要分为基于字符和基于语义两类。基于字符的相似度计算可以使用模糊匹配方法,例如通过计算插入和删除字符的数量来衡量两个值之间的相似度。基于语义的相似度计算则需要将值转换为高维向量表示,然后通过计算内积来得到相似度分数。在将值转换为高维向量表示时,可以采用 word2vec - 基于和 PLM - 基于的方法。例如,对于一个单词,可以通过查找预训练的 GloVe 字典来获得其基于 word2vec 的向量表示,或者通过 Sentence Bert(SBERT)来获得其基于 PLM 的向量表示,然后根据不同的方法计算相似度分数,从而为多级匹配提供更准确的参考。

5.2 SQL 查询选择的策略与执行

5.2.1 策略

SQL 查询选择采用基于执行的策略。基于对 SQL 执行结果能够反映其质量的观察,通过对生成的 SQL 查询进行实际执行测试,根据执行结果来选择最优的查询作为最终输出。这种策略的核心思想是,只有能够正确执行并返回正确结果的 SQL 查询才是最优

5.2.2 执行

具体执行过程如下:首先,将 SQL 草图候选输入 LLM 生成 SQL 查询。然后,对生成的 SQL 查询进行可执行检查,如果不可执行则反馈错误信息给 LLM,直到得到可执行的查询。接着,将可执行的查询输入谓词校准模块,得到基于数据库的 SQL 查询。最后,如果执行结果不为 NULL,则返回该 SQL 查询作为最终结果。通过这种方式,确保最终选择的 SQL 查询能够在数据库中正确执行并返回所需的结果。

六、实验

6.1 实验设置的详细介绍

6.1.1 数据集

在实验中,使用了 Spider 作为训练集,这是一个被广泛采用的 NL2SQL 数据集。同时,使用 Dr.Spider 和 KaggleDBQA 作为评估基准。Dr.Spider 包含基于 Spider 的 17 种不同类型的扰动测试集,这些扰动包括数据库扰动、问题扰动和 SQL 扰动等,能够全面地测试模型在不同零样本情况下的性能。KaggleDBQA 则包含真实世界的问题和数据库,其数据和问题更加贴近实际应用场景。

6.1.2 评估指标

采用执行准确率(EX)作为评估指标。这是因为在 LLMs 中使用的 SQL 表达式风格可能与 NL2SQL 基准中的真实结果不同,传统的基于字符串的评估指标如精确匹配准确率并不适合本实验。执行准确率通过比较生成的 SQL 查询和从数据库中检索到的相应真实 SQL 查询的执行结果来衡量模型的性能。

6.1.3 基线

考虑了两种类型的基线。一类是基于 PLM 的 SOTA 模型,包括 SMBOP、T5 - 3B LK、Picard 和 RESDSQL 等,这些模型都是在 Spider 训练集上进行微调的。另一类是基于 LLM 的方法,包括 vanilla LLMs、LLM + In - Context Learning 和 DIN - SQL 等。这些基线模型涵盖了目前在 NL2SQL 领域中比较先进的方法,通过与它们进行比较,可以更好地评估本文提出的 ZeroNL2SQL 框架的性能。

6.1.4 实现细节

在实验中,采用 ChatGPT-3 作为 LLM,这是基于 OpenAI 的 gpt-3.5-turbo,目前被广泛使用。对于 SQL Sketch Generation,采用 T5-3B 作为骨干的编码器 - 解码器 PLM。同时,设置了一系列的参数,如批量大小、学习率、训练轮数等,并使用了相应的优化算法如 Adafactor 和 Adam 等。在 SQL Query Completion 模块中,使用 Sentence Bert 和预训练的 GloVe 字典来获取值的嵌入,通过设置合适的相似度阈值来进行相似度计算。所有实验都在 1 NVIDIA RTX A6000 48G 上使用 PyTorch 实现。

6.2 与基于 PLM 的方法比较结果分析

6.2.1 在 Dr.Spider 上的实验结果

在 Dr.Spider 基准的 17 个测试集中进行实验,结果显示 ChatGPT + ZeroNL2SQL 在性能上优于所有基线,包括基于 PLM 的 SOTA 模型和 vanilla ChatGPT。具体来看,数据库和用户问题的扰动对 NL2SQL 性能影响较大,SQL 扰动影响较小。结合 ZeroNL2SQL 后,ChatGPT 在困难测试集上表现出更好更稳定的 NL2SQL 性能。例如,在一些复杂的数据库结构和问题条件下,ChatGPT 本身可能无法准确地生成 SQL 查询,但通过 ZeroNL2SQL 框架的辅助,能够显著提高其性能,生成更准确的 SQL 查询。

6.2.2 在 KaggleDBQA 上的实验结果

在 KaggleDBQA 数据集上进行实验,结果表明与基于 PLM 的 SOTA 模型相比,ChatGPT + ZeroNL2SQL 的执行准确率显著提高。这表明在相同训练集下,ZeroNL2SQL 在完全不同的测试集上能表现出更好的零样本推理能力。由于 KaggleDBQA 的数据和问题更加贴近实际应用场景,这种性能提升更加凸显了 ZeroNL2SQL 框架的优势。例如,在处理一些真实世界中的复杂商业数据和问题时,ZeroNL2SQL 能够更好地适应并提供准确的 SQL 查询结果。

6.3 与基于 LLM 的方法比较结果分析

6.3.1 性能比较

在 EX 准确率方面,比较了不同的上下文学习方案,包括随机采样和基于相似度的采样方法。结果发现,这些不同的采样方法差异不大,且示例数量对性能影响较小。与上下文学习相比,ZeroNL2SQL 在 KaggleDBQA 上能带来更显著的改进,并对 ChatGPT 实现更稳定的改进。例如,在某些特定的测试集上,上下文学习可能会因为示例选择的局限性而导致性能波动,而 ZeroNL2SQL 通过其独特的框架结构和算法流程,能够更稳定地提升性能。

6.3.2 成本比较

在调用 ChatGPT API 的平均令牌数量方面,ZeroNL2SQL 接近 vanilla ChatGPT 且远低于各种上下文学习方法。这是因为 ZeroNL2SQL 通过学习示例并将其转换为定制的 SQL 草图来引导 LLM,而不是直接将示例提供给 LLM。这种方式不仅提高了性能,还降低了成本,使得模型在实际应用中更具优势。例如,在处理大量数据和频繁查询的场景下,较低的令牌消耗意味着更低的成本和更高的效率。

6.4 消融研究结果分析

6.4.1 SQL Sketch Generation 模块组件的影响

数据库感知序列化策略对生成 SQL 草图影响最大。它避免了模型过度关注用户问题,使模型能基于数据库模式生成有效草图。例如,在一些复杂的数据库结构中,如果没有数据库感知序列化策略,模型可能会错误地选择表和列,导致生成的草图无法准确反映数据库的结构。问题感知对齐器对 SELECT 和 KEYWORDS 部分有增益,有助于 SQL 草图生成。它能够进一步优化草图,使其更符合问题的意图和要求,提高草图的准确性和实用性。

6.4.2 谓词校准中值匹配方法的评估

多级匹配方法性能最佳。它能够有效地纠正 LLM 预测的谓词错误,通过在列、表和数据库三个级别顺序匹配谓词的值,提高了谓词的准确性。在相似度计算方法中,SBERT 方法表现出更稳定和优异的性能,能更好地捕捉值的整体含义。例如,在处理一些语义复杂的词汇时,SBERT 能够更准确地计算相似度,为多级匹配提供更可靠的依据。

七、相关工作

7.1 基于 PLM 的 NL2SQL

许多工作将预训练语言模型应用于 NL2SQL 任务,分为仅编码器的 PLMs 和编码器 - 解码器的 PLMs。对于仅编码器的 PLMs,如 BERT 等,一些研究通过利用图神经网络等方法进一步处理用户问题和数据库模式,然后通过语法神经解码器生成 SQL 查询。对于编码器 - 解码器的 PLMs,如 T5 等,一些方法将 NL2SQL 任务作为端到端的翻译问题进行处理,并采用一些特定的策略如关系感知自注意力、模式选择和约束解码等来提高生成 SQL 查询的准确性。然而,ZeroNL2SQL 的目标是使 PLMs 在新的测试环境中生成准确的 SQL 草图,因此关注测试环境变化对 PLMs 的影响并提出自适应方法,以更好地适应零样本 NL2SQL 的需求。

7.2 基于 LLM 的 NL2SQL

一些工作尝试将大型语言模型应用于 NL2SQL 任务。例如,有的研究评估了 CodeX 模型的零样本 NL2SQL 能力,还有的进一步验证了其在该任务上的稳健性并提出了有效的示例采样方法。随着 ChatGPT 的流行,也有研究探索了其零样本 NL2SQL 推理能力,并指出其与现有基于 PLM 微调的方法存在差距,但在新数据集上表现出较强的稳健性。为了提高 LLMs 在 NL2SQL 任务上的有效性,一些方法如 DIN - SQL 通过添加不同子任务的示例来使 LLMs 能够逐步生成 SQL 查询。与这些方法不同,ZeroNL2SQL 通过可调的 PLMs 为固定的 LLM 生成细粒度的指导(即 SQL 草图),显著提高了 NL2SQL 的准确性,同时确保了高效率。

八、结论与未来工作

8.1 研究成果总结

本文提出了 ZeroNL2SQL 框架,通过交错可调的 PLM 和固定的 LLM,有效地解决了零样本 NL2SQL 生成的问题。该框架由 SQL Sketch Generation 和 SQL Query Completion 两个模块组成,分别利用 PLMs 和 LLMs 的优势,克服了各自的局限性。通过在 Dr.Spider 和 KaggleDBQA 等基准上的广泛实验,证明了 ZeroNL2SQL 框架在零样本 NL2SQL 性能上优于现有的基于 PLM 和基于 LLM 的方法。这一成果为 NL2SQL 领域的研究提供了新的思路和方法,有助于推动该领域在实际应用中的发展,使非技术用户能够更方便、准确地通过自然语言与数据库进行交互。

8.2 扩展到对话式 NL2SQL 任务

考虑到 LLMs 的优秀交互能力,ZeroNL2SQL 可以应用于对话式 NL2SQL 任务。在对话式环境中,用户可能会提出一系列相关的问题,模型需要根据对话的上下文和历史信息来生成准确的 SQL 查询。这就需要进一步研究如何更好地利用 LLMs 的交互能力和 ZeroNL2SQL 框架的现有优势,来适应对话式 NL2SQL 任务的特殊需求。例如,可以探索如何在对话过程中动态更新 SQL 草图和查询,以及如何处理对话中的歧义和平滑过渡问题。

8.3 扩展到超大数据库

考虑到 ZeroNL2SQL 中的有效谓词校准方法,经过效率优化后可以扩展到超大数据库。超大数据库往往具有海量的数据和复杂的结构,这对模型的性能和效率提出了更高的要求。通过进一步优化谓词校准方法和整个 ZeroNL2SQL 框架的算法流程,可以使其更好地适应超大数据库的环境。例如,可以研究如何在大规模数据上更快速地进行谓词匹配和校准,以及如何优化 SQL 草图生成和查询完成的过程,以提高整体性能和效率。


论文地址:Interleaving Pre-Trained Language Models and Large Language Models for Zero-Shot NL2SQL Generationicon-default.png?t=O83Ahttps://arxiv.org/pdf/2306.08891

代码地址:GitHub - ruc-datalab/ZeroNL2SQLContribute to ruc-datalab/ZeroNL2SQL development by creating an account on GitHub.icon-default.png?t=O83Ahttps://github.com/ruc-datalab/ZeroNL2SQL

原文链接:ZeroNL2SQL:零样本 NL2SQL本文研究零样本 NL2SQL,旨在构建一个能够适应各种测试环境的 NL2SQL 模型,而不需要来自测试环境的标注样本。icon-default.png?t=O83Ahttps://mp.weixin.qq.com/s/xXenKZQuvcsTkeNuuczSqA


http://www.kler.cn/a/373130.html

相关文章:

  • nodejs包管理器pnpm
  • 奥数与C++小学四年级(第十二题 装礼盒)
  • 如何解决RabbitMQ消息的重复消费问题
  • 链表:两数相加
  • Unity3D 开发教程:从入门到精通
  • C++ 中回调函数的实现方式-函数指针
  • 第三百零三节 Log4j教程 - Log4j安装
  • MATLAB/Simulink学习|在Simulink中调用C语言-02使用C Function 实现积分运算
  • orbslam安装
  • Unity 打包AB Timeline 引用丢失,错误问题
  • 从零开始机器学习——基于PyTorch构建你的第一个线性回归模型
  • VS离线安装NuGet包
  • WordPress插件 Lightsns主题专版-AI内容生成 V1.6 AI驱动的内容创作工具
  • 基于深度学习的声纹识别
  • ubuntu限制网速方法
  • 部署通义千问到后端-过程记录
  • 阿里云开源 AI 应用开发框架:Spring AI Alibaba
  • ip命令网络配置详解
  • GIS基础知识:WKT格式、WKB格式
  • 「C/C++」C++标准库之#include<fstream>文件流
  • 深入布局- grid布局
  • echarts属性之radar
  • React 异步渲染机制
  • 鸿蒙生态未来的发展趋势探讨?
  • 【STM32 Blue Pill编程实例】-4位7段数码管使用
  • Spring Boot 开发常见问题及解决方案汇总