?Papier ?Classement
Ici, nous fournissons une version Lite de l'ensemble de données de développement : Mini-Dev . Ce mini-ensemble de données de développement est conçu pour faciliter des cycles de développement efficaces et rentables, en particulier pour tester et affiner les modèles de génération de requêtes SQL. Cet ensemble de données résulte des commentaires de la communauté, conduisant à la compilation de 500 paires text2sql de haute qualité dérivées de 11 bases de données distinctes dans un environnement de développement. Pour améliorer encore l'aspect pratique du système BIRD dans les environnements industriels et prendre en charge le développement de modèles texte-vers-SQL, nous rendons l'ensemble de données Mini-Dev disponible dans MySQL et PostgreSQL .
De plus, nous introduisons deux nouvelles mesures d'évaluation pour l'ensemble de données Mini-Dev : le score d'efficacité valide basé sur les récompenses (R-VES) et le Soft F1-Score . Ces métriques visent à évaluer respectivement l’efficacité et la précision des modèles texte-vers-SQL. Il est important de noter que les deux métriques, actuellement dans leur version bêta, s'appliquent exclusivement à l'ensemble de données Mini-Dev utilisant des modèles de base.
Nous apprécions les contributions et suggestions pour améliorer ces mesures, en particulier en ce qui concerne leur intégration dans les classements existants. N'hésitez pas à nous contacter si vous êtes intéressé par ces évolutions ou si vous avez des propositions d'améliorations.
Vous trouverez ci-dessous quelques statistiques clés de l'ensemble de données du mini-développement :
L'ensemble de données contient les principales ressources suivantes :
database
: la base de données doit être stockée sous le ./mini_dev_data/dev_databases/
. Dans chaque dossier de base de données, il comporte deux composants :database_description
: les fichiers csv sont fabriqués pour décrire le schéma de la base de données et ses valeurs pour les modèles à explorer ou les références.sqlite
: Le contenu de la base de données dans BIRD. Note
Vous devez télécharger les dernières bases de données de développement afin de construire une base de données dans MySQL et PostgreSQL. Si vous utilisez uniquement la version SQLite, vous pouvez utiliser les bases de données de développement d'origine.
data
: chaque paire texte vers SQL avec les preuves de connaissances Oracle est stockée sous forme de fichier json, c'est-à-dire que mini_dev_sqlite.json
est stocké sur ./mini_dev_data/mini_dev_sqlite.json
. Dans chaque fichier json, il comporte trois parties principales :db_id
: les noms des bases de donnéesquestion
: les questions organisées par le crowdsourcing humain en fonction des descriptions de la base de données et du contenu de la base de données.evidence
: la preuve de connaissance externe annotée par des experts pour l'assistance de modèles ou d'annotateurs SQL.SQL
: SQL annotés par crowdsource faisant référence aux descriptions des bases de données, au contenu de la base de données, pour répondre avec précision aux questions.ground-truth SQL file
: Le fichier SQL doit être stocké dans ./llm/mini_dev_data/mini_dev_sqlite_gold.sql
.llm
: Il contient des codes sources pour convertir des textes en SQL en appelant des API à partir de LLM, telles que GPT35-turbo-instruct
, gpt-35-turbo
, gpt-4
, gpt-4-32k
et gpt-4-turbo
. Vous pouvez localiser les requêtes SQL dans les fichiers mini_dev_mysql.json
et mini_dev_postgresql.json
. Ces requêtes ont été transpilées à partir des versions SQLite originales à l'aide du package sqlglot, puis affinées manuellement et avec GPT-4 Turbo. Après avoir téléchargé l'ensemble de données Mini-Dev, chaque dossier de base de données contiendra les fichiers .sql et command.script. Suivez les instructions ci-dessous pour configurer la base de données dans MySQL et PostgreSQL :
export PATH=$PATH:/usr/local/mysql/bin
sudo /usr/local/mysql/support-files/mysql.server start
mysql -u root -p
CREATE DATABASE BIRD ;
BIRD_dev.sql
dans le dossier MINIDEV_mysql
) : mysql -u root -p BIRD < BIRD_dev.sql
Des exemples montrant comment exécuter une requête MySQL dans Python (avec pymysql) peuvent être trouvés dans le fichier examples/mysql_example.ipynb
.
Si vous rencontrez l'erreur : "this is incompatible with sql_mode=only_full_group_by", vous pouvez exécuter la commande suivante pour désactiver le sql_mode :
select @@ global . sql_mode ;
SET GLOBAL sql_mode = ' {EVERYTHING SHOW IN THE ABOVE COMMAND EXCEPT ONLY_FULL_GROUP_BY} ' ;
BIRD
BIRD_dev.sql
dans le dossier MINIDEV_postgresql
) : psql -U USERNAME -d BIRD -f BIRD_dev.sql
examples/postgresql_example.ipynb
. Tout d'abord, vous devez installer openai dans votre environnement python en :
conda create -n BIRD python=3.11.5
pip install requirements.txt
Utilisez ce script pour exécuter le modèle OpenAI sur le cloud Azure. (vous devrez peut-être ajuster les paramètres et les chemins selon vos préférences) :
cd ./llm/
sh ./run/run_gpt.sh
Veuillez post-traiter vos résultats collectés au format : SQL et son db_id
, qui est divisé par 't----- bird -----t'
. Les exemples sont présentés dans ./llm/exp_result/turbo_output/predict_mini_dev_gpt-4-turbo_cot_SQLite.json
. Mettez le fichier SQL de vérité terrain dans le ./data/
. Et vous devrez peut-être concevoir vous-même une balise ChatGPT. Le fichier principal pour l'évaluation ex se trouve à ./llm/src/evaluation_ex.py
.
Ensuite, vous pouvez évaluer les résultats par la ligne de commande suivante :
cd ./llm/
sh ./run/run_evaluation.sh
Le fichier principal de l'évaluation R-VES se trouve à l' ./llm/src/evaluation_ves.py
. R-VES et EX peuvent être évalués dans le même shell, vous pouvez donc évaluer votre efficacité via :
cd ./llm/
sh ./run/run_evaluation.sh
(Pour un R-VES stable, vous devrez peut-être agrandir timeout
ou répéter et faire la moyenne des résultats. Dans notre évaluation de test, nous augmenterons timeout
à 3 s/ex ; puis nous répétons 5 fois pour le calcul du VES, seuls les résultats les plus élevés seront rapportés. .)
Dans la dernière version, nous ajustons l'évaluation VES pour qu'elle soit plus stable et fiable. Au lieu de simplement mesurer le rapport de temps entre les SQL de prédiction et de vérité terrain, nous attribuons désormais des points de récompense en fonction du rapport de temps. Les R-VES sont calculés comme suit :
Le fichier principal pour l'évaluation Soft F1-Score se trouve à l' ./llm/src/evaluation_f1.py
. Soft-F1, VES et EX peuvent être évalués dans le même shell, vous pouvez donc évaluer votre efficacité via :
cd ./llm/
sh ./run/run_evaluation.sh
Parallèlement à la mise à jour de l'ensemble Mini-Dev, nous avons introduit une nouvelle mesure d'évaluation : le soft F1-score. Cette métrique est spécifiquement conçue pour évaluer les performances des modèles texte-vers-SQL en mesurant la similarité entre les tables produites par les requêtes SQL prédites et celles issues de la vérité terrain. En un mot, le score F1 souple est une métrique plus indulgente qui réduit l'impact de l'ordre des colonnes et des valeurs manquantes dans les tableaux produits par les requêtes SQL prédites.
Ce qui suit montre comment nous calculons le score F1 souple.
Table de résultats SQL de vérité terrain :
Rangée | ||
---|---|---|
1 | 'Pomme' | 325 |
2 | 'Orange' | |
3 | 'Banane' | 119 |
Table des résultats SQL prédit :
Rangée | ||
---|---|---|
1 | 325 | 'Pomme' |
2 | 191 | 'Orange' |
3 | 'Banane' |
Le soft F1-score est calculé comme suit :
Correspondant | Pred_only | Or_seulement | |
---|---|---|---|
Rangée 1 | 2 | 0 | 0 |
Rangée 2 | 1 | 1 | 0 |
Rangée 3 | 1 | 0 | 1 |
SQLite | MySQL | PostgreSQL | |
---|---|---|---|
mixtral-8x7b | 21h60 | 13h60 | 12h40 |
lama3-8b-instruct | 24h40 | 24h60 | 18h40 |
phi-3-medium-128k-instruct | 30h60 | 25h00 | 21h60 |
gpt-35-turbo-instruct | 33.60 | 31h20 | 26h60 |
gpt-35-turbo | 38h00 | 36h00 | 27h40 |
lama3-70b-instruct | 40,80 | 37h00 | 29h40 |
TA + gpt-35-turbo | 41,60 | - | - |
TA + lama3-70b-instruct | 42,80 | - | - |
gpt-4-turbo | 45,80 | 41h00 | 36h00 |
gpt-4-32k | 47h00 | 43.20 | 35h00 |
gpt-4 | 47,80 | 40,80 | 35,80 |
TA + gpt-4-turbo | 58h00 | - | - |
TA + gpt-4o | 63h00 | - | - |
SQLite | MySQL | PostgreSQL | |
---|---|---|---|
mixtral-8x7b | 20h41 | 12,99 | 14.16 |
lama3-8b-instruct | 23.27 | 23.66 | 17h90 |
phi-3-medium-128k-instruct | 29.54 | 24.12 | 21.07 |
gpt-35-turbo-instruct | 32.28 | 30.39 | 26.14 |
gpt-35-turbo | 37.33 | 34,94 | 26.80 |
lama3-70b-instruct | 39.02 | 35,82 | 28.80 |
TA + gpt-35-turbo | 40.59 | - | - |
TA + lama3-70b-instruct | 41.37 | - | - |
gpt-4-turbo | 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-turbo | 56.44 | - | - |
TA + gpt-4o | 60,86 | - | - |
SQLite | MySQL | PostgreSQL | |
---|---|---|---|
mixtral-8x7b | 22,95 | 13.79 | 14h70 |
lama3-8b-instruct | 27,87 | 27h49 | 19h35 |
phi-3-medium-128k-instruct | 35.33 | 28.73 | 24.11 |
gpt-35-turbo-instruct | 36.34 | 33,85 | 28h30 |
gpt-35-turbo | 41,84 | 40,75 | 30.22 |
TA + gpt-35-turbo | 44.25 | - | - |
lama3-70b-instruct | 44.38 | 40,95 | 31.43 |
TA + lama3-70b-instruct | 46,66 | - | - |
gpt-4-turbo | 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-turbo | 62.40 | - | - |
TA + gpt-4o | 66,97 | - | - |
Nous supprimons les SQL prédits des modèles de base sous ./llm/exp_result/sql_output_kg/
pour référence.
Principaux contributeurs au projet Mini-Dev : Xiaolong Li, Jinyang Li, Ge Qu, Binyuan Hui, Reynold Cheng, Chenhao Ma.
Nous exprimons notre sincère gratitude aux précieux commentaires de la communauté ouverte, y compris les réviseurs de github (@freiz @nnarodytska @josem7 @wbbeyourself @ronch99 @tshu-w ) et ceux qui nous ont contacté par e-mail avec leurs précieuses suggestions.
Pour toute question, veuillez nous contacter par [email protected].
TA-SQL
comme référence de raisonnement ICL. Veuillez citer le dépôt si vous pensez que notre travail vous est utile.
@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}
}