【Text2SQL 论文】DBCopilot:将 NL 查询扩展到大规模数据库

论文:DBCopilot: Scaling Natural Language Querying to Massive Databases

⭐⭐⭐⭐

Code: DBCopilot | GitHub

一、论文速读

论文认为目前的 Text2SQL 研究大多只关注具有少量 table 的单个数据库上的查询,但在面对大规模数据库和数据仓库的查询时时却力显不足。本文提出的 DBCopilot 能够在大规模数据库上查询模式不可知的 NL question。

论文指出,实现这个的核心是:从能够构建各种 NL question 到海量数据库模型元素的 semantic mapping,从而能够自动识别目标数据库并过滤出最少的相关 tables。但目前的基于 LLM 的方法有两个主要挑战:

  • 由于 token 限制,无法将所有 schema 都输入给 LLM
  • LLM 仍然难以有效利用长上下文中的信息

而在解决可扩展性的问题时,主要有基于 retrieval 的方法和基于 fine-tune 的方法,但是,

  • 基于 retrieval 的方法往往是将 doc 视为检索对象,忽略了 DB 和 DB table 之间的关系;
  • fine-tune LLM 来为其注入 schema 的相关知识是资源密集型的方式,且有时候 LLM 是无法微调的

DBCopilot 的做法如下图所示:

主要分成两步:

  1. Schema Routing:输入 user question,使用 DSI 技术找到所需要用的 DB 和 DB tables,也就是 DB schema。
  2. SQL Generation:输入 user question、DB schema,通过 prompt LLM 生成 SQL query。

二、问题定义

2.1 Schema-Agnostic NL2SQL

Schema-Agnostic NL2SQL 指的是:只给定 user question 而不给定预期的 SQL query schema(DB 和 DB tables),来生成一个可以在一个数据库集合中的某个 DB 上执行的 SQL。

像之前 WikiSQL 数据集上,都是指定 question 在哪个 DB 上的。

2.2 Schema Linking VS. Schema Routing

在以往的 NL2SQL 中,Schema Linking 的 input 是 question 和 schema,用于寻找 NL question 中提及到的 schema 元素(比如 tables、columns 或者 database value),可以被视作是一个 NL question 和 DB elements 之间的桥梁。

Schema Routing 的 input 只有不知道 schema 的 question,它的输出是一个 indexed or memorized schema。

三、方法

3.1 Schema Routing

本文使用一个轻量级的 seq2seq 模型来作为 router,实现将 NL 识别出对应的 DB schema。

由于 space schema 很大(是 table 和 column 的笛卡尔积)、且 DB schema 可以发生变化,因此本文提出了一个 relation-aware、end-to-end joint retrieval 方法来解决 schema routing 问题。

具体做法是,先为 databases 构建一个 schema graph,然后设计一个 schema 序列化算法来将一个 schema 转化为 token-sequence,利用 graph-based contrained decoding 解码算法来让 seq2seq 模型生成 routing 的结果 DB schema。

3.1.1 Schema Graph

schema graph 包含了 databases 的 schema 信息,这个 graph 的 nodes 包含三类:

  • v s v_s vs:一个特殊节点,指代含有所有 databases 的集合
  • database
  • DB table

graph 的 edge 包含两类:

  • Inclusion relation:表示一个 db 是否是一个 db collection 的一部分;或者一个 table 是否属于一个 db
  • Table relation:包含显式的 PRIMARY-FOREIGN 关系和隐式的 FOREIGN-FOREIGN 关系

隐式的 FOREIGN-FOREIGN 关系指的是:A 表和 B 表的某个 column 共同连接到另一个 C 表的 key

由此,任何有效的 SQL query schema 都是这个 schema graph 上的一个 trail(或者叫一个 path)。

3.1.2 Schema Serialization

这个序列化算法将一个 SQL query schema 序列化为一个 token seq,当然也可以将一个 token seq 解码出一个 DB schema。

具体的做法可以参考原论文,这里主要是基于 DFS(深度优先遍历)的思想。

有了这个序列化算法,当我们训练 seq2seq 的 schema router 模型时,由于需要监督它的 training data 是 (NL question, DB schema) pair,其中的 DB schema 就是序列化了的 schema。另外,router 的输出是一个 token seq,也需要反序列化将其转为结构化的 DB schema。

