簡體中文|不和諧|微信|擁抱臉|社區|紙
文字2SQL |文本2NLU
Text2SQL 評估執行準確度(ex)指標,我們將其移至src/dbgpt_hub_sql
模型 | 方法 | 簡單的 | 中等的 | 難的 | 額外的 | 全部 |
---|---|---|---|---|---|---|
根據 | 0 | 0 | 0 | 0 | 0 | |
Llama2-7B-聊天 | 洛拉 | 0.887 | 0.641 | 0.489 | 0.331 | 0.626 |
格洛拉 | 0.847 | 0.623 | 0.466 | 0.361 | 0.608 | |
根據 | 0 | 0 | 0 | 0 | 0 | |
Llama2-13B-聊天 | 洛拉 | 0.907 | 0.729 | 0.552 | 0.343 | 0.68 |
格洛拉 | 0.911 | 0.7 | 0.552 | 0.319 | 0.664 | |
根據 | 0.214 | 0.177 | 0.092 | 0.036 | 0.149 | |
CodeLlama-7B-指令 | 洛拉 | 0.923 | 0.756 | 0.586 | 0.349 | 0.702 |
格洛拉 | 0.911 | 0.751 | 0.598 | 0.331 | 0.696 | |
根據 | 0.698 | 0.601 | 0.408 | 0.271 | 0.539 | |
CodeLlama-13B-指令 | 洛拉 | 0.94 | 0.789 | 0.684 | 0.404 | 0.746 |
格洛拉 | 0.94 | 0.774 | 0.626 | 0.392 | 0.727 | |
根據 | 0.577 | 0.352 | 0.201 | 0.066 | 0.335 | |
百川2-7B-聊天 | 洛拉 | 0.871 | 0.63 | 0.448 | 0.295 | 0.603 |
格洛拉 | 0.891 | 0.637 | 0.489 | 0.331 | 0.624 | |
根據 | 0.581 | 0.413 | 0.264 | 0.187 | 0.392 | |
百川2-13B-聊天 | 洛拉 | 0.903 | 0.702 | 0.569 | 0.392 | 0.678 |
格洛拉 | 0.895 | 0.675 | 0.58 | 0.343 | 0.659 | |
根據 | 0.395 | 0.256 | 0.138 | 0.042 | 0.235 | |
Qwen-7B-聊天 | 洛拉 | 0.855 | 0.688 | 0.575 | 0.331 | 0.652 |
格洛拉 | 0.911 | 0.675 | 0.575 | 0.343 | 0.662 | |
根據 | 0.871 | 0.632 | 0.368 | 0.181 | 0.573 | |
Qwen-14B-聊天 | 洛拉 | 0.895 | 0.702 | 0.552 | 0.331 | 0.663 |
格洛拉 | 0.919 | 0.744 | 0.598 | 0.367 | 0.701 | |
根據 | 0 | 0 | 0 | 0 | 0 | |
聊天GLM3-6b | 洛拉 | 0.855 | 0.605 | 0.477 | 0.271 | 0.59 |
格洛拉 | 0.843 | 0.603 | 0.506 | 0.211 | 0.581 |
DB-GPT-Hub 是一個實驗項目,利用大型語言模型 (LLM) 來實現文字到 SQL 的解析。此專案涵蓋資料收集、資料預處理、模型選擇和建構以及模型權重微調等各個階段。透過這些流程,我們的目標是增強 Text-to-SQL 能力,同時降低模型訓練成本,從而使更多開發人員能夠為提高 Text-to-SQL 準確性做出貢獻。我們的最終目標是實現基於資料庫的自動化問答能力,讓使用者使用自然語言描述執行複雜的資料庫查詢。
迄今為止,我們已經成功整合了多個大型模型,並建立了包括資料處理、監督微調(SFT)模型訓練、預測輸出和評估在內的全面工作流程。為此專案開發的程式碼可以在專案本身中輕鬆重複使用。
截至2023年10月10日,我們已經利用該專案對開源13B大小的模型進行了微調,納入了更多相關數據。在零樣本提示下,利用基於Spider的測試套件,我們對1.27G大小的資料庫實現了0.764的執行準確率。另外,Spider官網給出的95M大小的資料庫的執行精度為0.825。
我們透過在大型語言模型上應用監督微調(SFT)來增強文字到 SQL 的效能。
此專案範例的主要資料集是Spider資料集:
其他可用的 text2sql 資料集:
WikiSQL:一個大型語意解析資料集,由 80,654 個自然語句表達式和 24,241 個表的 SQL 註解組成。 WikiSQL 中的每個查詢僅限於同一個表,不包含排序、分組等複雜操作 WikiSQL 中的查詢僅限於同一個表,不包含排序、分組、子查詢等複雜操作。
CHASE:一個跨域多輪互動式 text2sql 中文資料集,包含 5,459 個多輪問題的列表,其中包含 280 個不同網域資料庫的 17,940 個
BIRD-SQL:大規模跨域文字到 SQL 的英文基準測試,特別關注大型資料庫內容。此資料集包含 12,751 個文字到 SQL 資料對和 95 個資料庫,總大小為 33.4 GB,涵蓋 37 個職業領域。 BIRD-SQL 資料集透過探索三個額外的挑戰,即處理大型且混亂的資料庫值、外部知識推理和最佳化 SQL 執行效率,彌合了文本到 SQL 研究和實際應用之間的差距。
CoSQL:用於建立跨域會話文字到 SQL 系統的語料庫。它是 Spider 和 SParC 任務的對話版本。 CoSQL 包含超過 30k 輪和 10k 多個註解的 SQL 查詢,這些查詢來自 Wizard-of-Oz 的 3k 對話集合,查詢跨 138 個網域的 200 個複雜資料庫。每個對話都模擬一個真實的資料庫查詢場景,其中工作人員以使用者身分探索資料庫,而 SQL 專家使用 SQL 來檢索答案、澄清不明確的問題或以其他方式提供資訊。
依照NSQL的處理模板,對資料集進行基礎處理,得到約20W的資料集
DB-GPT-Hub目前支援以下基礎型號:
該模型使用冗餘架構量化學習 (QLoRA) 基於 4 的量化位元進行微調。其最低硬體需求可參考如下:
型號參數 | 圖形處理器記憶體 | 中央處理器記憶體 | 磁碟 |
---|---|---|---|
7b | 6GB | 3.6GB | 36.4GB |
13b | 13.4GB | 5.9GB | 60.2GB |
所有相關參數均設定為最小值,批次大小為1,最大長度為512。
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 .
首先,使用以下指令安裝dbgpt-hub
pip install dbgpt-hub
然後,設定參數並運行整個過程。
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採用資訊匹配產生方式進行資料準備,即結合表資訊的SQL+Repository產生方式。此方法結合資料表訊息,可以更好地理解資料表的結構和關係,適合產生符合要求的SQL語句。
從 Spider 資料集連結下載 Spider 資料集。預設情況下,下載並解壓縮資料後,將其放置在 dbgpt_hub_sql/data 目錄下,即路徑應為dbgpt_hub_sql/data/spider
。
對於資料預處理部分,只需執行以下腳本:
# # generate train and dev(eval) data
sh dbgpt_hub_sql/scripts/gen_train_eval_data.sh
在目錄dbgpt_hub_sql/data/
中,您將找到新產生的訓練檔案 example_text2sql_train.json 和測試檔案 example_text2sql_dev.json,分別包含 8659 和 1034 個條目。後續微調使用的數據,將參數file_name
值設為dbgpt_hub_sql/data/dataset_info.json中訓練集的檔案名,例如example_text2sql_train.json
產生的 JSON 中的資料如下所示:
{
"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": []
},
專案的資料處理程式碼已嵌入chase
、 cosql
、 sparc
的資料處理程式碼。依照上面的連結下載完資料集後,只需要在 dbgpt_hub_sql/configs/config.py in
加入Just loosen the corresponding code comment in SQL_DATA_INFO
。
模型微調支援LoRA和QLoRA方法。我們可以運行以下命令來微調模型。預設情況下,透過參數--quantization_bit,它使用QLoRA微調方法。要切換到 LoRA,只需從腳本中刪除相關參數即可。運行命令:
sh dbgpt_hub_sql/scripts/train_sft.sh
微調後,模型權重將預設保存在適配器資料夾中,具體為 dbgpt_hub_sql/output/adapter 目錄。
如果您使用多 GPU 訓練並希望使用 deepseed ,則應修改 train_sft.sh 中的預設內容。變化是:
CUDA_VISIBLE_DEVICES=0 python dbgpt_hub_sql/train/sft_train.py
--quantization_bit 4
...
改為:
deepspeed --num_gpus 2 dbgpt_hub_sql/train/sft_train.py
--deepspeed dbgpt_hub_sql/configs/ds_config.json
--quantization_bit 4
...
如果您需要訂單卡 ID
deepspeed --include localhost:0,1 dbgpt_hub_sql/train/sft_train.py
--deepspeed dbgpt_hub_sql/configs/ds_config.json
--quantization_bit 4
...
其他省略的部分(…)可以保持一致。如果要更改預設的 Deepseed 配置,請進入dbgpt_hub_sql/configs
目錄並根據需要更改 ds_config.json,預設為 stage2。
腳本中,微調時,不同模型對應關鍵參數lora_target和template,如下表所示:
型號名稱 | 洛拉目標 | 範本 |
---|---|---|
拉瑪-2 | q_proj,v_proj | 駱駝2 |
代碼駱馬-2 | q_proj,v_proj | 駱駝2 |
百川2 | W_pack | 百川2 |
奎文 | c_attn | 聊天室 |
sqlcoder-7b | q_proj,v_proj | 米斯塔拉爾 |
sqlcoder2-15b | c_attn | 預設 |
實習生LM | q_proj,v_proj | 實習生 |
XVERSE | q_proj,v_proj | 宇宙 |
聊天GLM2 | 查詢鍵值 | 聊天glm2 |
駱駝 | q_proj,v_proj | - |
盛開 | 查詢鍵值 | - |
布魯姆茲 | 查詢鍵值 | - |
百川 | W_pack | 百川 |
鷸 | 查詢鍵值 | - |
在train_sft.sh
中,其他關鍵參數如下:
quantization_bit:表示是否進行量化,有效值為[4或8]。
model_name_or_path:LLM(大型語言模型)的路徑。
dataset:指定訓練資料集配置的名稱,對應dbgpt_hub_sql/data/dataset_info.json中的外鍵值,例如example_text2sql。
max_source_length:輸入模型的文字長度。如果計算資源允許的話,可以設定得盡可能大,例如1024或2048。
max_target_length:模型輸出的SQL內容的長度; 512一般就夠了。
output_dir:SFT(監督微調)期間 Peft 模組的輸出路徑,預設為dbgpt_hub_sql/output/adapter/
。
per_device_train_batch_size:批次的大小。如果計算資源允許,可以設定得大一些;預設值為 1。
gradient_accumulation_steps:更新前累積梯度的步數。
save_steps:保存模型檢查點的步數;預設情況下可以設定為100。
num_train_epochs:訓練資料集的紀元數。
在專案目錄./dbgpt_hub_sql/output/pred/下,該資料夾是模型預測的預設輸出位置(如果不存在,則僅mkdir)。
sh ./dbgpt_hub_sql/scripts/predict_sft.sh
在腳本中,預設使用參數--quantization_bit
,它使用 QLoRA 進行預測。刪除它會切換到 LoRA 預測方法。參數predicted_input_filename
的值是您的預測測試資料集檔案。 --predicted_out_filename
是模型預測結果的檔案名稱。
第二個對應的模型權重可以從 Huggingface hg-eosphoros-ai 中找到,我們在 10 月上傳了 LoRA 權重,在 Spider 評估集上的執行精度達到了 0.789。
如果需要合併訓練好的基礎模型和微調後的Peft模組的權重來導出完整的模型,請執行以下模型導出腳本:
sh ./dbgpt_hub_sql/scripts/export_merge.sh
請務必將腳本中的參數路徑值替換為與您的專案對應的路徑。
要評估資料集上的模型效能,預設為蜘蛛開發資料集。運行以下命令:
python dbgpt_hub_sql/eval/evaluation.py --plug_value --input Your_model_pred_file
您可以在這裡找到我們最新的審查結果和部分實驗結果
附註:預設程式碼指向的資料庫是從【Spider官網】(https://yale-lily.github.io/spider)下載的95M資料庫。如果您需要在測試套件中使用Spider資料庫(大小1.27G),請先將連結中的資料庫下載到自訂目錄,然後執行上面的評估指令,其中新增參數和值,例如--db Your_download_db_path
。
整個過程我們將分為三個階段:
第一階段:
目前,我們提供以下功能的支援:
第二階段:
20231010
之前支援透過多種方式微調更多不同模型prompts
第三階段:
如果我們的工作為您提供了哪怕一點點幫助,請考慮給我們一顆星。您的回饋和支援將成為我們繼續發布更多相關工作和改進工作的動力。謝謝你!
我們熱烈邀請更多的人加入我們,並積極參與我們專案的各個方面,例如資料集、模型微調、效能評估、論文推薦和程式碼複製。請隨時提出問題或拉取請求 (PR),我們將積極回應您的貢獻。
在提交程式碼之前,請使用以下命令確保其格式符合黑色樣式:
black dbgpt_hub
如果您有更多時間對程式碼執行更詳細的類型檢查和樣式檢查,請使用以下命令:
pyright dbgpt_hub
pylint dbgpt_hub
如果您有任何疑問或需要進一步協助,請隨時與我們聯繫。我們感謝您的參與!
我們的工作主要建立在眾多開源貢獻的基礎上。感謝以下開源項目
感謝所有貢獻者,特別是@JBoRu,他提出了這個問題,提醒我們添加一種新的有前途的評估方式,即測試套件。如同論文《SQL-PALM: IMPROVED LARGE LANGUAGE MODEL ADAPTATION FOR TEXT-TO-SQL》中提到的,「我們考慮兩個常用的評估指標:執行精度(EX)和測試套件精度(TS)。EX衡量是否SQL 執行結果與真實值(GT) 匹配,而TS 衡量SQL 是否通過了資料庫增強產生的多個測試的所有EX 評估,因此我們認為TS 是更可靠的評估指標。
如果您發現DB-GPT-Hub
對您的研究或開發有用,請引用以下論文:
@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.' }
}
麻省理工學院許可證 (MIT)
我們作為一個社區進行合作,如果您對我們的社區工作有任何想法,請隨時與我們聯繫。如果您有興趣深入實驗並優化DB-GPT-Hub子項目,可以聯絡微信群組中的「旺仔」。我們竭誠歡迎您的貢獻,讓我們一起變得更好!