?纸质?排行榜
在这里,我们提供了开发数据集的精简版: 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}
}