【Text2SQL顶会解读】DIN-SQL: Decomposed In-Context Learning of Text-to-SQL with Self-Correction

1.文章贡献

(1)通过任务分解提高基于LLM的文本到SQL模型的性能,
(2)引入针对任务复杂性量身定制的自适应提示策略,
(3)解决提示背景下的模式链接挑战,
(4)使用LLM进行自校正。

2.方法论

在这里插入图片描述

作者提出了一种新的方法来提高大型语言模型(LLMs)在文本到SQL(text-to-SQL)任务上的性能。这个方法论的核心思想是将复杂的文本到SQL任务分解为更小的子任务,并通过解决这些子任务来构建最终的SQL查询。
详细步骤:

1. 模式链接(Schema Linking)

模式链接模块的目的是识别自然语言查询中对数据库模式的引用,包括列名、表名或实体。这一步对于跨域泛化和复杂查询的合成至关重要。

  • 实现方式:作者设计了一个基于提示的模块,通过包含来自Spider数据集训练集的样本,使用“让我们逐步思考”的链式思考模板。
  • 输出:对于每个问题中提到的列名,从给定的数据库模式中选择相应的列和表。还从问题中提取可能的实体和单元值。

2. 查询分类和分解(Classification & Decomposition)

这个模块对查询进行分类,并将其分解为更小的子问题。分类基于是否需要连接(JOIN)、是否包含嵌套查询等。

  • 分类:将查询分为三类:简单(不需要连接或嵌套)、非嵌套复杂(需要连接但不需要嵌套子查询)、嵌套复杂(可能包含连接、子查询和集合操作)。
  • 分解:对于非嵌套复杂和嵌套复杂的查询,模块会检测需要连接的表、可能的子查询等。

3. SQL生成(SQL Generation)

针对不同类别的查询,使用不同的提示生成SQL查询。

  • 简单类:使用简单的少次提示,无需中间步骤。
  • 非嵌套复杂类:使用中间表示(如NatSQL)来桥接自然语言查询和SQL语句之间的差距。
  • 嵌套复杂类:通过解决子查询并使用它们生成最终答案,进一步分解问题。

4. 自我修正(Self-correction)

生成的SQL查询可能存在小错误,如缺少或多余的关键字。自我修正模块旨在修正这些小错误。

  • 通用提示:将错误代码提供给模型,并要求其修正。
  • 温和提示:不假设SQL查询存在错误,而是要求模型检查潜在问题,并提供一些检查条款的提示。

实现提示

作者使用了特定的提示来引导LLMs完成各个子任务。这些提示包括:

  • 零次提示:直接对模型进行任务描述,不提供示例。
  • 少次提示:提供少量示例来引导模型理解任务。
  • 模式链接提示:引导模型识别和链接数据库模式。
  • 分类和分解提示:引导模型对查询进行分类,并识别需要连接的表或子查询。
  • SQL生成提示:根据查询类别提供不同的提示,帮助模型生成SQL。
  • 自我修正提示:提供错误或潜在错误的SQL代码,引导模型进行修正。

3.实验

在这里插入图片描述
我们的方法的新SOTA为85.3,我们的上下文学习方法至少比许多经过深度微调的模型好5%。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值