網(wǎng)站欄目頁如何做網(wǎng)絡(luò)推廣平臺公司
你好,我是 shengjk1,多年大廠經(jīng)驗,努力構(gòu)建 通俗易懂的、好玩的編程語言教程。 歡迎關(guān)注!你會有如下收益:
- 了解大廠經(jīng)驗
- 擁有和大廠相匹配的技術(shù)等
希望看什么,評論或者私信告訴我!
文章目錄
- 一、背景
- 二、NL2SQL 的實現(xiàn)方式
- 2.1 Vanna
- 2.2 DAIL-SQL
- 2.3 其他的實現(xiàn)方式
- 2.4 總結(jié)
- 三、實現(xiàn)樣例
- 四、 text2sql 測試集介紹
- 4.1. **WikiSQL**
- 4.2. **Spider**
- 4.3. **BIRD**
- 五、EM 和 EX 介紹
- 七、總結(jié)
一、背景
關(guān)注 NL2SQL 也有一段時間了,剛好公司最近也要做 NL2SQL,我也剛好看了幾個 NL2SQL 的開源項目以及 論文,所以現(xiàn)在總結(jié)一下。
二、NL2SQL 的實現(xiàn)方式
2.1 Vanna
先說一下目前比較火的開源項目 Vanna 的實現(xiàn)方式:RAG + LLM
這是它的整體架構(gòu)和實現(xiàn)方式:
我也翻了一下它的源碼,它內(nèi)部實現(xiàn)特別暴力,通過用戶的 question,將 schemal、doc 以及 sql 全部查出來,拼接 prompt 然后給大模型。
這是 vanna 源碼的生成 sql 的邏輯
Uses the LLM to generate a SQL query that answers a question. It runs the following methods:- [`get_similar_question_sql`][vanna.base.base.VannaBase.get_similar_question_sql]- [`get_related_ddl`][vanna.base.base.VannaBase.get_related_ddl]- [`get_related_documentation`][vanna.base.base.VannaBase.get_related_documentation]- [`get_sql_prompt`][vanna.base.base.VannaBase.get_sql_prompt]- [`submit_prompt`][vanna.base.base.VannaBase.submit_prompt]
我自己基于 muilt-agent 開發(fā)了類似的功能,few-shot 的正確率確實要高一些
2.2 DAIL-SQL
DaIL-SQL 曾經(jīng)的王者,在 Spider EX 正確率 86.6 %,我讀了它的論文 ,它的核心在于 prompt :在 schemal 上增加了 相似問題和對應(yīng)SQL,從而提高正確性
2.3 其他的實現(xiàn)方式
目前這一塊在學(xué)術(shù)界不斷的創(chuàng)新,每隔一段時間就會有新的方式出來來刷新之前的最好成績,感興趣的可以看一下 Awesome-Text2SQL
2.4 總結(jié)
目前我了解到的所有的實現(xiàn)方式都逃不過:RAG +LLM,目前可以優(yōu)化的點無非就是
- RAG 想辦法提高 RAG 數(shù)據(jù)的正確率
- 元數(shù)據(jù),元數(shù)據(jù)有問題,RAG的正確率再高也無濟(jì)于事
- prompt,通過優(yōu)化 prompt,比如 MCS-SQL 利用多個提示和多項選擇來生成文本到 SQL
- LLM 目前的初步結(jié)論是參數(shù)越多效果越好
三、實現(xiàn)樣例
有一個張 a
CREATE TABLE aa (`all_dau` BIGINT COMMENT 'DAU',`long_dau` BIGINT COMMENT '長DAU',`short_dau` BIGINT COMMENT '短DAU',`date` INT COMMENT '分區(qū)')
PARTITIONED BY (date)
我現(xiàn)在要查詢表 a 最近 7 天 長DAU 和是多少? 應(yīng)該怎么做。
- 將 表 a 相關(guān)的元數(shù)據(jù),本例子就是 DDL 寫入到向量數(shù)據(jù)庫
- 根據(jù)用戶提問查詢 RAG 得到表 a 相關(guān)的信息
- 拼接 prompt
- 發(fā)給大模型
比如,拼接 prompt 為
CREATE TABLE aa (`all_dau` BIGINT COMMENT 'DAU',`long_dau` BIGINT COMMENT '長DAU',`short_dau` BIGINT COMMENT '短DAU',`date` INT COMMENT '分區(qū)')
PARTITIONED BY (date)要查詢表 a 最近 7 天 長DAU 和是多少?返回對應(yīng)的SQL
發(fā)給大模型,大模型返回結(jié)果為
要查詢表 `aa` 中最近 7 天的長 DAU (`long_dau`) 數(shù)量,您可以使用以下的 SQL 查詢語句,假設(shè) `date` 列存儲的是日期的整數(shù)表示(例如 UNIX 時間戳或特定的日期編碼):```sql
SELECT SUM(long_dau) AS total_long_dau
FROM aa
WHERE date >= CURDATE() - INTERVAL 7 DAY;
這里,我們使用了 SUM
函數(shù)來計算 long_dau
的總和,并且使用 WHERE
子句來過濾出最近 7 天的數(shù)據(jù)。CURDATE()
函數(shù)返回當(dāng)前日期,然后通過 INTERVAL 7 DAY
添加 7 天的間隔,然后使用 -
操作符來得到 7 天前的日期。這樣,您就可以得到最近 7 天的長 DAU 的總和。
四、 text2sql 測試集介紹
是的,WikiSQL、Spider 和 BIRD 是常用的 Text-to-SQL 測試集,它們用于評估模型在自然語言查詢到結(jié)構(gòu)化查詢語言(SQL)轉(zhuǎn)換方面的能力。以下是它們的簡要介紹:
4.1. WikiSQL
-
概述:
- WikiSQL 是一個大規(guī)模的 Text-to-SQL 數(shù)據(jù)集,包含了由自然語言查詢生成的 SQL 查詢。數(shù)據(jù)集來自維基百科中的表格。
-
特點:
- 包含 80,000 條自然語言查詢和相應(yīng)的 SQL 查詢。用戶可以通過簡單地詢問表格中的信息來生成 SQL。
- 確保多樣性,通過多種問題類型測試模型的靈活性。
4.2. Spider
-
概述:
- Spider 是一個大規(guī)模的、跨數(shù)據(jù)庫的 Text-to-SQL 數(shù)據(jù)集,旨在測試模型在不同數(shù)據(jù)庫架構(gòu)下的泛化能力。
-
特點:
- 包含 10,000 多個自然語言查詢與 SQL 查詢配對,涉及 200 多種不同的數(shù)據(jù)庫結(jié)構(gòu)。
- 支持復(fù)雜的 SQL 查詢,如嵌套查詢和聯(lián)合查詢。
- 設(shè)計以提高模型的實際應(yīng)用能力,更接近真實世界的使用場景。
4.3. BIRD
-
概述:
- BIRD 是一個專注于信息抽取的 Text-to-SQL 數(shù)據(jù)集,主要來源于真實的數(shù)據(jù)庫和自然語言問題。
-
特點:
- 旨在評估模型的魯棒性,特別是在面對模糊或含糊的問題時。
- 提供多樣化的問題類型和復(fù)雜的 SQL 邏輯,挑戰(zhàn)模型的理解和推理能力。
這些測試集為評估和推動 Text-to-SQL 模型的發(fā)展提供了標(biāo)準(zhǔn)化的基準(zhǔn),幫助研究人員在自然語言理解和數(shù)據(jù)庫查詢方面進(jìn)行有效比較。通過這些挑戰(zhàn),模型能夠逐步提高在實際應(yīng)用中的準(zhǔn)確性和效率。
五、EM 和 EX 介紹
這里以 Spider Exact Match (EM) 和 Spider Exact Execution (EX) 為例介紹:
在 Text-to-SQL 測試集領(lǐng)域,Spider Exact Match (EM) 和 Spider Exact Execution (EX) 是兩種評估模型性能的指標(biāo),它們都與 Spider 數(shù)據(jù)集相關(guān),但評估的側(cè)重點有所不同。
聯(lián)系:
兩者都是用來評估 Text-to-SQL 模型性能的指標(biāo)。它們都需要模型根據(jù)輸入的文本描述生成相應(yīng)的 SQL 查詢語句。這兩個指標(biāo)都是在 Spider 數(shù)據(jù)集上使用的,關(guān)注模型的查詢生成能力與真實數(shù)據(jù)庫執(zhí)行結(jié)果的一致性。
區(qū)別:
- Spider Exact Match (EM):主要關(guān)注生成的 SQL 查詢是否與數(shù)據(jù)集中提供的標(biāo)準(zhǔn)查詢語句完全匹配。它評估模型是否能夠準(zhǔn)確生成與參考查詢語句結(jié)構(gòu)、語法和語義完全一致的 SQL 代碼。如果生成的 SQL 查詢與參考查詢完全一致,則被認(rèn)為是正確的。這種評估更側(cè)重于模型的查詢生成能力。
- Spider Exact Execution (EX):更關(guān)注生成的 SQL 查詢在實際數(shù)據(jù)庫上的執(zhí)行結(jié)果是否與預(yù)期結(jié)果一致。它不僅檢查查詢語句的語法和結(jié)構(gòu),還檢查查詢的執(zhí)行結(jié)果是否正確。這意味著模型不僅要生成結(jié)構(gòu)正確的查詢語句,還要保證這些查詢能夠在數(shù)據(jù)庫上返回正確的結(jié)果。這種評估方式更全面地考慮了模型的性能,包括查詢生成能力和數(shù)據(jù)庫執(zhí)行能力。
簡而言之,EM 主要關(guān)注查詢語句本身的準(zhǔn)確性,而 EX 則更關(guān)注查詢在實際數(shù)據(jù)庫上的執(zhí)行結(jié)果的準(zhǔn)確性。在實際應(yīng)用中,可以根據(jù)需求選擇合適的評估指標(biāo)。
七、總結(jié)
本文對Text2SQL的實現(xiàn)方式、測試集和評估指標(biāo)進(jìn)行了介紹和總結(jié),全面了解了Text2SQL技術(shù)的相關(guān)內(nèi)容,對于從事Text2SQL的研究者具有一定的參考意義。