【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 的界限,使得研究人員能夠更好地執行數據可訪問性的策略。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/20956.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/20956.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/20956.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

618商品網頁制作編程示例開發案列優質學習資料資源工具與案列應用場景開發文檔教程資料】

創建一個簡單的商品網頁可以用HTML、CSS和JavaScript來實現。這種網頁會包括商品的圖片、名稱、描述、價格和購買按鈕等。下面是一個詳細的源碼案例及其講解: 1. 文件結構 假設我們有以下文件結構: /product-page/imagesproduct.jpgindex.htmlstyle.c…

UML靜態圖-對象圖

概述 靜態圖包含類圖、對象圖和包圖的主要目的是在系統詳細設計階段,幫助系統設計人員以一種可視化的方式來理解系統的內部結構和代碼結構,包括類的細節、類的屬性和操作、類的依賴關系和調用關系、類的包和包的依賴關系。 對象圖與類圖之間的關系&…

python中獲取文件和圖片類型的方法

目錄 一. 使用第三方庫 filetype安裝 filetype 庫:示例代碼: 二. 使用第三方庫 Pillow(針對圖片)安裝 Pillow 庫:示例代碼: 三. 使用Python標準庫imghdr(針對圖片)示例代碼&#xff…

Linux 命令:tail

1. 寫在前面 本文主要介紹 Linux tail 命令:可用于查看文件的內容,有一個常用的參數 -f 常用于查閱實時更新的日志文件。 關注 公眾號 獲取最新博文: 滑翔的紙飛機 2. tail 命令 tail 命令的基本語法是: tail [OPTION]... [FIL…

Day46 動態規劃part06

完全背包問題 完全背包和01背包問題唯一不同的地方就是,每種物品有無限件。先遍歷物品還是先遍歷背包以及遍歷順序 根據遞推公式可知:每一個dp需要根據上方和左方的數據推出,只要保證數據左上方數據是遞推出來的這種兩個for循環的順序就是可…

【故障診斷】基于EMD的振動信號時頻分析新方法研究附matlab代碼

matlab % 步驟1:加載振動信號數據 load(‘vibration_signal.mat’); % 加載振動信號數據,假設信號存儲在變量signal中 % 步驟2:定義EMD函數 function imfs emd(signal) imfs []; % 存儲提取的IMF分量 while ~isMonotonic(signal)[imf, r…

PostgreSQL的內存參數

PostgreSQL的內存參數 基礎信息 OS版本:Red Hat Enterprise Linux Server release 7.9 (Maipo) DB版本:16.2 pg軟件目錄:/home/pg16/soft pg數據目錄:/home/pg16/data 端口:5777PostgreSQL 提供了多種內存參數&#x…

一個高效的go語言字符串轉駝峰命名算法實現函數

在go語言的開發中我們經常需要對各種命名進行規范&#xff0c; 今天給大家介紹的是一個高效的將字符串轉 駝峰命名 &#xff08;即 首字母大寫的命名方式&#xff09;的函數。 // 字符串轉駝峰命名 // author tekintian <tekintiangmail.com> func CamelStr(str string) …

【python學習】Anaconda的介紹、下載及conda和pip換源方式(切換到國內鏡像源)

什么是Anaconda Anaconda 是一個專為數據科學和機器學習預裝了多種庫的Python發行版。 提供了包管理與環境管理的功能解決了多個版本python并存的問題解決了第三方包安裝問題 如何下載Anaconda 官網地址&#xff1a;https://www.anaconda.com/ 點擊右上角的 Free Download …

PostgreSQL 和Oracle鎖機制對比

PostgreSQL 和Oracle鎖機制對比 PostgreSQL 和 Oracle 都是業界廣泛使用的關系型數據庫管理系統&#xff0c;它們在鎖機制方面都有獨到的設計來控制并發訪問&#xff0c;確保數據的一致性和完整性。下面我們詳細比較一下這兩個數據庫系統的鎖機制。 1. 鎖類型 PostgreSQL P…

C語言王國——選擇與循環(1)

目錄 一、引言 二、選擇結構 1&#xff0c;if語句 1.1&#xff0c;if...else...語句 1.2&#xff0c;多分支語句 1.3懸空else的問題 2&#xff0c;switch語句 2.1&#xff0c;switch 2.2&#xff0c;break 2.3&#xff0c;default 一、引言 寫了幾個C語言代碼我發現C語…

ReduceTask工作機制

&#xff08;1&#xff09;Copy階段 ReduceTask從各個MapTask上遠程拷貝一片數據&#xff0c;并針對某一片數據&#xff0c;如果其大小超過一定閾值&#xff0c; 則寫到磁盤上 &#xff0c;否則直接放到內存中。 &#xff08;2&#xff09;Merge階段 在遠程拷貝數據的同時 &a…

go模擬經典面試題

講下MySQL事務 &#xff08;1&#xff09;事務的概念 事務就是對數據庫執行一系列操作&#xff0c;這些操作要么全部成功執行&#xff0c;要么全部失敗&#xff0c;不會存在部分成功的情況。 &#xff08;2&#xff09;事務的ACID特點 原子性&#xff1a;一個事務中的所有操…

def用法 Python:深度解析函數定義與調用的奧秘

def用法 Python&#xff1a;深度解析函數定義與調用的奧秘 在Python的編程世界中&#xff0c;def 關鍵字如同一座神秘的燈塔&#xff0c;照亮了我們探索函數定義與調用的道路。它不僅是創建函數的起點&#xff0c;更是構建高效、可維護代碼的關鍵所在。本文將通過四個方面、五…

華為坤靈交換機S300, S500, S210,S220, S200, S310 如何WEB抓包

通過S系列交換機配置端口鏡像實現抓包 1、應用場景 端口鏡像是指將經過指定端口(源端口或者鏡像端口)的報文復制一份到另一個指定端口(目的端口或者觀察端口)。在網絡運營與維護的過程中&#xff0c;為了便于業務監測和故障定位&#xff0c;網絡管理員時常要獲取設備上的業務報…

FFmpeg中視頻 Filters 使用文檔介紹

FFmpeg中Filters 簡介 FFmpeg是一個強大的多媒體框架,它支持多種音視頻編解碼器、容器格式、協議等。其中,FFmpeg的Filters(過濾器)是FFmpeg中一個非常強大的功能,它允許用戶對音視頻數據進行各種處理,包括但不限于視頻濾鏡、音頻效果、視頻轉換等。 到目前為止,FFmpeg…

Lua使用方式介紹

背景 Lua是C語言開發的腳本語言&#xff0c;設計的目的是為了嵌入到程序中&#xff0c;因此被設計得輕量小巧。Nginx配置中可以直接嵌入Lua 代碼或引入Lua 文件&#xff0c;Redis支持運行Lua語句和腳本&#xff0c;Wireshark中使用Lua腳本自定義協議。 本文用于收集常用的語法…

JMeter源碼解析之SplashScreen.java

JMeter源碼解析之SplashScreen.java完結 SplashScreen.java主要作用 JMeter GUI啟動加載界面。 文件路徑 路徑地址&#xff1a;…\apache-jmeter-5.1\src\core\org\apache\jmeter\SplashScreen.java 關于SplashScreen內容中的代碼解析 package org.apache.jmeter;import …

隊列——一種操作受限的線性表

隊列 隊列&#xff08;Queue&#xff09;簡稱隊&#xff0c;也是一種操作受限的線性表&#xff0c;只允許在表的一端進行插入&#xff0c;而在表的另一端進行刪除。向隊列中插入元素稱為入隊或進隊&#xff0c;刪除元素稱為出隊或離隊。隊列中的元素是先進先出&#xff08;Fir…

大聰明教你學Java | 深入淺出聊 Stream.parallel()

前言 &#x1f34a;作者簡介&#xff1a; 不肯過江東丶&#xff0c;一個來自二線城市的程序員&#xff0c;致力于用“猥瑣”辦法解決繁瑣問題&#xff0c;讓復雜的問題變得通俗易懂。 &#x1f34a;支持作者&#xff1a; 點贊&#x1f44d;、關注&#x1f496;、留言&#x1f4…