?紙?排行榜
在這裡,我們提供了開發資料集的精簡版: Mini-Dev 。此迷你開發資料集旨在促進高效且經濟高效的開發週期,特別是用於測試和完善 SQL 查詢生成模型。該資料集源自社群回饋,最終編譯了來自開發環境中 11 個不同資料庫的 500 個高品質 text2sql 對。為了進一步增強 BIRD 系統在產業環境中的實用性並支援文字轉 SQL 模型的開發,我們在MySQL和PostgreSQL中提供了 Mini-Dev 資料集。
此外,我們為 Mini-Dev 資料集引入了兩個新的評估指標:基於獎勵的有效效率分數 (R-VES)和Soft F1-Score 。這些指標旨在分別評估文字到 SQL 模型的效率和準確性。值得注意的是,這兩個指標目前處於測試版本,僅適用於使用基準模型的 Mini-Dev 資料集。
我們歡迎為增強這些指標提供貢獻和建議,特別是有關將其整合到現有排行榜的方面。如果您對這些發展感興趣或有任何改進建議,請隨時與我們聯繫。
以下是迷你開發資料集的一些關鍵統計數據:
此資料集包含以下主要資源:
database
:資料庫應儲存在./mini_dev_data/dev_databases/
下。在每個資料庫資料夾中,它都有兩個元件:database_description
:建立 csv 檔案是為了描述資料庫模式及其值,以供模型探索或參考。sqlite
:BIRD 中的資料庫內容。 筆記
您必須下載最新的開發資料庫才能在 MySQL 和 PostgreSQL 中建立資料庫。如果您僅使用SQLite版本,則可以使用原始開發資料庫。
data
:每個帶有 oracle 知識證據的文字到 SQL 對都儲存為 json 文件,即mini_dev_sqlite.json
儲存在./mini_dev_data/mini_dev_sqlite.json
上。在每個 json 檔案中,它有三個主要部分:db_id
:資料庫的名稱question
:眾包根據資料庫描述、資料庫內容策劃的問題。evidence
:由專家註釋的外部知識證據,以幫助模型或SQL註釋器。SQL
:眾包註解的SQL,參考資料庫描述、資料庫內容,準確回答問題。ground-truth SQL file
:SQL 檔案應儲存在./llm/mini_dev_data/mini_dev_sqlite_gold.sql
。llm
:它包含透過呼叫 LLM 的 API 將文字轉換為 SQL 的原始程式碼,例如GPT35-turbo-instruct
、 gpt-35-turbo
、 gpt-4
、 gpt-4-32k
和gpt-4-turbo
。 您可以在mini_dev_mysql.json
和mini_dev_postgresql.json
檔案中找到 SQL 查詢。這些查詢是使用 sqlglot 套件從原始 SQLite 版本轉譯而來,然後使用 GPT-4 Turbo 進行手動最佳化。下載 Mini-Dev 資料集後,每個資料庫資料夾將包含 .sql 和 command.script 檔案。請依照以下說明在 MySQL 和 PostgreSQL 中設定資料庫:
export PATH=$PATH:/usr/local/mysql/bin
sudo /usr/local/mysql/support-files/mysql.server start
mysql -u root -p
CREATE DATABASE BIRD ;
MINIDEV_mysql
資料夾中找到MySQL版本資料庫: BIRD_dev.sql
): mysql -u root -p BIRD < BIRD_dev.sql
如何在Python(使用pymysql)中執行mysql查詢的範例可以在examples/mysql_example.ipynb
檔案中找到。
如果遇到錯誤:“this is incomplete with sql_mode=only_full_group_by”,您可以執行以下命令來停用 sql_mode:
select @@ global . sql_mode ;
SET GLOBAL sql_mode = ' {EVERYTHING SHOW IN THE ABOVE COMMAND EXCEPT ONLY_FULL_GROUP_BY} ' ;
BIRD
的新資料庫MINIDEV_postgresql
資料夾中找到PostgreSQL版本資料庫: BIRD_dev.sql
): psql -U USERNAME -d BIRD -f BIRD_dev.sql
examples/postgresql_example.ipynb
檔案中找到。 首先,您需要在 python 環境中安裝 openai:
conda create -n BIRD python=3.11.5
pip install requirements.txt
使用此腳本在 Azure 雲端上執行 OpenAI 模型。 (您可能需要根據自己的喜好調整參數和路徑):
cd ./llm/
sh ./run/run_gpt.sh
請將您收集的結果進行後處理,格式如下: SQL 及其db_id
,由't----- bird -----t'
分割。這些範例顯示在./llm/exp_result/turbo_output/predict_mini_dev_gpt-4-turbo_cot_SQLite.json
中。將真實的 sql 檔案放入./data/
中。您可能需要自己設計一個ChatGPT標籤。 ex 評估的主檔案位於./llm/src/evaluation_ex.py
。
然後您可以透過以下命令列評估結果:
cd ./llm/
sh ./run/run_evaluation.sh
R-VES 評估的主檔案位於./llm/src/evaluation_ves.py
。 R-VES 和 EX 可以在同一個 shell 中進行評估,因此您可以透過以下方式評估效率:
cd ./llm/
sh ./run/run_evaluation.sh
(對於穩定的R-VES,您可能需要擴大timeout
或重複並平均結果。在我們的測試評估中,我們將timeout
擴大到3 s/ex;然後我們重複5次進行VES計算,只報告最高的結果.)
在最新版本中,我們調整了VES評估,使其更加穩定可靠。我們現在不再簡單地測量預測 SQL 和真實 SQL 之間的時間比率,而是根據時間比率分配獎勵點。 R-VES 計算如下:
Soft F1-Score 評估的主檔案位於./llm/src/evaluation_f1.py
。 Soft-F1、VES 和 EX 可以在同一個 shell 中進行評估,因此您可以透過以下方式評估效率:
cd ./llm/
sh ./run/run_evaluation.sh
除了 Mini-Dev 集的更新之外,我們還引入了一個新的評估指標——軟 F1 分數。此指標專門設計用於透過測量預測 SQL 查詢產生的表格與真實資料表之間的相似性來評估文字到 SQL 模型的效能。簡而言之,軟 F1 分數是一種更寬鬆的指標,可以減少預測 SQL 查詢產生的表中列順序和缺失值的影響。
下面示範了我們如何計算軟 F1 分數。
地面真實SQL結果表:
排 | ||
---|---|---|
1 | '蘋果' | 325 |
2 | '橘子' | |
3 | '香蕉' | 119 |
預測的SQL結果表:
排 | ||
---|---|---|
1 | 325 | '蘋果' |
2 | 191 | '橘子' |
3 | '香蕉' |
軟 F1 分數計算如下:
匹配的 | 僅預測 | 僅限黃金 | |
---|---|---|---|
第 1 行 | 2 | 0 | 0 |
第 2 行 | 1 | 1 | 0 |
第3行 | 1 | 0 | 1 |
SQLite | MySQL | PostgreSQL | |
---|---|---|---|
混合-8x7b | 21.60 | 13.60 | 12.40 |
llama3-8b-指示 | 24.40 | 24.60 | 18.40 |
phi-3-medium-128k-指令 | 30.60 | 25:00 | 21.60 |
gpt-35-turbo-指令 | 33.60 | 31.20 | 26.60 |
GPT-35-渦輪 | 38:00 | 36:00 | 27.40 |
llama3-70b-指示 | 40.80 | 37:00 | 29.40 |
TA + GPT-35-渦輪 | 41.60 | - | - |
TA + llama3-70b-指導 | 42.80 | - | - |
GPT-4-渦輪 | 45.80 | 41.00 | 36:00 |
gpt-4-32k | 47.00 | 43.20 | 35:00 |
GPT-4 | 47.80 | 40.80 | 35.80 |
TA + gpt-4-渦輪 | 58.00 | - | - |
TA+gpt-4o | 63.00 | - | - |
SQLite | MySQL | PostgreSQL | |
---|---|---|---|
混合-8x7b | 20.41 | 12.99 | 14.16 |
llama3-8b-指示 | 23.27 | 23.66 | 17.90 |
phi-3-medium-128k-指令 | 29.54 | 24.12 | 21.07 |
gpt-35-turbo-指令 | 32.28 | 30.39 | 26.14 |
GPT-35-渦輪 | 37.33 | 34.94 | 26.80 |
llama3-70b-指示 | 39.02 | 35.82 | 28.80 |
TA + GPT-35-渦輪 | 40.59 | - | - |
TA + llama3-70b-指導 | 41.37 | - | - |
GPT-4-渦輪 | 44.79 | 39.37 | 35.23 |
gpt-4-32k | 45.29 | 42.79 | 34.59 |
GPT-4 | 45.91 | 39.92 | 35.24 |
TA + gpt-4-渦輪 | 56.44 | - | - |
TA+gpt-4o | 60.86 | - | - |
SQLite | MySQL | PostgreSQL | |
---|---|---|---|
混合-8x7b | 22.95 | 13.79 | 14.70 |
llama3-8b-指示 | 27.87 | 27.49 | 19.35 |
phi-3-medium-128k-指令 | 35.33 | 28.73 | 24.11 |
gpt-35-turbo-指令 | 36.34 | 33.85 | 28.30 |
GPT-35-渦輪 | 41.84 | 40.75 | 30.22 |
TA + GPT-35-渦輪 | 44.25 | - | - |
llama3-70b-指示 | 44.38 | 40.95 | 31.43 |
TA + llama3-70b-指導 | 46.66 | - | - |
GPT-4-渦輪 | 50.08 | 45.96 | 38.36 |
gpt-4-32k | 51.92 | 47.38 | 39.55 |
GPT-4 | 52.69 | 45.78 | 38.96 |
TA + gpt-4-渦輪 | 62.40 | - | - |
TA+gpt-4o | 66.97 | - | - |
我們將基線模型的預測 SQL 放在./llm/exp_result/sql_output_kg/
下以供參考。
Mini-Dev專案主要貢獻者:Xiaolong Li、Jinyang Li、Ge Qu、Binyuan Hui、Reynold Cheng、Chenhao Ma。
我們衷心感謝開放社群的寶貴回饋,包括 github 審閱者 (@freiz @nnarodytska @josem7 @wbbeyourself @ronch99 @tshu-w ) 以及透過電子郵件向我們提出寶貴建議的人。
如有任何疑問,請透過[email protected]與我們聯繫。
TA-SQL
作為 ICL 推理基線。 如果您認為我們的工作對您有幫助,請引用該儲存庫。
@article{li2024can,
title={Can llm already serve as a database interface? a big bench for large-scale database grounded text-to-sqls},
author={Li, Jinyang and Hui, Binyuan and Qu, Ge and Yang, Jiaxi and Li, Binhua and Li, Bowen and Wang, Bailin and Qin, Bowen and Geng, Ruiying and Huo, Nan and others},
journal={Advances in Neural Information Processing Systems},
volume={36},
year={2024}
}