一篇大模型NL2SQL全棧技術最新綜述
隨著LLM的出現,NL2SQL的性能得到了極大的提升,這顯著降低了訪問關系數據庫的障礙,并支持各種商業應用。
本文提供了一個全面的NL2SQL技術綜述,覆蓋了整個生命周期,包括模型、數據、評估和錯誤分析四個方面。
全文概述:NL2SQL任務的全生命周期
NL2SQL問題與背景
對NL2SQL任務進行了定義,并介紹了人類執行NL2SQL任務的工作流程與關鍵挑戰,并描述了基于語言模型發展的NL2SQL解決方案的演變。
NL2SQL任務定義
- 問題表述:NL2SQL,也稱為Text-to-SQL,是將自然語言查詢轉換為可在關系數據庫上執行的SQL查詢的任務。目標是生成準確反映用戶意圖的SQL,確保執行后得到適當的結果。
在大型語言模型時代NL2SQL模塊的概述
人類工作流程
- 理解自然語言查詢:首先理解用戶的意圖,識別NL中的關鍵部分,例如實體或屬性、時間上下文和特定條件。
- 鏈接數據庫架構和檢索內容:基于對NL的理解,檢查數據庫架構和內容,識別生成SQL所需的相關表、列和單元格值。
- 將NL意圖轉換為SQL:最后,根據對NL和數據庫概念的理解,編寫相應的SQL查詢。
挑戰
- 自然語言的不確定性:自然語言可能因歧義和不明確性而含有不確定性,例如詞義歧義、句法歧義、信息不足和用戶錯誤。
- 數據庫的復雜性和數據的不完整性:數據庫架構的復雜性和數據的龐大體量對NL2SQL任務的有效執行構成挑戰,包括表之間的關系復雜性、列名的相似性、特定領域的架構變化以及大數據量和數據的不完整性。
- 從自然語言到SQL的轉換:NL2SQL任務與高級編程語言到低級機器語言的編譯不同,因為輸入的NL和輸出的SQL查詢之間通常存在一對多的映射。
NL2SQL任務及其挑戰的示例
NL2SQL解決方案的演變
- 基于規則的方法:早期研究主要集中在使用預定義規則或語義解析器來理解自然語言查詢并將其轉換為SQL查詢。
- 基于神經網絡的方法:為了解決基于規則的方法的局限性,研究者開始利用神經網絡來解決NL2SQL任務,例如使用序列到序列模型或圖神經網絡。
- 基于預訓練語言模型的方法:隨著BERT和T5等預訓練語言模型的出現,基于PLM的NL2SQL方法在多個基準數據集上取得了競爭性的性能。
- 大型語言模型時代:隨著LLMs的出現,NL2SQL技術取得了顯著進展,LLMs具有卓越的語言理解和新出現的能力,例如使用提示來執行NL2SQL任務。
從語言模型的角度來看NL2SQL解決方案的演變
NL2SQL的預處理策略
專注于在執行NL2SQL翻譯過程中的預處理步驟,這些步驟對于識別相關表格和列(即架構鏈接)以及檢索生成SQL所需的適當數據庫內容或單元格值至關重要。此外,預處理通過添加特定領域的知識來豐富上下文,提高查詢上下文的理解,并糾正錯誤以防止它們傳播。
架構鏈接(Schema Linking)
- 目的:確定與給定自然語言查詢相關的表格和列,確保在有限的輸入內準確映射和處理關鍵信息,提高NL2SQL任務的性能。
- 方法分類:
- 基于字符串匹配的方法:使用相似性度量來識別NL文本和數據庫架構元素(如表名和列名)之間的相關映射。
- 基于神經網絡的方法:使用深度神經網絡來匹配數據庫架構和自然語言查詢,有效解析語言和數據庫結構之間的復雜語義關系。
- 基于上下文學習的方法:利用大型語言模型(如GPT-4)的強推理能力直接從NL查詢中識別和鏈接相關的數據庫架構組件。
數據庫內容檢索(Database Content Retrieval)
- 目的:通過文本搜索算法和數據庫索引高效檢索單元格值。
- 策略分類:
- 基于字符串匹配的方法:通過字符串匹配查找與給定NL查詢相關的單元格值序列。
- 基于神經網絡的方法:神經網絡通過多層非線性變換學習復雜數據格式和語義表示,以捕獲語義特征,緩解同義詞問題。
- 索引策略:索引是提高數據庫內容檢索效率的關鍵方法,允許更快地訪問相關單元格值。
額外信息獲取(Additional Information Acquisition)
- 作用:額外信息(例如領域知識)在提高NL2SQL模型理解NL查詢、執行架構鏈接和NL2SQL翻譯方面發揮著重要作用。
- 應用:研究人員經常將額外信息作為文本輸入(提示)的一部分,連同少數示例一起輸入,以提高模型的理解和翻譯質量。
NL2SQL翻譯方法
深入探討了使用語言模型進行NL2SQL翻譯的方法。這些方法包括編碼策略、解碼策略和特定于任務的提示策略,以及如何利用中間表示來優化NL2SQL翻譯過程。
基于設計選擇的NL2SQL翻譯方法分類
編碼策略(Encoding Strategy)
編碼策略涉及將自然語言和數據庫架構轉換為結構化格式,以便語言模型有效利用。這一轉換對于將非結構化和半結構化數據轉換為可用于生成SQL查詢的格式至關重要。
- 順序編碼:將NL和數據庫架構視為一系列標記。
- 基于圖的編碼:利用數據庫的固有關系結構和輸入數據的復雜相互依賴性。
- 獨立編碼:將NL的不同部分(如子句和條件)分別編碼,然后在后期組合以生成最終的SQL。
編碼策略的概述
解碼策略(Decoding Strategy)
解碼策略在NL2SQL翻譯中扮演關鍵角色,負責將編碼器生成的表示轉換為目標SQL查詢。
- 貪婪搜索解碼:選擇當前概率最高的標記作為輸出。
- 束搜索解碼:保留多個候選序列,探索更大的搜索空間。
- 約束感知增量解碼:在解碼過程中逐步添加約束,確保生成的SQL查詢在語法上正確。
解碼策略的概述
特定于任務的提示策略(Task-specific Prompt Strategy)
在大型語言模型時代,提示工程可以發揮LLMs的能力,并已被廣泛應用于自然語言處理。
- 思維鏈:推動模型順序思考和推理任務目標。
- 分解:將最終任務分解為多個子任務,分別進行推理。
中間表示(Intermediate Representation)
中間表示(IR)是NL查詢和SQL查詢之間的橋梁,它是一個結構化但靈活的語法,捕捉NL查詢的基本組成部分和關系,而無需SQL的嚴格語法規則。
- SQL-like 語法語言:將用戶查詢轉換為中間的SQL-like表達式。
- SQL-like 草圖結構:構建草圖規則,將NL映射到SQL-like框架中。
中間表示的示例
NL2SQL的后處理策略
描述了在NL2SQL模型生成SQL之后,如何通過后處理步驟來優化和改進生成的SQL查詢,以更好地滿足用戶的期望。
SQL校正策略(SQL Correction Strategies)
- 目的:修正由模型生成的SQL中的語法錯誤。
- 方法:例如DIN-SQL提出的自我校正模塊,通過不同的提示指導模型識別和糾正錯誤。
輸出一致性(Output Consistency)
- 目的:提高模型輸出的一致性。
- 方法:例如C3-SQL提出的自我一致性方法,通過采樣多個不同的推理路徑并選擇最一致的答案來提高輸出質量。
執行引導策略(Execution-Guided Strategies)
- 目的:使用SQL查詢的執行結果來指導后續處理。
- 方法:如ZeroNL2SQL通過可執行性檢查過程不斷生成SQL查詢,并反饋錯誤信息給LLMs以實現可執行查詢。
N-best重排策略(N-best Rerankers Strategies)
- 目的:對原始模型生成的前n個結果進行重排序,通常使用更大的模型或結合額外的知識源。
- 方法:如Bertrand-dr使用BERT模型作為重排器來改進多個NL2SQL模型。
NL2SQL基準測試
詳細介紹了用于評估NL2SQL系統性能的各種數據集,分析了它們的特點,并探討了這些基準測試如何隨著時間的推移而發展。數據集從早期的單一領域、簡單SQL查詢發展到跨領域、多輪對話和多語言挑戰的復雜數據集。
NL2SQL基準測試的時間線
NL2SQL基準測試的統計數據
NL2SQL評估與錯誤分析
討論了評估NL2SQL系統性能的方法和工具,并提出了一個錯誤分類體系來組織和分析NL2SQL過程中的SQL錯誤。
NL2SQL之360全景的概述
- 錯誤分類體系設計為兩級:
- 錯誤定位(Error Localization):確定SQL中發生錯誤的具體部分。
- 錯誤原因(Cause of Error):理解模型在生成SQL時出錯的原因。
根據分類統計的Din-SQL錯誤
推薦NL2SQL模塊的數據驅動路線圖和決策流程
https://arxiv.org/pdf/2408.05109
A Survey of NL2SQL with Large Language Models:Where are we, and where are we going?
NL2SQL Handbook: https://github.com/HKUSTDial/NL2SQL_Handbook
本文轉載自??PaperAgent??