3.1.3 graph-based 的解码算法

在让 schema router 生成 token seq 时,为保证其生成的 schema 的有效性,每一个自回归生成的 step 中,都受到一个动态前缀树的约束,这个 tree 包含了解码后 schema 元素的可能访问节点的名称,如下图所示:

这样,每个生成 step 的可用 tokens 都可以通过搜索前缀树来获得,前缀就是在最后一个元素分隔符之后生成的 token。同时这里使用 diverse beam search 来生成多个候选序列。

3.1.4 schema router 的训练和推理

我们需要使用 (NL question, DB schema) 这样的 pairs 来作为 training data 来训练 router,但是目前缺少这样的训练资料。所以,本文提出了使用一个训练数据合成方法来生成 question-schema pairs。

这个训练数据合成方法具体来说就是:茨贝格 schema graph 中采样出一批合法的 schema,然后对每一个 schem 生成一个 pseudo-question,如下图所示:

具体的这个模型的训练可以参考原论文。

由此就可以得到用于训练 schema router 的 question-schema pairs。

之后,我们就可以训练 Schema Router 了。训练数据集是 { ( N i , S i ) } \{(N_i, S_i)\} {(Ni,Si)},也就是 quetsion-schema pairs,模型的训练损失函数如下:

训练出来之后,就可以使用 graph-based 的解码算法来做推理了。

3.2 SQL Generation

通过将 NL2SQL 任务解耦为 schema routing 和 SQL generation 两个部分,DB Copilot 可以与现在的 LLM-advanced NL2SQL 的解决方案进行融合,无论是 in-context prompt engineering 方法或者特定的 NL2SQL LLM。

前面的 schema router 可以为 NL 生成来自多个 db 的多个 schemas,这里探索了 3 种 prompt 策略来为 LLM 选择和合并这些不同的 DB schema:

  1. Best Schema Prompting :从 schema router 种选择生成的最高概率的 schema 来 instruct LLM
    • 实验发现这种方式是最优的
  2. Multiple Schema Prompting:将 beam search 得到的多个 table schemas 简单连接起来一起用来 instruct LLM。
  3. Multiple Schema COT Prompting:使用多个 candidate schemas 通过 COT 来 instruct LLM

四、实验

论文在 Spider、Bird、Fiben 数据集上对 schema retrieval 和 NL2SQL 两个任务上进行实验对比,DBCopilot 有不错的表现。

这里 NL2SQL 任务并没有与其他 SOTA 模型做实验对比

五、总结

本文提出了 DBCopilot 模型,给出了一种将 NL 查询扩展到大规模数据库的思路,通过 LLM 协作来解决模式无关的 NL2SQL 任务。

总之,DBCopilot 突破了 NL2SQL 的界限,使得研究人员能够更好地执行数据可访问性的策略。

相关推荐
XCDoris29 分钟前
郴州logo设计机构
大数据·人工智能·python
Goboy42 分钟前
一个人带三个Agent,我用全新TRAE从0到1搭了个资讯周刊站
人工智能·trae
俊哥V1 小时前
每日 AI 研究简报 · 2026-10-19
人工智能·ai
AI_AGENT_DEV_AI1 小时前
AI英语教培智能体的开发
人工智能
物联网软硬件开发-轨物科技1 小时前
【技术白皮书】光伏清检一体化机器人系统解决方案技术白皮书
大数据·运维·网络·人工智能·机器人
海宇数据1 小时前
零信任架构实战:基于海宇网上踪迹欺诈行为识别构建自动化信贷资信评估网关
运维·人工智能·架构·自动化
冬奇Lab1 小时前
开源项目第242期:HyperFrames —— 写 HTML 就能渲染视频,专为 AI Agent 设计的确定性视频框架
人工智能·开源·音视频开发
zyseo82 小时前
谷歌SEO 准首页词挖掘脚本:找出排在第 8-20 名的隐藏流量
大数据·数据库·人工智能
一只游鱼2 小时前
MCP \
人工智能·microsoft
烛影摇红透纱窗2 小时前
AI从零介绍代码架构的复盘(含要使用的提示词)
人工智能·架构