?Kertas?Papan Peringkat
Di sini, kami menyediakan kumpulan data pengembangan versi Lite: Mini-Dev . Kumpulan data mini-dev ini dirancang untuk memfasilitasi siklus pengembangan yang efisien dan hemat biaya, terutama untuk menguji dan menyempurnakan model pembuatan kueri SQL. Kumpulan data ini dihasilkan dari umpan balik komunitas, yang mengarah pada kompilasi 500 pasangan text2sql berkualitas tinggi yang berasal dari 11 database berbeda dalam lingkungan pengembangan. Untuk lebih meningkatkan kepraktisan sistem BIRD dalam pengaturan industri dan mendukung pengembangan model text-to-SQL, kami menyediakan kumpulan data Mini-Dev di MySQL dan PostgreSQL .
Selain itu, kami memperkenalkan dua metrik evaluasi baru untuk kumpulan data Mini-Dev: Skor Efisiensi Valid Berbasis Hadiah (R-VES) dan Skor F1 Lunak . Metrik ini bertujuan untuk mengevaluasi efisiensi dan keakuratan model text-to-SQL. Penting untuk diperhatikan bahwa kedua metrik tersebut, yang saat ini dalam versi beta, berlaku secara eksklusif untuk kumpulan data Mini-Dev menggunakan model dasar.
Kami menyambut baik kontribusi dan saran untuk menyempurnakan metrik ini, khususnya terkait integrasinya ke dalam papan peringkat yang ada. Jangan ragu untuk menghubungi kami jika Anda tertarik dengan perkembangan ini atau memiliki usulan perbaikan.
Berikut adalah beberapa statistik utama dari kumpulan data mini-dev:
Kumpulan data berisi sumber daya utama berikut:
database
: Basis data harus disimpan di bawah ./mini_dev_data/dev_databases/
. Di setiap folder database, ia memiliki dua komponen:database_description
: file csv dibuat untuk mendeskripsikan skema database dan nilainya untuk dijelajahi atau direferensikan oleh model.sqlite
: Isi database di BIRD. Catatan
Anda harus mengunduh database dev terbaru untuk membuat database di MySQL dan PostgreSQL. Jika Anda hanya menggunakan versi SQLite, Anda dapat menggunakan database dev asli.
data
: Setiap pasangan text-to-SQL dengan bukti pengetahuan Oracle disimpan sebagai file json, yaitu mini_dev_sqlite.json
disimpan di ./mini_dev_data/mini_dev_sqlite.json
. Di setiap file json, memiliki tiga bagian utama:db_id
: nama databasequestion
: pertanyaan yang dikurasi oleh crowdsourcing manusia sesuai dengan deskripsi database, konten database.evidence
: bukti pengetahuan eksternal yang dianotasi oleh para ahli untuk bantuan model atau anotator SQL.SQL
: SQL yang dianotasi oleh crowdsource mengacu pada deskripsi database, konten database, untuk menjawab pertanyaan secara akurat.ground-truth SQL file
: File SQL harus disimpan di ./llm/mini_dev_data/mini_dev_sqlite_gold.sql
.llm
: Berisi kode sumber untuk mengonversi teks ke SQL dengan memanggil API dari LLM, seperti GPT35-turbo-instruct
, gpt-35-turbo
, gpt-4
, gpt-4-32k
, dan gpt-4-turbo
. Anda dapat menemukan kueri SQL dalam file mini_dev_mysql.json
dan mini_dev_postgresql.json
. Kueri ini telah ditranspilasi dari versi SQLite asli menggunakan paket sqlglot, kemudian disempurnakan secara manual dan dengan GPT-4 Turbo. Setelah mengunduh kumpulan data Mini-Dev, setiap folder database akan berisi file .sql dan command.script. Ikuti petunjuk di bawah ini untuk menyiapkan database di MySQL dan 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
di folder MINIDEV_mysql
): mysql -u root -p BIRD < BIRD_dev.sql
Contoh cara menjalankan query mysql dengan Python (dengan pymysql) dapat ditemukan di file examples/mysql_example.ipynb
.
Jika Anda mengalami kesalahan: "ini tidak kompatibel dengan sql_mode=only_full_group_by", Anda dapat menjalankan perintah berikut untuk menonaktifkan 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
di folder MINIDEV_postgresql
): psql -U USERNAME -d BIRD -f BIRD_dev.sql
examples/postgresql_example.ipynb
. Pertama, Anda perlu menginstal openai di lingkungan python Anda dengan:
conda create -n BIRD python=3.11.5
pip install requirements.txt
Gunakan skrip ini untuk menjalankan model OpenAI di cloud Azure. (Anda mungkin perlu menyesuaikan parameter dan jalur dengan preferensi Anda):
cd ./llm/
sh ./run/run_gpt.sh
Silakan pasca-proses hasil yang Anda kumpulkan sebagai format: SQL dan db_id
-nya, yang dibagi dengan 't----- bird -----t'
. Contohnya ditunjukkan di ./llm/exp_result/turbo_output/predict_mini_dev_gpt-4-turbo_cot_SQLite.json
. Letakkan file sql kebenaran dasar di ./data/
. Dan Anda mungkin perlu mendesain tag ChatGPT Anda sendiri. File utama untuk evaluasi ex terletak di ./llm/src/evaluation_ex.py
.
Kemudian Anda bisa mengevaluasi hasilnya dengan baris perintah berikut:
cd ./llm/
sh ./run/run_evaluation.sh
File utama untuk evaluasi R-VES terletak di ./llm/src/evaluation_ves.py
. R-VES dan EX dapat dievaluasi dalam shell yang sama, sehingga Anda dapat mengevaluasi efisiensi melalui:
cd ./llm/
sh ./run/run_evaluation.sh
(Untuk R-VES stabil, Anda mungkin perlu memperbesar timeout
atau pengulangan dan hasil rata-rata. Dalam evaluasi pengujian kami, kami akan memperbesar timeout
menjadi 3 s/ex; kemudian kami ulangi 5 kali untuk perhitungan VES, hanya hasil tertinggi yang akan dilaporkan .)
Pada versi terbaru, kami menyesuaikan evaluasi VES agar lebih stabil dan dapat diandalkan. Daripada hanya mengukur rasio waktu antara SQL prediksi dan kebenaran dasar, kami sekarang menetapkan poin reward berdasarkan rasio waktu. R-VES dihitung sebagai berikut:
File utama untuk evaluasi Soft F1-Score terletak di ./llm/src/evaluation_f1.py
. Soft-F1, VES, dan EX dapat dievaluasi dalam shell yang sama, sehingga Anda dapat mengevaluasi efisiensi melalui:
cd ./llm/
sh ./run/run_evaluation.sh
Bersamaan dengan pembaruan pada set Mini-Dev, kami memperkenalkan metrik evaluasi baru—skor F1 lunak. Metrik ini dirancang khusus untuk menilai performa model text-to-SQL dengan mengukur kemiripan antara tabel yang dihasilkan oleh kueri SQL yang diprediksi dan tabel yang berasal dari kebenaran dasar. Singkatnya, skor F1 lunak adalah metrik yang lebih lunak yang mengurangi dampak urutan kolom dan nilai yang hilang dalam tabel yang dihasilkan oleh kueri SQL yang diprediksi.
Berikut ini menunjukkan bagaimana kami menghitung skor lunak F1.
Tabel kebenaran dasar SQL yang dihasilkan:
Baris | ||
---|---|---|
1 | 'Apel' | 325 |
2 | 'Oranye' | |
3 | 'Pisang' | 119 |
Tabel prediksi hasil SQL:
Baris | ||
---|---|---|
1 | 325 | 'Apel' |
2 | 191 | 'Oranye' |
3 | 'Pisang' |
Skor lunak F1 dihitung sebagai berikut:
Cocok | Pred_only | Hanya Emas | |
---|---|---|---|
Baris 1 | 2 | 0 | 0 |
Baris 2 | 1 | 1 | 0 |
Baris 3 | 1 | 0 | 1 |
SQLite | MySQL | PostgreSQL | |
---|---|---|---|
campuran-8x7b | 21.60 | 13.60 | 12.40 |
llama3-8b-instruksikan | 24.40 | 24.60 | 18.40 |
phi-3-medium-128k-instruksikan | 30.60 | 25.00 | 21.60 |
gpt-35-turbo-instruksikan | 33.60 | 31.20 | 26.60 |
gpt-35-turbo | 38.00 | 36.00 | 27.40 |
llama3-70b-instruksikan | 40.80 | 37.00 | 29.40 |
TA+gpt-35-turbo | 41.60 | - | - |
TA + llama3-70b-instruksikan | 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 | |
---|---|---|---|
campuran-8x7b | 20.41 | 12.99 | 14.16 |
llama3-8b-instruksikan | 23.27 | 23.66 | 17.90 |
phi-3-medium-128k-instruksikan | 29.54 | 24.12 | 21.07 |
gpt-35-turbo-instruksikan | 32.28 | 30.39 | 26.14 |
gpt-35-turbo | 37.33 | 34.94 | 26.80 |
llama3-70b-instruksikan | 39.02 | 35.82 | 28.80 |
TA+gpt-35-turbo | 40.59 | - | - |
TA + llama3-70b-instruksikan | 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 | |
---|---|---|---|
campuran-8x7b | 22.95 | 13.79 | 14.70 |
llama3-8b-instruksikan | 27.87 | 27.49 | 19.35 |
phi-3-medium-128k-instruksikan | 35.33 | 28.73 | 24.11 |
gpt-35-turbo-instruksikan | 36.34 | 33.85 | 28.30 |
gpt-35-turbo | 41.84 | 40,75 | 30.22 |
TA+gpt-35-turbo | 44.25 | - | - |
llama3-70b-instruksikan | 44.38 | 40,95 | 31.43 |
TA + llama3-70b-instruksikan | 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 | - | - |
Kami menghapus prediksi SQL model dasar di bawah ./llm/exp_result/sql_output_kg/
untuk referensi.
Kontributor utama proyek Mini-Dev: Xiaolong Li, Jinyang Li, Ge Qu, Binyuan Hui, Reynold Cheng, Chenhao Ma.
Kami mengucapkan terima kasih yang tulus atas masukan berharga dari komunitas terbuka, termasuk pengulas github (@freiz @nnarodytska @josem7 @wbbeyourself @ronch99 @tshu-w ) dan mereka yang menghubungi kami melalui email untuk menyampaikan saran berharga mereka.
Untuk pertanyaan apa pun, silakan hubungi kami melalui [email protected].
TA-SQL
sebagai Dasar Penalaran ICL. Silakan kutip repo jika menurut Anda pekerjaan kami bermanfaat bagi Anda.
@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}
}