復旦大學 METASQL:NL2SQL終于有候選排序了
一、引言
在當今數字化時代,數據庫的應用極為廣泛,但傳統的數據庫查詢語言(如 SQL)對于非技術人員來說學習成本較高。自然語言接口到數據庫(NLIDB)技術的出現,旨在讓普通用戶也能輕松訪問數據庫。過去幾十年間,研究人員探索了多種方法,其中利用神經序列到序列(Seq2seq)模型或大規模語言模型(LLMs)的方法較為常見,它們通常采用自回歸解碼方式逐一生成 SQL 查詢。
盡管這些方法在翻譯準確性上取得了一定進展,如在 NLIDB 基準測試中準確率超過 70%,但仍存在明顯缺陷。以常用的 SPIDER 基準測試為例,當前最先進的模型在語法等價翻譯的測試集上準確率僅為 74.0%。問題主要體現在兩個方面:一是輸出多樣性不足,自回歸解碼在生成候選序列時往往缺乏變化,容易產生重復結果。例如,LGESQL 模型使用束搜索時,其生成的 top - K 候選結果相似度較高,可能導致最終的錯誤翻譯。二是缺乏全局上下文感知能力,由于是逐個生成輸出標記,僅考慮部分上下文,容易陷入局部最優,無法找到正確的翻譯。
為了改進現有方法,一些研究進行了嘗試。如多任務生成框架雖在對話翻譯場景取得一定成果,但仍依賴標準自回歸解碼獲取最終結果,并非最優。還有研究提出新的生成方法,但需要基于一組代表性樣本查詢假設。在此背景下,METASQL 框架應運而生,它旨在增強 NL2SQL 翻譯中的自回歸解碼過程,通過引入控制信號來提升 SQL 生成的質量。
二、METASQL 框架概述
1. 預備知識
1.1 自回歸解碼
這是一種模型逐個生成輸出序列元素的解碼策略,每個元素的生成依賴于之前生成的元素。在自回歸模型中,解碼涉及學習一個評分模型 ,其基于從左到右的分解方式,目標是在給定輸入序列 A 時找到高分輸出序列 P。但傳統的單向解碼算法(如貪婪搜索和束搜索)在生成高分輸出序列方面效果不佳,因為解碼歷史中的錯誤可能會對后續結果產生負面影響。
1.2 NL2SQL 模型
主要分為兩類,Seq2seq 模型和基于 LLM 的模型。Seq2seq 模型遵循特定學習框架,先將自然語言查詢和數據庫模式聯合編碼,再通過自回歸解碼器生成 SQL 程序的分布。其解碼器的學習目標可以是原始 SQL 標記、SQL 語言的中間表示或 SQL 抽象語法樹等。LLM 作為 NL2SQL 模型時,在給定自然語言查詢和提示的情況下,可以自動回歸生成相應 SQL 查詢,提示技術包括零樣本、少樣本提示或上下文學習等,提示內容可以是文本指令、翻譯示例或推理鏈等。
2. METASQL 主要流程
2.1 語義分解
如圖 2 的第一步,將自然語言查詢的語義解析重新定義為分類問題,利用多標簽分類器將自然語言語義映射到一組相關的查詢元數據。這些元數據是與底層數據庫相關的類別標簽,能夠捕捉自然語言查詢的上下文信息。例如,對于“查詢不說英語的國家代碼”這樣的查詢,可能會選擇“project”和“except”等操作符標簽以及表示查詢難度的“400”作為元數據。
2.2 元數據條件生成(可選)
如圖 2 的第二部分,對于 Seq2seq 模型,通過在訓練數據中添加元數據作為前綴語言提示來增強模型。訓練數據由自然語言查詢、對應的 SQL 查詢和相關元數據組成,收集方式基于弱監督原則。例如,對于操作符標簽類型的元數據,直接從 SQL 查詢中獲取;硬度值類型的元數據根據 SPIDER 基準的定義計算;正確性指示符類型的元數據根據數據來源確定。在推理階段,利用多標簽分類器獲取查詢元數據,然后基于這些元數據組合操縱翻譯模型生成一組候選 SQL 查詢。例如,對于上述查詢示例,可能會基于“where”標簽和“200”的評級值生成類似下面的候選查詢。
SELECT countrycode
FROM CountryLanguage
WHERE language!='English'
2.3 兩階段排序管道
如圖 2 的第三部分,采用兩階段排序流程確定最佳翻譯結果。第一階段使用雙塔架構構建粗粒度排序模型,通過兩個 BERT 類似的雙向文本編碼器和余弦相似度函數,快速從大量候選 SQL 查詢中篩選出較小的潛在候選集。其訓練數據由自然語言查詢、SQL 查詢和語義相似度分數組成,通過比較 SQL 查詢與“黃金”SQL 查詢的條款來計算分數。第二階段使用多粒度監督信號構建細粒度排序模型,對第一階段的結果進一步排序,以找到最匹配的 SQL 查詢。該模型包括上下兩個編碼器用于捕獲多粒度語義,通過多種損失函數(全局、局部和短語損失)計算匹配分數,并在推理時綜合考慮各分數對候選 SQL 查詢進行排序。
SELECT countrycode FROM CountryLanguage
EXCEPT SELECT countrycode FROM
CountryLanguage WHERE language='English'
三、METASQL 方法詳述
1. 查詢元數據
1.1 元數據設計
METASQL 設計了三種類型的元數據,包括操作符標簽、硬度值和正確性指示符。操作符標簽對應于單個邏輯運算符,指示 SQL 組件用于翻譯。例如,對于特定查詢,“project”標簽表示選擇操作,“except”標簽表示排除操作。硬度值根據 SQL 組件的數量和類型量化查詢的潛在復雜性,通過為每個 SQL 組件分配難度分數并求和得到。正確性指示符用于區分正確和錯誤的查詢,在推理時通常為真,但在訓練時可變化以幫助模型學習。
1.2 基于元數據的語義分解
將自然語言到元數據的映射視為分類問題,利用多標簽分類模型實現。該模型與底層 NL2SQL 翻譯模型共享編碼器,通過將解碼器替換為分類層來輸出標量值。在推理階段,設置分類閾值 選擇概率較高的元數據標簽,從而將自然語言查詢的語義分解為對應的元數據,有助于發現更多語義等價的 SQL 查詢。
2. 元數據條件生成
2.1 訓練
在模型訓練中,將查詢元數據作為前綴添加到自然語言查詢中,遵循傳統的 seq2seq 范式。收集訓練數據時,確保每個樣本包含自然語言查詢、對應的 SQL 查詢和相關元數據。同時,為了讓模型更好地區分正確和錯誤的目標序列,還收集了 SPIDER 基準訓練集中現有翻譯模型的錯誤翻譯作為負樣本,并為其分配“incorrect”的正確性指示符作為元數據。模型輸入時,將元數據扁平化為序列并與自然語言查詢連接,例如“correct | rating : 400 | tags : project, except”這樣的形式。
2.2 條件生成
在推理階段,由于查詢元數據未知,首先使用多標簽分類模型獲取初始元數據標簽。然后,考慮訓練數據中的組合情況,選擇性地組合這些標簽,以基于元數據條件生成一組候選 SQL 查詢。這類似于 LLM 中的提示方法,通過不同的元數據條件引導模型生成多樣化的翻譯結果。
3. 兩階段排序管道
3.1 第一階段排序模型
采用雙塔架構,包括 NL 查詢編碼器和 SQL 編碼器以及余弦相似度函數。通過在大量自然語言查詢和 SQL 查詢對上進行訓練,學習如何快速篩選出與給定自然語言查詢語義相關的候選 SQL 查詢。訓練數據中的語義相似度分數根據 SQL 查詢與“黃金”SQL 查詢的匹配程度計算,若完全匹配則為 1,否則根據條款差異進行扣分。
3.2 第二階段排序模型
鑒于第一階段模型在精確排序上的局限性,該階段旨在利用多粒度監督信號更準確地找到最佳 SQL 查詢。模型架構包括粗粒度和細粒度編碼器,通過引入額外的短語級語義信息,并采用列表式方法進行訓練。在訓練過程中,使用多種損失函數(全局、局部和短語損失)來綜合衡量 NL-SQL 對的匹配程度,以提高排序的準確性。例如,全局損失衡量句子級別的跨模態匹配相似性,局部損失增強細粒度的跨模態匹配,短語三元組損失則用于最大化正對內的細粒度相似性并最小化負對內的相似性。在推理時,綜合考慮各部分得分對候選 SQL 查詢進行最終排序。
四、實驗評估
1. 實驗設置
1.1 基準測試
在具有挑戰性的 NLIDB 基準測試 SPIDER 和 SCIENCEBENCHMARK 上進行實驗。SPIDER 是大規模跨域基準,包含大量自然語言查詢和 SQL 查詢以及多個數據庫,其數據根據 SQL 難度分為不同類型。由于 SPIDER 測試集難以獲取,實驗主要關注驗證集,并通過提交給作者獲取測試集結果。SCIENCEBENCHMARK 則是針對三個真實世界科學數據庫的復雜基準,包含領域專家制作的高質量 NL-SQL 對以及合成數據。
1.2 訓練設置
多標簽分類模型基于 LGESQL 模型替換頂層為分類層實現。第一階段排序模型的嵌入層使用預訓練的 STSB-MPNET- BASE-v2 模型初始化,采用 Adam 優化器進行訓練。第二階段排序模型基于 ROBERTA-LARGE,同樣使用 Adam 優化器,并根據學習停滯情況調整學習率,同時配置相關參數以生成合適數量的 SQL 查詢用于訓練。
1.3 推理設置
多標簽分類模型的分類閾值 設置為 0,以選擇所有可能的元數據標簽。第一階段排序模型選擇排名前十的候選 SQL 查詢子集傳遞給第二階段排序模型進行最終推理。
1.4 評估指標
采用翻譯準確率(EM)、執行匹配(EX)、翻譯精度(Precision@K)和平均倒數排名(MRR)等指標評估模型性能。翻譯準確率判斷生成的 top-1 SQL 查詢是否與“黃金”SQL 匹配;執行準確率通過在數據庫上執行 SQL 查詢并與真實結果比較;翻譯精度評估前 K 個翻譯結果中包含“黃金”SQL 查詢的自然語言查詢數量占比;MRR 則衡量模型將“黃金”SQL 查詢排在前列的能力。
2. 實驗結果
2.1 整體性能
在兩個基準測試上,METASQL 均能有效提升所有模型的性能。對于 Seq2seq 模型,在 SCIENCEBENCHMARK 上的提升更為顯著。特別是 LGESQL 模型,在應用 METASQL 后,在 SCIENCEBENCHMARK 的 SDSS 數據庫上提升了 8.0%,在 SPIDER 驗證集和測試集上分別達到 77.4%和 72.3%的翻譯準確率,且執行準確率也有大幅提高。對于基于 LLM 的模型(如 CHATGPT 和 GPT-4),METASQL 同樣顯著提升了其性能,這得益于 LLM 強大的生成能力以及 METASQL 對其生成的引導作用。
2.2 不同難度和語句類型的性能分析
按 SQL 難度級別分析,隨著難度增加,所有模型性能下降,但 METASQL 能在“Medium”和“Hard”查詢上顯著提升模型性能,不過在“Easy”和“Extra Hard”查詢上可能出現不穩定情況。對于“Easy”查詢,可能是由于 METASQL 對語義等價查詢的排序導致評估失敗;對于“Extra Hard”查詢,可能是復雜查詢中多粒度信號不準確導致排名錯誤。按 SQL 語句類型分析,METASQL 對涉及 ORDER BY 和 GROUP BY 子句的查詢翻譯提升明顯,這得益于排序過程;但對于嵌套類型的復雜查詢,Seq2seq 模型結合 METASQL 可能會出現性能下降。
2.3 排序管道性能
METASQL 在排序方面表現出色,例如 RESDSQLLARGE + METASQL 達到 78.8%的翻譯 MRR,LGESQL + METASQL 等在 top-5 檢索結果中也有較高的翻譯精度。這表明 METASQL 能夠在多數情況下正確選擇目標 SQL 查詢,優于傳統的自回歸解碼技術。
2.4 階段性能分析
對 METASQL 各階段性能分析發現,三個階段(元數據選擇、元數據條件生成、排序)整體性能較為穩定。其中,元數據條件生成階段相對波動較大,這與底層翻譯模型的局限性有關。但總體而言,METASQL 有效優化了各階段性能,促進了整體性能的提升。
3. 元數據敏感性分析
3.1 元數據選擇率
通過降低多標簽分類器的分類閾值 引入更多“噪聲”元數據,發現 METASQL 的性能對元數據質量有很強的依賴性。當 低于 - 10 時,性能顯著下降,因為過多的“噪聲”元數據干擾了模型的判斷。
3.2 正確性指示符
實驗表明 METASQL 對正確性指示符的變化較為敏感,提供錯誤的指示符會導致性能下降,且比不提供指示符的情況更差,說明正確的元數據對于模型性能至關重要。
3.3 硬度值
METASQL 的性能對硬度值變化相對穩定,這是因為多標簽分類器獲取的硬度值通常與真實值接近,且模型會綜合考慮多種元數據。同時,設置較容易的硬度值往往比困難的硬度值能帶來更好的結果。
3.4 操作符標簽
METASQL 對操作符標簽類型的元數據較為敏感,使用正確的操作符標簽能顯著提高性能,因為它為模型提供了有效的生成約束,減少了搜索空間。
4. 消融研究
通過在 SPIDER 驗證集上對 LGESQL 進行消融實驗,發現去除多標簽分類器或第二階段排序模型會導致性能大幅下降。這表明多標簽分類器在獲取相關元數據方面以及第二階段排序模型在精確排序方面都起著關鍵作用,再次強調了 METASQL 各組件的重要性。
5. 分析 METASQL
對 METASQL 翻譯錯誤進行分析,主要存在以下三類問題:一是自回歸解碼問題,即使有準確的元數據,底層翻譯模型在處理復雜查詢時仍可能產生錯誤翻譯,如在嵌套查詢中生成錯誤的連接路徑。二是元數據不匹配問題,多標簽分類器提取的不準確元數據會導致翻譯錯誤,因此需要更可靠的元數據選擇方法。三是排序問題,在第二階段排序中,即使“黃金”查詢在候選集中,也可能無法排在首位,尤其是涉及連接操作的查詢,這需要在排序模型訓練中更好地捕獲數據庫的特定語義。
1.1 自回歸解碼問題
# 自然語言查詢:每個沒有把貓作為寵物的學生是什么專業?
# 以及他們的年齡是多少?
# 黃金 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')
1.2 元數據不匹配問題
# 自然語言查詢:有多少個國家有超過兩個制造商?
# 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)
1.3 排名問題
# 自然語言查詢:哪些汽車型號是在 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
五、相關工作
在 NLIDB 領域,早期研究主要采用基于規則的方法,通過手工制作語法將自然語言查詢映射到 SQL 查詢,但這種方法效率較低且靈活性差。隨著深度學習的發展,Seq2seq 模型成為主流方法,但自回歸解碼的本質使其在處理復雜查詢時面臨挑戰。近年來,LLMs 在 NL2SQL 任務中得到應用,但仍需要進一步優化。與這些現有方法不同,METASQL 引入了統一框架,結合了現有方法的優勢并進一步提升了翻譯性能。
六、結論
本文提出的 METASQL 框架為 NL2SQL 問題提供了一種有效的解決方案,通過引入查詢元數據和學習排序算法,顯著提升了現有翻譯模型的性能。實驗結果充分證明了其有效性。然而,仍有一些方面需要進一步研究。例如,探索如何突破現有自回歸解碼范式的限制,開發更精確的多粒度語義標注方法,以及整合更多類型的元數據等。這些研究方向有望進一步提升 METASQL 的性能,推動 NL2SQL 技術的發展,使其在數據庫自然語言接口領域發揮更大的作用,為實現更智能、便捷的數據庫交互提供有力支持。
本文轉載自 ??AIGC前沿技術追蹤??,作者: 愛讀論文的吳彥祖????
