导语
本文提出了一种叫做Query Plan Language (QPL)的语言,用来将复杂SQL语句分解为更加简单的子语句。QPL具有以下优势:1)可以转述为简单问题,从而创建了一个 <math xmlns="http://www.w3.org/1998/Math/MathML"> < 复杂问题,分解问题 > <复杂问题,分解问题> </math><复杂问题,分解问题> 的数据集。在这个数据集上训练,获得了一个敏感于数据库模式的数据检索问题分解器。2)QPL对于非专家处理复杂查询更易于接近,使语义解析器的输出更易于理解。
- 标题:Semantic Decomposition of Question and SQL for Text-to-SQL Parsing
- 会议:EMNLP 2023 Findings
- 链接:aclanthology.org/2023.findin...
1 引言
本文针对现有跨领域文本到SQL(Text-to-SQL)模型在处理复杂数据库和查询时面临的挑战进行研究。当前模型在简单查询上的表现优异,准确率超过90%,但在复杂查询上的准确率却降至约50%。这对非专业人士来说尤其棘手,因为他们往往难以判断复杂的SQL查询是否真正反映了他们的查询意图。研究者通过用户研究发现,约66%的非SQL专业的软件工程师难以判断复杂的SQL查询是否与其问题相符。
为了解决这一问题,本文采用了一种新颖的组合方法。借鉴于多跳问答中成功的问题分解(Question Decomposition, QD)策略,本研究也探讨了如何通过QD策略处理复杂的SQL查询。本文引入了一种名为Query Plan Language(QPL)的新型中间语言,该语言具有模块化和可分解的特点,能够直接通过转化为SQL的公共表表达式(CTEs)在SQL数据库上执行。与一般的QD方法不同,本文的方法考虑到了问题所涉及的数据库架构和QPL操作的语义。
此外,研究者发现,目标编程语言的选择对模型学习文本解析成准确的语义表示的能力有显著影响。例如,一些研究表明,与其他语言相比,生成SQL的难度较大。因此,本文提出的QPL可以视为一种新的候选中间语言,与以往不同的是,它基于对SQL的语义转换而非语法分析,形成了一种更简单、更规则的查询语言。
本文的主要贡献包括:
文本主要关注以下两个研究问题:
- (RQ1)学习文本到QPL是否比学习文本到SQL更容易;
- (RQ2)非专家用户是否比复杂SQL查询更容易解释QPL输出。
本文的贡献如下:
- 定义了QPL语言及其从SQL到QPL的自动转换方法,并实现了QPL在标准SQL服务器上的执行;
- 构建了Spider-QPL数据集,丰富了Spider样本,并为其提供了基于QPL结构的问题分解;
- 开发了文本到QPL的模型,其性能与最新的文本到SQL模型相媲美,并在处理复杂查询时表现更佳;
- 通过用户实验验证,发现非专家用户在QPL上比在SQL上更容易识别不正确的复杂查询。
2 以前的工作
略
3 查询分解为QPL
3.1 查询计划语言(QPL)数据集转换
QPL设计为一种模块化数据流语言,旨在编码SQL查询的语义。它基于SQL优化器内部使用的执行计划定义。通过自动化转换,Spider数据集的原始SQL查询被转换为包含QPL表达式的版本。QPL是执行计划的分层表示,其中叶子节点是表读取节点(Scan节点),内部节点则是一元或二元操作。每个QPL子计划都是独立的可执行操作符,返回数据元组流。例如,图1中的执行计划展示了一个包含四个步骤、深度为2的计划。通过利用Microsoft SQL Server 2019查询优化器,将SQL查询转换为语义等效的QPL计划。QPL语法中的操作符数量限制为9种,并设计为上下文无关,即所有操作符均接收并输出元组流。
3.2 Text-to-QPL模型
在实验中探索了不同的QPL表达式语法,并选择了步骤编号和自下而上顺序的版本。验证了转换后的QPL计划与原始Spider SQL查询的结果集相等效。使用Flan-T5-XL模型(3B参数)进行微调,每个样本包含问题、schema信息和gold QPL。输入格式与Shaw等人(2021)相同。利用PICARD解码器和专为QPL语法开发的解析器进行最终评估,确保生成的QPL程序语法正确。
4 问题分解
4.1 QPL到QD
- 方法介绍:使用OpenAI gpt-3.5-turbo-0301模型根据QPL计划生成问题分解(QD)。准备了包含QPL语言语法描述和涵盖所有QPL操作的示例的少次示例提示。
- 验证与评分:手动验证了50对(QPL, QD)的生成结果,发现它们可靠、多样且流畅。此外,设计了自动度量方法来验证生成的QDs与源QPL计划的对齐程度。
4.2 数据集准备
- 数据集丰富:使用QPL到QD生成器,进一步丰富Spider-QPL数据集,为每个样本添加计算得到的QD字段。同时计算了问题的QDMR分解,为每个示例获取元组:<schema, 问题, SQL, QPL, QD, QDMR>。
- 有效QD数量:在Spider开发集和训练集中获得了大量有效QD。
4.3 问题分解器模型
针对<Q, QD>数据集训练QPL问题分解器,该模型学习根据问题和架构描述预测QD。使用Flan-T5-XL模型进行微调。
4.4 Q+QD到QPL预测
在与前述模型相同的条件下,训练Flan-T5-XL模型,对给定问题分解器计算出的QD的<Q, QD, QPL>进行QPL预测。
5 实验与结果
5.1 文本到QPL预测
在Spider开发集上的实验结果显示,与使用相同基础模型Flan-T5-XL训练的T5-3B模型相比,<Q → QPL>模型在每个难度级别上都有所改进。此外,模型在Hard和Extra-Hard查询中达到了现有微调和LLM模型中最高的执行准确度(带数据库内容为70.0%)。与其他模型相比,模型在所有难度级别上(除了"简单"级别的简单架构编码)均表现更好。这表明学习QPL作为目标语言比学习SQL更容易(RQ1)。直接的<Q → QPL>模型在不使用数据库内容的情况下实现了77.4%的准确度,使用数据库内容时达到了83.8%。
5.2 可解释性用户实验
为了测试非专家SQL用户是否能更容易理解QPL,进行了一个用户实验。实验选择了22个Hard和Extra-Hard难度的查询样本,并收集了这些查询的预测SQL和QPL,包括正确和错误的案例。四名有五年以上经验的软件工程师参与实验,他们被要求判断每个案例中的查询是否与问题的意图相符。实验结果表明,参与者在QPL案例中的正确率为67%,而在SQL案例中为34%,支持了使用QPL比使用SQL更容易验证问题和查询之间的对应关系的假设(p < 0.06)。
6 误差分析
误差分析表明,涉及聚合操作的查询是最具挑战性的错误类型。表5展示了富架构编码下<Q → QPL>模型的错误类型分布。研究假设通过利用更详细的架构结构描述并应用对生成的QPL的后处理批评或在QPL Picard解析器中强制执行更严格的约束,可以减少与Join操作相关的错误。 Spider开发集包括20个不同的数据库。表9展示了按数据库的错误分布。发现5个数据库占据了超过70%的错误。这些数据库不遵循数据建模的最佳实践:未声明关键字,列命名不一致,某些列中的值编码非标准(例如,使用'T'/'F'表示布尔值)。
7 结论
本文提出了一种基于QPL的方法来提高复杂文本到SQL模型的组合学习。QPL是一种新的可执行和模块化的中间语言,通过对SQL的语义转换而来。通过软件工具实现了SQL查询到QPL的自动转换,并通过将QPL计划转换为CTE SQL语句执行QPL计划。编制了Spider-QPL版本,包括所有示例的QPL和问题分解。实验表明,使用微调LLM学习QPL比学习SQL更容易;对于复杂查询,用户更容易解释QPL而不是SQL。基于计算的QPL,本文派生出了一种新的问题分解形式,并训练了一个对目标数据库架构敏感的问题分解器。给定一个预测的QPL计划,可以派生出一个可读的QD,增加了预测计划的可解释性。未来,计划进一步利用QPL的模块化进行数据增强,并探索多步推理技术。错误分析指出,增强模型以进一步利用数据库值和外键的优势有潜力增加这种多步方法的鲁棒性。作者还在探索用户是否可以通过对预测QD的交互式反馈来指导QPL预测。