?Papier ?Bestenliste
Hier stellen wir eine Lite-Version des Entwicklungsdatensatzes zur Verfügung: Mini-Dev . Dieser Mini-Entwicklungsdatensatz soll effiziente und kostengünstige Entwicklungszyklen ermöglichen, insbesondere zum Testen und Verfeinern von SQL-Abfragegenerierungsmodellen. Dieser Datensatz ist das Ergebnis des Community-Feedbacks und führte zur Zusammenstellung von 500 hochwertigen text2sql-Paaren, die aus 11 verschiedenen Datenbanken in einer Entwicklungsumgebung abgeleitet wurden. Um die Praktikabilität des BIRD-Systems in Branchenumgebungen weiter zu verbessern und die Entwicklung von Text-zu-SQL-Modellen zu unterstützen, stellen wir den Mini-Dev-Datensatz sowohl in MySQL als auch in PostgreSQL zur Verfügung.
Darüber hinaus führen wir zwei neue Bewertungsmetriken für den Mini-Dev-Datensatz ein: den belohnungsbasierten Valid Efficiency Score (R-VES) und den Soft F1-Score . Diese Metriken zielen darauf ab, die Effizienz bzw. Genauigkeit von Text-zu-SQL-Modellen zu bewerten. Es ist wichtig zu beachten, dass beide Metriken, die sich derzeit in der Betaversion befinden, ausschließlich für den Mini-Dev-Datensatz gelten, der Basismodelle verwendet.
Wir freuen uns über Beiträge und Vorschläge zur Verbesserung dieser Kennzahlen, insbesondere im Hinblick auf ihre Integration in bestehende Bestenlisten. Wenn Sie an diesen Entwicklungen interessiert sind oder Verbesserungsvorschläge haben, zögern Sie nicht, uns zu kontaktieren.
Nachfolgend finden Sie einige wichtige Statistiken des Mini-Dev-Datensatzes:
Der Datensatz enthält die folgenden Hauptressourcen:
database
: Die Datenbank sollte unter ./mini_dev_data/dev_databases/
gespeichert werden. In jedem Datenbankordner gibt es zwei Komponenten:database_description
: Die CSV-Dateien werden erstellt, um das Datenbankschema und seine Werte für zu untersuchende Modelle oder Referenzen zu beschreiben.sqlite
: Der Datenbankinhalt in BIRD. Notiz
Sie müssen die neuesten Entwicklungsdatenbanken herunterladen, um eine Datenbank in MySQL und PostgreSQL zu erstellen. Wenn Sie nur die SQLite-Version verwenden, können Sie die Original-Entwicklungsdatenbanken verwenden.
data
: Jedes Text-zu-SQL-Paar mit dem Oracle-Wissensnachweis wird als JSON-Datei gespeichert, d. h. mini_dev_sqlite.json
wird unter ./mini_dev_data/mini_dev_sqlite.json
gespeichert. Jede JSON-Datei besteht aus drei Hauptteilen:db_id
: die Namen der Datenbankenquestion
: Die durch menschliches Crowdsourcing kuratierten Fragen gemäß Datenbankbeschreibungen und Datenbankinhalten.evidence
: die externen Wissensnachweise, die von Experten zur Unterstützung von Modellen oder SQL-Annotatoren kommentiert werden.SQL
: Von Crowdsource mit Anmerkungen versehene SQLs, die sich auf Datenbankbeschreibungen und Datenbankinhalte beziehen, um die Fragen genau zu beantworten.ground-truth SQL file
: Die SQL-Datei sollte unter ./llm/mini_dev_data/mini_dev_sqlite_gold.sql
gespeichert werden.llm
: Es enthält Quellcodes zum Konvertieren von Texten in SQLs durch Aufrufen von APIs von LLMs, wie z. B. GPT35-turbo-instruct
, gpt-35-turbo
, gpt-4
, gpt-4-32k
und gpt-4-turbo
. Sie finden die SQL-Abfragen in den Dateien mini_dev_mysql.json
und mini_dev_postgresql.json
. Diese Abfragen wurden aus den ursprünglichen SQLite-Versionen mit dem sqlglot-Paket transpiliert und dann manuell und mit GPT-4 Turbo verfeinert. Nach dem Herunterladen des Mini-Dev-Datensatzes enthält jeder Datenbankordner .sql- und command.script-Dateien. Befolgen Sie die nachstehenden Anweisungen, um die Datenbank in MySQL und PostgreSQL einzurichten:
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
im Ordner MINIDEV_mysql
): mysql -u root -p BIRD < BIRD_dev.sql
Beispiele für die Ausführung einer MySQL-Abfrage in Python (mit pymysql) finden Sie in der Datei examples/mysql_example.ipynb
.
Wenn der Fehler auftritt: „Dies ist nicht kompatibel mit sql_mode=only_full_group_by“, können Sie den folgenden Befehl ausführen, um den sql_mode zu deaktivieren:
select @@ global . sql_mode ;
SET GLOBAL sql_mode = ' {EVERYTHING SHOW IN THE ABOVE COMMAND EXCEPT ONLY_FULL_GROUP_BY} ' ;
BIRD
BIRD_dev.sql
im Ordner MINIDEV_postgresql
): psql -U USERNAME -d BIRD -f BIRD_dev.sql
examples/postgresql_example.ipynb
. Zuerst müssen Sie openai in Ihrer Python-Umgebung installieren, indem Sie:
conda create -n BIRD python=3.11.5
pip install requirements.txt
Verwenden Sie dieses Skript, um das OpenAI-Modell in der Azure-Cloud auszuführen. (Möglicherweise müssen Sie Parameter und Pfade nach Ihren Wünschen anpassen):
cd ./llm/
sh ./run/run_gpt.sh
Bitte verarbeiten Sie Ihre gesammelten Ergebnisse im folgenden Format nach: SQL und seiner db_id
, die durch 't----- bird -----t'
aufgeteilt wird. Die Beispiele werden in ./llm/exp_result/turbo_output/predict_mini_dev_gpt-4-turbo_cot_SQLite.json
angezeigt. Legen Sie die Ground-Truth-SQL-Datei im Verzeichnis ./data/
ab. Und möglicherweise müssen Sie selbst ein ChatGPT-Tag entwerfen. Die Hauptdatei für die Ex-Bewertung befindet sich unter ./llm/src/evaluation_ex.py
.
Anschließend können Sie die Ergebnisse mit der folgenden Befehlszeile auswerten:
cd ./llm/
sh ./run/run_evaluation.sh
Die Hauptdatei für die R-VES-Bewertung befindet sich unter ./llm/src/evaluation_ves.py
. R-VES und EX können in derselben Shell evaluiert werden, sodass Sie Ihre Effizienz bewerten können über:
cd ./llm/
sh ./run/run_evaluation.sh
(Für ein stabiles R-VES müssen Sie möglicherweise timeout
verlängern oder die Ergebnisse wiederholen und mitteln. In unserer Testauswertung werden wir timeout
auf 3 s/ex erhöhen; dann wiederholen wir die VES-Berechnung 5 Mal, nur die höchsten Ergebnisse werden gemeldet .)
In der neuesten Version passen wir die VES-Auswertung an, um stabiler und zuverlässiger zu sein. Anstatt einfach das Zeitverhältnis zwischen Vorhersage- und Ground-Truth-SQLs zu messen, weisen wir jetzt Belohnungspunkte basierend auf dem Zeitverhältnis zu. Die R-VES werden wie folgt berechnet:
Die Hauptdatei für die Soft-F1-Score-Auswertung befindet sich unter ./llm/src/evaluation_f1.py
. Soft-F1, VES und EX können in derselben Shell evaluiert werden, sodass Sie Ihre Effizienz bewerten können über:
cd ./llm/
sh ./run/run_evaluation.sh
Parallel zur Aktualisierung des Mini-Dev-Sets haben wir eine neue Bewertungsmetrik eingeführt – den Soft-F1-Score. Diese Metrik wurde speziell entwickelt, um die Leistung von Text-zu-SQL-Modellen zu bewerten, indem die Ähnlichkeit zwischen den durch vorhergesagte SQL-Abfragen erstellten Tabellen und denen aus der Grundwahrheit gemessen wird. Kurz gesagt ist der weiche F1-Score eine mildere Metrik, die die Auswirkungen der Spaltenreihenfolge und fehlender Werte in den durch vorhergesagte SQL-Abfragen erstellten Tabellen reduziert.
Im Folgenden wird gezeigt, wie wir den Soft-F1-Score berechnen.
Ground-Truth-SQL-Ergebnistabelle:
Reihe | ||
---|---|---|
1 | 'Apfel' | 325 |
2 | 'Orange' | |
3 | 'Banane' | 119 |
Tabelle mit vorhergesagten SQL-Ergebnissen:
Reihe | ||
---|---|---|
1 | 325 | 'Apfel' |
2 | 191 | 'Orange' |
3 | 'Banane' |
Der Soft-F1-Score wird wie folgt berechnet:
Passend | Pred_only | Nur Gold | |
---|---|---|---|
Reihe 1 | 2 | 0 | 0 |
Reihe 2 | 1 | 1 | 0 |
Reihe 3 | 1 | 0 | 1 |
SQLite | MySQL | PostgreSQL | |
---|---|---|---|
mixtral-8x7b | 21.60 | 13.60 | 12.40 |
llama3-8b-instruct | 24.40 | 24.60 | 18.40 |
phi-3-medium-128k-instruct | 30,60 | 25.00 | 21.60 |
gpt-35-turbo-instruct | 33,60 | 31.20 | 26.60 |
gpt-35-turbo | 38.00 | 36.00 | 27.40 |
llama3-70b-instruct | 40,80 | 37.00 | 29.40 |
TA + gpt-35-turbo | 41,60 | - | - |
TA + Lama3-70b-Anweisung | 42,80 | - | - |
gpt-4-turbo | 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-Turbo | 58,00 | - | - |
TA + gpt-4o | 63,00 | - | - |
SQLite | MySQL | PostgreSQL | |
---|---|---|---|
mixtral-8x7b | 20.41 | 12,99 | 14.16 |
llama3-8b-instruct | 23.27 | 23.66 | 17.90 |
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 |
llama3-70b-instruct | 39.02 | 35,82 | 28,80 |
TA + gpt-35-turbo | 40,59 | - | - |
TA + Lama3-70b-Anweisung | 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 | 14.70 |
llama3-8b-instruct | 27.87 | 27.49 | 19.35 |
phi-3-medium-128k-instruct | 35.33 | 28.73 | 24.11 |
gpt-35-turbo-instruct | 36,34 | 33,85 | 28.30 |
gpt-35-turbo | 41,84 | 40,75 | 30.22 |
TA + gpt-35-turbo | 44,25 | - | - |
llama3-70b-instruct | 44,38 | 40,95 | 31.43 |
TA + Lama3-70b-Anweisung | 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 | - | - |
Wir legen die vorhergesagten SQLs der Basismodelle als Referenz unter ./llm/exp_result/sql_output_kg/
ab.
Hauptmitwirkende am Mini-Dev-Projekt: Xiaolong Li, Jinyang Li, Ge Qu, Binyuan Hui, Reynold Cheng, Chenhao Ma.
Wir danken aufrichtig den unschätzbaren Rückmeldungen der offenen Community, einschließlich der Github-Rezensenten (@freiz @nnarodytska @josem7 @wbbeyourself @ronch99 @tshu-w) und denen, die uns per E-Mail mit ihren wertvollen Vorschlägen kontaktiert haben.
Bei Fragen kontaktieren Sie uns bitte [email protected].
TA-SQL
als ICL Reasoning Baseline. Bitte zitieren Sie das Repo, wenn Sie der Meinung sind, dass unsere Arbeit für Sie hilfreich ist.
@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}
}