一篇大模型 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
推薦閱讀
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/GnTOjH82rmJBeIs3msGPCg