微信扫码
与创始人交个朋友
我要投稿
METASQL 采用生成-排序的统一框架,可与现有 NLIDBs 结合提升翻译准确性。其核心在于引入查询元数据和学习排序算法。在查询元数据方面,设计了包括操作符标签、硬度值和正确性指示符等类型,通过多标签分类器将自然语言查询语义映射到这些元数据,以此作为生成 SQL 查询的约束条件。在生成阶段,对于 Seq2seq 模型利用元数据增强训练,并在推理时基于分类器获取的元数据组合生成多样候选 SQL 查询,而 LLM 则借助自身能力结合元数据引导生成。在排序阶段,采用两阶段排序管道,第一阶段用双塔架构粗筛,第二阶段利用多粒度监督信号精筛,综合考量 NL 和 SQL 的语义相似性确定最佳查询结果。
01
—
在当今数字化时代,数据库的应用极为广泛,但传统的数据库查询语言(如 SQL)对于非技术人员来说学习成本较高。自然语言接口到数据库(NLIDB)技术的出现,旨在让普通用户也能轻松访问数据库。过去几十年间,研究人员探索了多种方法,其中利用神经序列到序列(Seq2seq)模型或大规模语言模型(LLMs)的方法较为常见,它们通常采用自回归解码方式逐一生成 SQL 查询。
尽管这些方法在翻译准确性上取得了一定进展,如在 NLIDB 基准测试中准确率超过 70%,但仍存在明显缺陷。以常用的 SPIDER 基准测试为例,当前最先进的模型在语法等价翻译的测试集上准确率仅为 74.0%。问题主要体现在两个方面:一是输出多样性不足,自回归解码在生成候选序列时往往缺乏变化,容易产生重复结果。例如,LGESQL 模型使用束搜索时,其生成的 top - K 候选结果相似度较高,可能导致最终的错误翻译。二是缺乏全局上下文感知能力,由于是逐个生成输出标记,仅考虑部分上下文,容易陷入局部最优,无法找到正确的翻译。
为了改进现有方法,一些研究进行了尝试。如多任务生成框架虽在对话翻译场景取得一定成果,但仍依赖标准自回归解码获取最终结果,并非最优。还有研究提出新的生成方法,但需要基于一组代表性样本查询假设。在此背景下,METASQL 框架应运而生,它旨在增强 NL2SQL 翻译中的自回归解码过程,通过引入控制信号来提升 SQL 生成的质量。
02
—
这是一种模型逐个生成输出序列元素的解码策略,每个元素的生成依赖于之前生成的元素。在自回归模型中,解码涉及学习一个评分模型 ,其基于从左到右的分解方式,目标是在给定输入序列 A 时找到高分输出序列 P。但传统的单向解码算法(如贪婪搜索和束搜索)在生成高分输出序列方面效果不佳,因为解码历史中的错误可能会对后续结果产生负面影响。
主要分为两类,Seq2seq 模型和基于 LLM 的模型。Seq2seq 模型遵循特定学习框架,先将自然语言查询和数据库模式联合编码,再通过自回归解码器生成 SQL 程序的分布。其解码器的学习目标可以是原始 SQL 标记、SQL 语言的中间表示或 SQL 抽象语法树等。LLM 作为 NL2SQL 模型时,在给定自然语言查询和提示的情况下,可以自动回归生成相应 SQL 查询,提示技术包括零样本、少样本提示或上下文学习等,提示内容可以是文本指令、翻译示例或推理链等。
如图 2 的第一步,将自然语言查询的语义解析重新定义为分类问题,利用多标签分类器将自然语言语义映射到一组相关的查询元数据。这些元数据是与底层数据库相关的类别标签,能够捕捉自然语言查询的上下文信息。例如,对于“查询不说英语的国家代码”这样的查询,可能会选择“project”和“except”等操作符标签以及表示查询难度的“400”作为元数据。
如图 2 的第二部分,对于 Seq2seq 模型,通过在训练数据中添加元数据作为前缀语言提示来增强模型。训练数据由自然语言查询、对应的 SQL 查询和相关元数据组成,收集方式基于弱监督原则。例如,对于操作符标签类型的元数据,直接从 SQL 查询中获取;硬度值类型的元数据根据 SPIDER 基准的定义计算;正确性指示符类型的元数据根据数据来源确定。在推理阶段,利用多标签分类器获取查询元数据,然后基于这些元数据组合操纵翻译模型生成一组候选 SQL 查询。例如,对于上述查询示例,可能会基于“where”标签和“200”的评级值生成类似下面的候选查询。
SELECT countrycode FROM CountryLanguage WHERE language!='English'
如图 2 的第三部分,采用两阶段排序流程确定最佳翻译结果。第一阶段使用双塔架构构建粗粒度排序模型,通过两个 BERT 类似的双向文本编码器和余弦相似度函数,快速从大量候选 SQL 查询中筛选出较小的潜在候选集。其训练数据由自然语言查询、SQL 查询和语义相似度分数组成,通过比较 SQL 查询与“黄金”SQL 查询的条款来计算分数。第二阶段使用多粒度监督信号构建细粒度排序模型,对第一阶段的结果进一步排序,以找到最匹配的 SQL 查询。该模型包括上下两个编码器用于捕获多粒度语义,通过多种损失函数(全局、局部和短语损失)计算匹配分数,并在推理时综合考虑各分数对候选 SQL 查询进行排序。
SELECT countrycode FROM CountryLanguageEXCEPT SELECT countrycode FROMCountryLanguage WHERE language='English'
03
—
METASQL 设计了三种类型的元数据,包括操作符标签、硬度值和正确性指示符。操作符标签对应于单个逻辑运算符,指示 SQL 组件用于翻译。例如,对于特定查询,“project”标签表示选择操作,“except”标签表示排除操作。硬度值根据 SQL 组件的数量和类型量化查询的潜在复杂性,通过为每个 SQL 组件分配难度分数并求和得到。正确性指示符用于区分正确和错误的查询,在推理时通常为真,但在训练时可变化以帮助模型学习。
将自然语言到元数据的映射视为分类问题,利用多标签分类模型实现。该模型与底层 NL2SQL 翻译模型共享编码器,通过将解码器替换为分类层来输出标量值。在推理阶段,设置分类阈值 选择概率较高的元数据标签,从而将自然语言查询的语义分解为对应的元数据,有助于发现更多语义等价的 SQL 查询。
在模型训练中,将查询元数据作为前缀添加到自然语言查询中,遵循传统的 seq2seq 范式。收集训练数据时,确保每个样本包含自然语言查询、对应的 SQL 查询和相关元数据。同时,为了让模型更好地区分正确和错误的目标序列,还收集了 SPIDER 基准训练集中现有翻译模型的错误翻译作为负样本,并为其分配“incorrect”的正确性指示符作为元数据。模型输入时,将元数据扁平化为序列并与自然语言查询连接,例如“correct | rating : 400 | tags : project, except”这样的形式。
在推理阶段,由于查询元数据未知,首先使用多标签分类模型获取初始元数据标签。然后,考虑训练数据中的组合情况,选择性地组合这些标签,以基于元数据条件生成一组候选 SQL 查询。这类似于 LLM 中的提示方法,通过不同的元数据条件引导模型生成多样化的翻译结果。
采用双塔架构,包括 NL 查询编码器和 SQL 编码器以及余弦相似度函数。通过在大量自然语言查询和 SQL 查询对上进行训练,学习如何快速筛选出与给定自然语言查询语义相关的候选 SQL 查询。训练数据中的语义相似度分数根据 SQL 查询与“黄金”SQL 查询的匹配程度计算,若完全匹配则为 1,否则根据条款差异进行扣分。
鉴于第一阶段模型在精确排序上的局限性,该阶段旨在利用多粒度监督信号更准确地找到最佳 SQL 查询。模型架构包括粗粒度和细粒度编码器,通过引入额外的短语级语义信息,并采用列表式方法进行训练。在训练过程中,使用多种损失函数(全局、局部和短语损失)来综合衡量 NL-SQL 对的匹配程度,以提高排序的准确性。例如,全局损失衡量句子级别的跨模态匹配相似性,局部损失增强细粒度的跨模态匹配,短语三元组损失则用于最大化正对内的细粒度相似性并最小化负对内的相似性。在推理时,综合考虑各部分得分对候选 SQL 查询进行最终排序。
04
—
在具有挑战性的 NLIDB 基准测试 SPIDER 和 SCIENCEBENCHMARK 上进行实验。SPIDER 是大规模跨域基准,包含大量自然语言查询和 SQL 查询以及多个数据库,其数据根据 SQL 难度分为不同类型。由于 SPIDER 测试集难以获取,实验主要关注验证集,并通过提交给作者获取测试集结果。SCIENCEBENCHMARK 则是针对三个真实世界科学数据库的复杂基准,包含领域专家制作的高质量 NL-SQL 对以及合成数据。
多标签分类模型基于 LGESQL 模型替换顶层为分类层实现。第一阶段排序模型的嵌入层使用预训练的 STSB-MPNET- BASE-v2 模型初始化,采用 Adam 优化器进行训练。第二阶段排序模型基于 ROBERTA-LARGE,同样使用 Adam 优化器,并根据学习停滞情况调整学习率,同时配置相关参数以生成合适数量的 SQL 查询用于训练。
多标签分类模型的分类阈值 设置为 0,以选择所有可能的元数据标签。第一阶段排序模型选择排名前十的候选 SQL 查询子集传递给第二阶段排序模型进行最终推理。
采用翻译准确率(EM)、执行匹配(EX)、翻译精度(Precision@K)和平均倒数排名(MRR)等指标评估模型性能。翻译准确率判断生成的 top-1 SQL 查询是否与“黄金”SQL 匹配;执行准确率通过在数据库上执行 SQL 查询并与真实结果比较;翻译精度评估前 K 个翻译结果中包含“黄金”SQL 查询的自然语言查询数量占比;MRR 则衡量模型将“黄金”SQL 查询排在前列的能力。
在两个基准测试上,METASQL 均能有效提升所有模型的性能。对于 Seq2seq 模型,在 SCIENCEBENCHMARK 上的提升更为显著。特别是 LGESQL 模型,在应用 METASQL 后,在 SCIENCEBENCHMARK 的 SDSS 数据库上提升了 8.0%,在 SPIDER 验证集和测试集上分别达到 77.4%和 72.3%的翻译准确率,且执行准确率也有大幅提高。对于基于 LLM 的模型(如 CHATGPT 和 GPT-4),METASQL 同样显著提升了其性能,这得益于 LLM 强大的生成能力以及 METASQL 对其生成的引导作用。
按 SQL 难度级别分析,随着难度增加,所有模型性能下降,但 METASQL 能在“Medium”和“Hard”查询上显著提升模型性能,不过在“Easy”和“Extra Hard”查询上可能出现不稳定情况。对于“Easy”查询,可能是由于 METASQL 对语义等价查询的排序导致评估失败;对于“Extra Hard”查询,可能是复杂查询中多粒度信号不准确导致排名错误。按 SQL 语句类型分析,METASQL 对涉及 ORDER BY 和 GROUP BY 子句的查询翻译提升明显,这得益于排序过程;但对于嵌套类型的复杂查询,Seq2seq 模型结合 METASQL 可能会出现性能下降。
METASQL 在排序方面表现出色,例如 RESDSQLLARGE + METASQL 达到 78.8%的翻译 MRR,LGESQL + METASQL 等在 top-5 检索结果中也有较高的翻译精度。这表明 METASQL 能够在多数情况下正确选择目标 SQL 查询,优于传统的自回归解码技术。
对 METASQL 各阶段性能分析发现,三个阶段(元数据选择、元数据条件生成、排序)整体性能较为稳定。其中,元数据条件生成阶段相对波动较大,这与底层翻译模型的局限性有关。但总体而言,METASQL 有效优化了各阶段性能,促进了整体性能的提升。
通过降低多标签分类器的分类阈值 引入更多“噪声”元数据,发现 METASQL 的性能对元数据质量有很强的依赖性。当 低于 - 10 时,性能显著下降,因为过多的“噪声”元数据干扰了模型的判断。
实验表明 METASQL 对正确性指示符的变化较为敏感,提供错误的指示符会导致性能下降,且比不提供指示符的情况更差,说明正确的元数据对于模型性能至关重要。
METASQL 的性能对硬度值变化相对稳定,这是因为多标签分类器获取的硬度值通常与真实值接近,且模型会综合考虑多种元数据。同时,设置较容易的硬度值往往比困难的硬度值能带来更好的结果。
METASQL 对操作符标签类型的元数据较为敏感,使用正确的操作符标签能显著提高性能,因为它为模型提供了有效的生成约束,减少了搜索空间。
通过在 SPIDER 验证集上对 LGESQL 进行消融实验,发现去除多标签分类器或第二阶段排序模型会导致性能大幅下降。这表明多标签分类器在获取相关元数据方面以及第二阶段排序模型在精确排序方面都起着关键作用,再次强调了 METASQL 各组件的重要性。
对 METASQL 翻译错误进行分析,主要存在以下三类问题:一是自回归解码问题,即使有准确的元数据,底层翻译模型在处理复杂查询时仍可能产生错误翻译,如在嵌套查询中生成错误的连接路径。二是元数据不匹配问题,多标签分类器提取的不准确元数据会导致翻译错误,因此需要更可靠的元数据选择方法。三是排序问题,在第二阶段排序中,即使“黄金”查询在候选集中,也可能无法排在首位,尤其是涉及连接操作的查询,这需要在排序模型训练中更好地捕获数据库的特定语义。
# 自然语言查询:每个没有把猫作为宠物的学生是什么专业?
# 以及他们的年龄是多少?
# 黄金 SQL 查询:
SELECT major, age FROM student
WHERE stuid NOT IN (
SELECT T1.stuid FROM student AS T1
JOIN has pet AS T2 JOIN pets AS T3
WHERE T3.pettype = 'cat')
# 不正确的生成 SQL 查询:
SELECT major, age FROM student
WHERE stuid NOT IN (
SELECT has pet.stuid FROM has pet JOIN pets
WHERE pets.pettype = 'cat')
# 自然语言查询:有多少个国家有超过两个制造商?
# Oracle 相关的元数据 200, group, join
# 预测元数据 350, group, subquery
# 黄金 SQL 查询:
SELECT count(*) FROM
countries AS T1 JOIN car makers AS T2
GROUP BY T1.countryid HAVING count(*)>2
# 不正确的生成 SQL 查询:
SELECT count(*) FROM (
SELECT country FROM car makers
GROUP BY country HAVING count(*)>2)
# 自然语言查询:哪些汽车型号是在 1980 年之后生产的?
# 黄金 SQL 查询:
SELECT T1.model FROM model list AS T1
JOIN car names AS T JOIN car data AS T3
WHERE T3.year > 1980
# 排名最高的 SQL 查询语句
Top-ranked SQL Query:
SELECT T2.model FROM cars data AS T1
JOIN car names AS T2 WHERE T1.year > 1980
05
—
在 NLIDB 领域,早期研究主要采用基于规则的方法,通过手工制作语法将自然语言查询映射到 SQL 查询,但这种方法效率较低且灵活性差。随着深度学习的发展,Seq2seq 模型成为主流方法,但自回归解码的本质使其在处理复杂查询时面临挑战。近年来,LLMs 在 NL2SQL 任务中得到应用,但仍需要进一步优化。与这些现有方法不同,METASQL 引入了统一框架,结合了现有方法的优势并进一步提升了翻译性能。
06
—
本文提出的 METASQL 框架为 NL2SQL 问题提供了一种有效的解决方案,通过引入查询元数据和学习排序算法,显著提升了现有翻译模型的性能。实验结果充分证明了其有效性。然而,仍有一些方面需要进一步研究。例如,探索如何突破现有自回归解码范式的限制,开发更精确的多粒度语义标注方法,以及整合更多类型的元数据等。这些研究方向有望进一步提升 METASQL 的性能,推动 NL2SQL 技术的发展,使其在数据库自然语言接口领域发挥更大的作用,为实现更智能、便捷的数据库交互提供有力支持。
53AI,企业落地应用大模型首选服务商
产品:大模型应用平台+智能体定制开发+落地咨询服务
承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业
2024-06-20
2024-06-14
2024-07-03
2024-06-14
2024-06-06
2024-06-21
2024-06-16
2024-06-07
2024-10-09
2024-07-24
2024-12-25
2024-12-25
2024-12-13
2024-11-19
2024-11-06
2024-10-25
2024-10-25
2024-10-25