简体中文| Perselisihan | WeChat | Wajah Memeluk | Komunitas | Kertas
Teks2SQL | Teks2NLU
Text2SQL mengevaluasi metrik akurasi eksekusi (ex), dan kami akan memindahkannya ke src/dbgpt_hub_sql
Model | Metode | Mudah | Sedang | Keras | Tambahan | Semua |
---|---|---|---|---|---|---|
basis | 0 | 0 | 0 | 0 | 0 | |
Llama2-7B-Obrolan | lora | 0,887 | 0,641 | 0,489 | 0,331 | 0,626 |
qlora | 0,847 | 0,623 | 0,466 | 0,361 | 0,608 | |
basis | 0 | 0 | 0 | 0 | 0 | |
Llama2-13B-Obrolan | lora | 0,907 | 0,729 | 0,552 | 0,343 | 0,68 |
qlora | 0,911 | 0,7 | 0,552 | 0,319 | 0,664 | |
basis | 0,214 | 0,177 | 0,092 | 0,036 | 0,149 | |
CodeLlama-7B-Instruksikan | lora | 0,923 | 0,756 | 0,586 | 0,349 | 0,702 |
qlora | 0,911 | 0,751 | 0,598 | 0,331 | 0,696 | |
basis | 0,698 | 0,601 | 0,408 | 0,271 | 0,539 | |
CodeLlama-13B-Instruksikan | lora | 0,94 | 0,789 | 0,684 | 0,404 | 0,746 |
qlora | 0,94 | 0,774 | 0,626 | 0,392 | 0,727 | |
basis | 0,577 | 0,352 | 0,201 | 0,066 | 0,335 | |
Baichuan2-7B-Obrolan | lora | 0,871 | 0,63 | 0,448 | 0,295 | 0,603 |
qlora | 0,891 | 0,637 | 0,489 | 0,331 | 0,624 | |
basis | 0,581 | 0,413 | 0,264 | 0,187 | 0,392 | |
Baichuan2-13B-Obrolan | lora | 0,903 | 0,702 | 0,569 | 0,392 | 0,678 |
qlora | 0,895 | 0,675 | 0,58 | 0,343 | 0,659 | |
basis | 0,395 | 0,256 | 0,138 | 0,042 | 0,235 | |
Qwen-7B-Obrolan | lora | 0,855 | 0,688 | 0,575 | 0,331 | 0,652 |
qlora | 0,911 | 0,675 | 0,575 | 0,343 | 0,662 | |
basis | 0,871 | 0,632 | 0,368 | 0,181 | 0,573 | |
Qwen-14B-Obrolan | lora | 0,895 | 0,702 | 0,552 | 0,331 | 0,663 |
qlora | 0,919 | 0,744 | 0,598 | 0,367 | 0,701 | |
basis | 0 | 0 | 0 | 0 | 0 | |
ObrolanGLM3-6b | lora | 0,855 | 0,605 | 0,477 | 0,271 | 0,59 |
qlora | 0,843 | 0,603 | 0,506 | 0,211 | 0,581 |
DB-GPT-Hub adalah proyek eksperimental yang memanfaatkan Model Bahasa Besar (LLM) untuk mencapai penguraian Text-to-SQL. Proyek ini mencakup berbagai tahapan, termasuk pengumpulan data, pemrosesan awal data, pemilihan dan konstruksi model, serta penyesuaian bobot model. Melalui proses ini, tujuan kami adalah untuk meningkatkan kemampuan Text-to-SQL sekaligus mengurangi biaya pelatihan model, sehingga memungkinkan lebih banyak pengembang berkontribusi untuk meningkatkan akurasi Text-to-SQL. Tujuan utama kami adalah mewujudkan kemampuan menjawab pertanyaan otomatis berdasarkan database, memungkinkan pengguna mengeksekusi kueri database yang kompleks menggunakan deskripsi bahasa alami.
Hingga saat ini, kami telah berhasil mengintegrasikan beberapa model besar dan menetapkan alur kerja komprehensif yang mencakup pemrosesan data, pelatihan model Supervised Fine-Tuning (SFT), keluaran prediksi, dan evaluasi. Kode yang dikembangkan untuk proyek ini mudah digunakan kembali dalam proyek itu sendiri.
Mulai 10 Oktober 2023, kami telah menggunakan proyek ini untuk menyempurnakan model sumber terbuka berukuran 13B, dengan menggabungkan data yang lebih relevan. Berdasarkan perintah zero-shot dan memanfaatkan rangkaian pengujian berbasis Spider, kami telah mencapai tingkat akurasi eksekusi sebesar 0,764 untuk database dengan ukuran 1,27G. Selain itu, akurasi eksekusi untuk database yang ditunjukkan oleh situs resmi Spider, dengan ukuran 95M, berada pada 0,825.
Kami meningkatkan kinerja Text-to-SQL dengan menerapkan Supervised Fine-Tuning (SFT) pada model bahasa besar.
Kumpulan data utama untuk contoh proyek ini adalah kumpulan data Spider :
Kumpulan data text2sql lain yang tersedia:
WikiSQL: Kumpulan data penguraian semantik besar yang terdiri dari 80.654 ekspresi pernyataan alami dan anotasi sql dari 24.241 tabel. Setiap kueri di WikiSQL dibatasi pada tabel yang sama dan tidak berisi operasi rumit seperti pengurutan, pengelompokan. Kueri di WikiSQL terbatas pada tabel yang sama dan tidak menyertakan operasi rumit seperti pengurutan, pengelompokan, subkueri, dll.
CHASE: Kumpulan data text2sql interaktif multi-putaran lintas domain berbahasa Mandarin yang berisi daftar 5.459 pertanyaan multi-putaran yang terdiri dari 17.940 grup biner
BIRD-SQL: Tolok ukur text-to-SQL lintas domain berskala besar dalam bahasa Inggris, dengan fokus khusus pada konten database besar. Kumpulan data tersebut berisi 12.751 pasangan data text-to-SQL dan 95 database dengan ukuran total 33,4 GB di 37 domain pekerjaan. Kumpulan data BIRD-SQL menjembatani kesenjangan antara penelitian text-to-SQL dan aplikasi dunia nyata dengan mengeksplorasi tiga tantangan tambahan, yaitu menangani nilai database yang besar dan berantakan, inferensi pengetahuan eksternal, dan mengoptimalkan efisiensi eksekusi SQL.
CoSQL: Korpus untuk membangun sistem teks-ke-SQL percakapan lintas domain. Ini adalah versi percakapan dari tugas Spider dan SparC. CoSQL terdiri dari 30k+ putaran dan 10k+ kueri SQL beranotasi dari kumpulan 3k percakapan Wizard-of-Oz yang menanyakan 200 database kompleks di 138 domain. Setiap percakapan menyimulasikan skenario kueri DB yang realistis di mana anggota staf menjelajahi database sebagai pengguna dan pakar SQL menggunakan SQL untuk mengambil jawaban, memperjelas pertanyaan ambigu, atau menginformasikan.
Mengikuti templat pemrosesan NSQL, kumpulan data menjalani pemrosesan dasar, menghasilkan kumpulan data sekitar 20W
DB-GPT-Hub saat ini mendukung model dasar berikut:
Model ini disempurnakan berdasarkan bit kuantisasi 4 menggunakan Quantized Learning over Redundant Architecture (QLoRA). Persyaratan perangkat keras minimum untuk ini dapat disebut sebagai berikut:
Parameter Model | RAM GPU | RAM CPU | DISK |
---|---|---|---|
7b | 6GB | 3.6GB | 36,4GB |
13b | 13,4GB | 5,9GB | 60,2GB |
Semua parameter terkait disetel ke minimum, dengan ukuran batch 1 dan panjang maksimal 512. Berdasarkan pengalaman, untuk performa lebih baik, disarankan untuk menyetel nilai panjang terkait ke 1024 atau 2048.
git clone https://github.com/eosphoros-ai/DB-GPT-Hub.git
cd DB-GPT-Hub
conda create -n dbgpt_hub python=3.10
conda activate dbgpt_hub
cd src/dbgpt_hub_sql
pip install -e .
Pertama, instal dbgpt-hub
dengan perintah berikut
pip install dbgpt-hub
Kemudian, siapkan argumen dan jalankan seluruh proses.
from dbgpt_hub_sql . data_process import preprocess_sft_data
from dbgpt_hub_sql . train import start_sft
from dbgpt_hub_sql . predict import start_predict
from dbgpt_hub_sql . eval import start_evaluate
# Config the input datasets
data_folder = "dbgpt_hub_sql/data"
data_info = [
{
"data_source" : "spider" ,
"train_file" : [ "train_spider.json" , "train_others.json" ],
"dev_file" : [ "dev.json" ],
"tables_file" : "tables.json" ,
"db_id_name" : "db_id" ,
"is_multiple_turn" : False ,
"train_output" : "spider_train.json" ,
"dev_output" : "spider_dev.json" ,
}
]
# Config training parameters
train_args = {
"model_name_or_path" : "codellama/CodeLlama-13b-Instruct-hf" ,
"do_train" : True ,
"dataset" : "example_text2sql_train" ,
"max_source_length" : 2048 ,
"max_target_length" : 512 ,
"finetuning_type" : "lora" ,
"lora_target" : "q_proj,v_proj" ,
"template" : "llama2" ,
"lora_rank" : 64 ,
"lora_alpha" : 32 ,
"output_dir" : "dbgpt_hub_sql/output/adapter/CodeLlama-13b-sql-lora" ,
"overwrite_cache" : True ,
"overwrite_output_dir" : True ,
"per_device_train_batch_size" : 1 ,
"gradient_accumulation_steps" : 16 ,
"lr_scheduler_type" : "cosine_with_restarts" ,
"logging_steps" : 50 ,
"save_steps" : 2000 ,
"learning_rate" : 2e-4 ,
"num_train_epochs" : 8 ,
"plot_loss" : True ,
"bf16" : True ,
}
# Config predict parameters
predict_args = {
"model_name_or_path" : "codellama/CodeLlama-13b-Instruct-hf" ,
"template" : "llama2" ,
"finetuning_type" : "lora" ,
"checkpoint_dir" : "dbgpt_hub_sql/output/adapter/CodeLlama-13b-sql-lora" ,
"predict_file_path" : "dbgpt_hub_sql/data/eval_data/dev_sql.json" ,
"predict_out_dir" : "dbgpt_hub_sql/output/" ,
"predicted_out_filename" : "pred_sql.sql" ,
}
# Config evaluation parameters
evaluate_args = {
"input" : "./dbgpt_hub_sql/output/pred/pred_sql_dev_skeleton.sql" ,
"gold" : "./dbgpt_hub_sql/data/eval_data/gold.txt" ,
"gold_natsql" : "./dbgpt_hub_sql/data/eval_data/gold_natsql2sql.txt" ,
"db" : "./dbgpt_hub_sql/data/spider/database" ,
"table" : "./dbgpt_hub_sql/data/eval_data/tables.json" ,
"table_natsql" : "./dbgpt_hub_sql/data/eval_data/tables_for_natsql2sql.json" ,
"etype" : "exec" ,
"plug_value" : True ,
"keep_distict" : False ,
"progress_bar_for_each_datapoint" : False ,
"natsql" : False ,
}
# Run the whole fine-tuning workflow
preprocess_sft_data (
data_folder = data_folder ,
data_info = data_info
)
start_sft ( train_args )
start_predict ( predict_args )
start_evaluate ( evaluate_args )
DB-GPT-Hub menggunakan metode pembuatan pencocokan informasi untuk persiapan data, yaitu metode pembuatan SQL + Repositori yang menggabungkan informasi tabel. Metode ini menggabungkan informasi tabel data untuk lebih memahami struktur dan hubungan tabel data, dan cocok untuk menghasilkan pernyataan SQL yang memenuhi persyaratan.
Unduh kumpulan data Spider dari tautan kumpulan data Spider. Secara default, setelah mengunduh dan mengekstrak data, letakkan di direktori dbgpt_hub_sql/data, yaitu jalurnya harus dbgpt_hub_sql/data/spider
.
Untuk bagian prapemrosesan data, cukup jalankan skrip berikut :
# # generate train and dev(eval) data
sh dbgpt_hub_sql/scripts/gen_train_eval_data.sh
Di direktori dbgpt_hub_sql/data/
, Anda akan menemukan file pelatihan yang baru dibuat example_text2sql_train.json dan file pengujian example_text2sql_dev.json, masing-masing berisi 8659 dan 1034 entri. Untuk data yang digunakan dalam penyempurnaan berikutnya, tetapkan nilai parameter file_name
ke nama file set pelatihan di dbgpt_hub_sql/data/dataset_info.json, seperti example_text2sql_train.json
Data dalam JSON yang dihasilkan terlihat seperti ini:
{
"db_id": "department_management",
"instruction": "I want you to act as a SQL terminal in front of an example database, you need only to return the sql command to me.Below is an instruction that describes a task, Write a response that appropriately completes the request.n"n##Instruction:ndepartment_management contains tables such as department, head, management. Table department has columns such as Department_ID, Name, Creation, Ranking, Budget_in_Billions, Num_Employees. Department_ID is the primary key.nTable head has columns such as head_ID, name, born_state, age. head_ID is the primary key.nTable management has columns such as department_ID, head_ID, temporary_acting. department_ID is the primary key.nThe head_ID of management is the foreign key of head_ID of head.nThe department_ID of management is the foreign key of Department_ID of department.nn",
"input": "###Input:nHow many heads of the departments are older than 56 ?nn###Response:",
"output": "SELECT count(*) FROM head WHERE age > 56",
"history": []
},
Kode pemrosesan data chase
, cosql
, dan sparc
telah tertanam dalam kode pemrosesan data proyek. Setelah mendownload kumpulan data sesuai link di atas, Anda hanya perlu in
dbgpt_hub_sql/configs/config.py Just loosen the corresponding code comment in SQL_DATA_INFO
.
Penyempurnaan model mendukung metode LoRA dan QLoRA. Kita dapat menjalankan perintah berikut untuk menyempurnakan model. Secara default, dengan parameter --quantization_bit, ia menggunakan metode penyempurnaan QLoRA. Untuk beralih ke LoRA, cukup hapus parameter terkait dari skrip. Jalankan perintah:
sh dbgpt_hub_sql/scripts/train_sft.sh
Setelah penyesuaian, bobot model akan disimpan secara default di folder adaptor, khususnya di direktori dbgpt_hub_sql/output/adapter.
Jika Anda menggunakan pelatihan multi-GPU dan ingin menggunakan deepseed , Anda harus mengubah konten default di train_sft.sh. Perubahannya adalah:
CUDA_VISIBLE_DEVICES=0 python dbgpt_hub_sql/train/sft_train.py
--quantization_bit 4
...
ubah menjadi :
deepspeed --num_gpus 2 dbgpt_hub_sql/train/sft_train.py
--deepspeed dbgpt_hub_sql/configs/ds_config.json
--quantization_bit 4
...
Jika Anda memerlukan id kartu pesanan
deepspeed --include localhost:0,1 dbgpt_hub_sql/train/sft_train.py
--deepspeed dbgpt_hub_sql/configs/ds_config.json
--quantization_bit 4
...
Bagian lain yang dihilangkan (…) dapat tetap konsisten. Jika ingin mengubah konfigurasi default deepseed, masuk ke direktori dbgpt_hub_sql/configs
dan lakukan perubahan pada ds_config.json sesuai kebutuhan, defaultnya adalah stage2.
Dalam skrip, selama penyesuaian, model yang berbeda sesuai dengan parameter utama lora_target dan template, seperti yang ditunjukkan pada tabel berikut:
nama model | lora_target | templat |
---|---|---|
LLaMA-2 | q_proj,v_proj | llama2 |
KodeLlama-2 | q_proj,v_proj | llama2 |
Baichuan2 | W_pack | baichuan2 |
Qwen | c_attn | obrolanml |
sqlcoder-7b | q_proj,v_proj | mistral |
sqlcoder2-15b | c_attn | bawaan |
MagangLM | q_proj,v_proj | magang |
XVERSE | q_proj,v_proj | xverse |
ObrolanGLM2 | nilai_kunci_kueri | obrolanglm2 |
LLaMA | q_proj,v_proj | - |
BUNGA | nilai_kunci_kueri | - |
BLOOMZ | nilai_kunci_kueri | - |
Baichuan | W_pack | baichuan |
Elang | nilai_kunci_kueri | - |
Di train_sft.sh
, parameter penting lainnya adalah sebagai berikut:
quantization_bit: Menunjukkan apakah kuantisasi diterapkan, dengan nilai yang valid adalah [4 atau 8].
model_name_or_path: Jalur LLM (Model Bahasa Besar).
dataset: Menentukan nama konfigurasi dataset pelatihan, sesuai dengan nilai kunci luar di dbgpt_hub_sql/data/dataset_info.json, seperti example_text2sql.
max_source_length: Panjang teks yang dimasukkan ke dalam model. Jika sumber daya komputasi memungkinkan, dapat diatur sebesar mungkin, seperti 1024 atau 2048.
max_target_length: Panjang keluaran konten SQL oleh model; 512 secara umum sudah cukup.
output_dir: Jalur keluaran modul Peft selama SFT (Supervised Fine-Tuning), ditetapkan secara default kedbgpt_hub_sql/output/adapter/
.
per_device_train_batch_size: Ukuran kumpulan. Jika sumber daya komputasi memungkinkan, maka dapat diatur lebih besar; standarnya adalah 1.
gradien_akumulasi_langkah: Jumlah langkah untuk mengumpulkan gradien sebelum pembaruan.
save_steps: Jumlah langkah di mana pos pemeriksaan model disimpan; itu dapat diatur ke 100 secara default.
num_train_epochs: Jumlah periode untuk melatih kumpulan data.
Di bawah direktori proyek ./dbgpt_hub_sql/output/pred/, folder ini adalah lokasi keluaran default untuk prediksi model (jika tidak ada, cukup mkdir).
sh ./dbgpt_hub_sql/scripts/predict_sft.sh
Dalam skrip, secara default dengan parameter --quantization_bit
, ia memprediksi menggunakan QLoRA. Menghapusnya akan beralih ke metode prediksi LoRA. Nilai parameter predicted_input_filename
adalah file kumpulan data pengujian prediksi Anda. --predicted_out_filename
adalah nama file hasil prediksi model.
Anda dapat menemukan bobot model kedua yang sesuai dari Huggingface hg-eosphoros-ai, kami mengunggah bobot LoRA pada bulan Oktober, yang akurasi eksekusi pada set evaluasi Spider mencapai 0,789.
Jika Anda perlu menggabungkan bobot model dasar yang dilatih dan modul Peft yang telah disempurnakan untuk mengekspor model lengkap, jalankan skrip ekspor model berikut:
sh ./dbgpt_hub_sql/scripts/export_merge.sh
Pastikan untuk mengganti nilai jalur parameter dalam skrip dengan jalur yang sesuai dengan proyek Anda.
Untuk mengevaluasi performa model pada kumpulan data, defaultnya adalah kumpulan data spider dev. Jalankan perintah berikut:
python dbgpt_hub_sql/eval/evaluation.py --plug_value --input Your_model_pred_file
Anda dapat menemukan hasil review terbaru kami dan sebagian hasil eksperimen di sini
Catatan : Basis data yang ditunjukkan oleh kode default adalah basis data 95 juta yang diunduh dari [situs web resmi Spider] (https://yale-lily.github.io/spider). Jika Anda perlu menggunakan database Spider (ukuran 1.27G) di test-suite, silakan unduh database di tautan ke direktori khusus terlebih dahulu, dan jalankan perintah evaluasi di atas yang menambahkan parameter dan nilai seperti --db Your_download_db_path
.
Seluruh proses akan kami bagi menjadi tiga fase:
Tahap 1:
Saat ini, kami menawarkan dukungan untuk fitur-fitur berikut:
Tahap 2:
20231010
prompts
Tahap 3:
Jika pekerjaan kami telah memberikan bantuan sekecil apa pun kepada Anda, mohon pertimbangkan untuk memberi kami bintang. Masukan dan dukungan Anda menjadi motivasi bagi kami untuk terus merilis lebih banyak karya terkait dan meningkatkan upaya kami. Terima kasih!
Kami dengan hangat mengundang lebih banyak individu untuk bergabung dengan kami dan secara aktif terlibat dalam berbagai aspek proyek kami, seperti kumpulan data, penyesuaian model, evaluasi kinerja, rekomendasi makalah, dan reproduksi kode. Jangan ragu untuk membuka masalah atau menarik permintaan (PR), dan kami akan proaktif dalam menanggapi kontribusi Anda.
Sebelum mengirimkan kode Anda, pastikan kode tersebut diformat sesuai dengan gaya hitam dengan menggunakan perintah berikut:
black dbgpt_hub
Jika Anda memiliki lebih banyak waktu untuk menjalankan pengecekan tipe dan pengecekan gaya kode Anda secara lebih detail, silakan gunakan perintah berikut:
pyright dbgpt_hub
pylint dbgpt_hub
Jika Anda memiliki pertanyaan atau memerlukan bantuan lebih lanjut, jangan ragu untuk menghubungi kami. Kami menghargai keterlibatan Anda!
Pekerjaan kami terutama didasarkan pada sejumlah kontribusi sumber terbuka. Berkat proyek sumber terbuka berikut
Terima kasih kepada seluruh kontributor terutama @JBoRu yang mengangkat isu ini yang mengingatkan kami untuk menambahkan cara evaluasi baru yang menjanjikan, yaitu Test Suite. Seperti yang disebutkan dalam makalah 《SQL-PALM: PENINGKATAN ADAPTASI MODEL BAHASA BESAR UNTUK TEKS-KE-SQL》, "Kami mempertimbangkan dua metrik evaluasi yang umum digunakan: akurasi eksekusi (EX) dan akurasi rangkaian pengujian (TS). EX mengukur apakah Hasil eksekusi SQL cocok dengan kebenaran dasar (GT), sedangkan TS mengukur apakah SQL lolos semua evaluasi EX untuk beberapa pengujian, yang dihasilkan oleh augmentasi database. Karena EX berisi positif palsu, kami menganggap TS sebagai evaluasi yang lebih andal metrik".
Jika Anda merasa DB-GPT-Hub
berguna untuk penelitian atau pengembangan Anda, harap kutip makalah berikut:
@misc { zhou2024dbgpthub ,
title = { DB-GPT-Hub: Towards Open Benchmarking Text-to-SQL Empowered by Large Language Models } ,
author = { Fan Zhou and Siqiao Xue and Danrui Qi and Wenhui Shi and Wang Zhao and Ganglin Wei and Hongyang Zhang and Caigai Jiang and Gangwei Jiang and Zhixuan Chu and Faqiang Chen } ,
year = { 2024 } ,
eprint = { 2406.11434 } ,
archivePrefix = { arXiv } ,
primaryClass = { id='cs.DB' full_name='Databases' is_active=True alt_name=None in_archive='cs' is_general=False description='Covers database management, datamining, and data processing. Roughly includes material in ACM Subject Classes E.2, E.5, H.0, H.2, and J.1.' }
}
Lisensi MIT (MIT)
Kami berkolaborasi sebagai sebuah komunitas, dan jika Anda mempunyai ide mengenai kerja komunitas kami, jangan ragu untuk menghubungi kami. Jika Anda tertarik untuk mempelajari eksperimen mendalam dan mengoptimalkan subproyek DB-GPT-Hub, Anda dapat menghubungi 'wangzai' dalam grup WeChat. Kami dengan sepenuh hati menyambut kontribusi Anda untuk menjadikannya lebih baik bersama-sama!