简体中文| Discorde | Wechat | Visage câlin | Communauté | Papier
Texte2SQL | Texte2NLU
Mesure de précision d'exécution d'évaluation Text2SQL (ex), et nous la déplacerons vers src/dbgpt_hub_sql
Modèle | Méthode | Facile | Moyen | Dur | Supplémentaire | Tous |
---|---|---|---|---|---|---|
base | 0 | 0 | 0 | 0 | 0 | |
Lama2-7B-Chat | lora | 0,887 | 0,641 | 0,489 | 0,331 | 0,626 |
qlora | 0,847 | 0,623 | 0,466 | 0,361 | 0,608 | |
base | 0 | 0 | 0 | 0 | 0 | |
Lama2-13B-Chat | lora | 0,907 | 0,729 | 0,552 | 0,343 | 0,68 |
qlora | 0,911 | 0,7 | 0,552 | 0,319 | 0,664 | |
base | 0,214 | 0,177 | 0,092 | 0,036 | 0,149 | |
CodeLlama-7B-Instruct | lora | 0,923 | 0,756 | 0,586 | 0,349 | 0,702 |
qlora | 0,911 | 0,751 | 0,598 | 0,331 | 0,696 | |
base | 0,698 | 0,601 | 0,408 | 0,271 | 0,539 | |
CodeLlama-13B-Instruct | lora | 0,94 | 0,789 | 0,684 | 0,404 | 0,746 |
qlora | 0,94 | 0,774 | 0,626 | 0,392 | 0,727 | |
base | 0,577 | 0,352 | 0,201 | 0,066 | 0,335 | |
Baichuan2-7B-Chat | lora | 0,871 | 0,63 | 0,448 | 0,295 | 0,603 |
qlora | 0,891 | 0,637 | 0,489 | 0,331 | 0,624 | |
base | 0,581 | 0,413 | 0,264 | 0,187 | 0,392 | |
Baichuan2-13B-Chat | lora | 0,903 | 0,702 | 0,569 | 0,392 | 0,678 |
qlora | 0,895 | 0,675 | 0,58 | 0,343 | 0,659 | |
base | 0,395 | 0,256 | 0,138 | 0,042 | 0,235 | |
Qwen-7B-Chat | lora | 0,855 | 0,688 | 0,575 | 0,331 | 0,652 |
qlora | 0,911 | 0,675 | 0,575 | 0,343 | 0,662 | |
base | 0,871 | 0,632 | 0,368 | 0,181 | 0,573 | |
Qwen-14B-Chat | lora | 0,895 | 0,702 | 0,552 | 0,331 | 0,663 |
qlora | 0,919 | 0,744 | 0,598 | 0,367 | 0,701 | |
base | 0 | 0 | 0 | 0 | 0 | |
ChatGLM3-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 est un projet expérimental qui exploite les grands modèles linguistiques (LLM) pour réaliser l'analyse Text-to-SQL. Le projet comprend diverses étapes, notamment la collecte de données, le prétraitement des données, la sélection et la construction du modèle, ainsi que l'ajustement des pondérations du modèle. Grâce à ces processus, notre objectif est d'améliorer les capacités Text-to-SQL tout en réduisant les coûts de formation des modèles, permettant ainsi à davantage de développeurs de contribuer à l'amélioration de la précision Text-to-SQL. Notre objectif ultime est de réaliser des capacités de réponse automatisées aux questions basées sur des bases de données, permettant aux utilisateurs d'exécuter des requêtes de bases de données complexes à l'aide de descriptions en langage naturel.
À ce jour, nous avons intégré avec succès plusieurs grands modèles et établi un flux de travail complet qui comprend le traitement des données, la formation de modèles de réglage fin supervisé (SFT), la sortie de prédiction et l'évaluation. Le code développé pour ce projet est facilement réutilisable au sein du projet lui-même.
Depuis le 10 octobre 2023, nous avons utilisé ce projet pour affiner le modèle open source de taille 13B, en intégrant des données plus pertinentes. Sous des invites zéro et en utilisant la suite de tests basée sur Spider, nous avons atteint un taux de précision d'exécution de 0,764 pour une base de données d'une taille de 1,27 Go. De plus, la précision d'exécution de la base de données indiquée par le site officiel de Spider, d'une taille de 95 Mo, s'élève à 0,825.
Nous améliorons les performances Text-to-SQL en appliquant un réglage fin supervisé (SFT) sur de grands modèles de langage.
L'ensemble de données principal pour les exemples de ce projet est l'ensemble de données Spider :
Autres ensembles de données text2sql disponibles :
WikiSQL : un vaste ensemble de données d'analyse sémantique composé de 80 654 expressions d'instructions naturelles et d'annotations SQL de 24 241 tables. Chaque requête dans WikiSQL est limitée à la même table et ne contient pas d'opérations complexes telles que le tri, le regroupement. Les requêtes dans WikiSQL sont limitées à la même table et n'incluent pas d'opérations complexes telles que le tri, le regroupement, les sous-requêtes, etc.
CHASE : Un ensemble de données chinois text2sql interactif multi-domaines contenant une liste de 5 459 questions multi-tours comprenant 17 940 groupes binaires
BIRD-SQL : un benchmark inter-domaines à grande échelle texte-SQL en anglais, avec un accent particulier sur le contenu de bases de données volumineuses. L'ensemble de données contient 12 751 paires de données texte-SQL et 95 bases de données d'une taille totale de 33,4 Go réparties dans 37 domaines professionnels. L'ensemble de données BIRD-SQL comble le fossé entre la recherche texte-vers-SQL et les applications du monde réel en explorant trois défis supplémentaires, à savoir la gestion des valeurs de bases de données volumineuses et désordonnées, l'inférence de connaissances externes et l'optimisation de l'efficacité de l'exécution SQL.
CoSQL : un corpus pour créer des systèmes conversationnels texte-SQL inter-domaines. Il s'agit d'une version conversationnelle des tâches Spider et SParC. CoSQL se compose de plus de 30 000 tours et de plus de 10 000 requêtes SQL annotées issues de la collection de 3 000 conversations de Wizard-of-Oz interrogeant 200 bases de données complexes sur 138 domaines. Chaque conversation simule un scénario de requête de base de données réaliste dans lequel un membre du personnel explore la base de données en tant qu'utilisateur et un expert SQL utilise SQL pour récupérer des réponses, clarifier des questions ambiguës ou informer de toute autre manière.
Suivant le modèle de traitement de NSQL, l'ensemble de données a subi un traitement de base, produisant environ 20 W d'ensemble de données.
DB-GPT-Hub prend actuellement en charge les modèles de base suivants :
Le modèle est affiné sur la base d'un bit de quantification de 4 à l'aide de l'apprentissage quantifié sur une architecture redondante (QLoRA). La configuration matérielle minimale requise pour cela peut être la suivante :
Paramètres du modèle | RAM du processeur graphique | RAM du processeur | DISQUE |
---|---|---|---|
7b | 6 Go | 3,6 Go | 36,4 Go |
13b | 13,4 Go | 5,9 Go | 60,2 Go |
Tous les paramètres associés sont définis au minimum, avec une taille de lot de 1 et une longueur maximale de 512. D'après l'expérience, pour de meilleures performances, il est recommandé de définir les valeurs de longueur associées sur 1024 ou 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 .
Tout d'abord, installez dbgpt-hub
avec la commande suivante
pip install dbgpt-hub
Ensuite, configurez les arguments et exécutez l’ensemble du processus.
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 utilise la méthode de génération de correspondance d'informations pour la préparation des données, c'est-à-dire la méthode de génération SQL + Repository qui combine les informations des tables. Cette méthode combine les informations de la table de données pour mieux comprendre la structure et les relations de la table de données et convient pour générer des instructions SQL répondant aux exigences.
Téléchargez l'ensemble de données Spider à partir du lien de l'ensemble de données Spider. Par défaut, après avoir téléchargé et extrait les données, placez-les dans le répertoire dbgpt_hub_sql/data, c'est-à-dire que le chemin doit être dbgpt_hub_sql/data/spider
.
Pour la partie prétraitement des données, exécutez simplement le script suivant :
# # generate train and dev(eval) data
sh dbgpt_hub_sql/scripts/gen_train_eval_data.sh
Dans le répertoire dbgpt_hub_sql/data/
, vous trouverez le fichier de formation nouvellement généré example_text2sql_train.json et le fichier de test example_text2sql_dev.json, contenant respectivement 8659 et 1034 entrées. Pour les données utilisées lors des réglages ultérieurs, définissez la valeur du paramètre file_name
sur le nom de fichier de l'ensemble de formation dans dbgpt_hub_sql/data/dataset_info.json, par exemple example_text2sql_train.json.
Les données dans le JSON généré ressemblent à ceci :
{
"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": []
},
Le code informatique de chase
, cosql
et sparc
a été intégré dans le code informatique du projet. Après avoir téléchargé l'ensemble de données selon le lien ci-dessus, il vous suffit d' in
dbgpt_hub_sql/configs/config.py Just loosen the corresponding code comment in SQL_DATA_INFO
.
Le réglage fin du modèle prend en charge les méthodes LoRA et QLoRA. Nous pouvons exécuter la commande suivante pour affiner le modèle. Par défaut, avec le paramètre --quantization_bit, il utilise la méthode de réglage fin QLoRA. Pour passer aux LoRA, supprimez simplement le paramètre associé du script. Exécutez la commande :
sh dbgpt_hub_sql/scripts/train_sft.sh
Après un réglage fin, les poids du modèle seront enregistrés par défaut dans le dossier adaptateur, plus précisément dans le répertoire dbgpt_hub_sql/output/adapter.
Si vous utilisez une formation multi-GPU et souhaitez utiliser deepseed , vous devez modifier le contenu par défaut dans train_sft.sh. Le changement est :
CUDA_VISIBLE_DEVICES=0 python dbgpt_hub_sql/train/sft_train.py
--quantization_bit 4
...
Remplacer par:
deepspeed --num_gpus 2 dbgpt_hub_sql/train/sft_train.py
--deepspeed dbgpt_hub_sql/configs/ds_config.json
--quantization_bit 4
...
si vous avez besoin d'un numéro de carte de commande
deepspeed --include localhost:0,1 dbgpt_hub_sql/train/sft_train.py
--deepspeed dbgpt_hub_sql/configs/ds_config.json
--quantization_bit 4
...
Les autres parties omises (…) peuvent rester cohérentes. Si vous souhaitez modifier la configuration Deepseed par défaut, accédez au répertoire dbgpt_hub_sql/configs
et apportez les modifications nécessaires à ds_config.json, la valeur par défaut est stage2.
Dans le script, lors du réglage fin, différents modèles correspondent aux paramètres clés lora_target et template, comme indiqué dans le tableau suivant :
nom du modèle | lora_target | modèle |
---|---|---|
LLaMA-2 | q_proj,v_proj | lama2 |
CodeLlama-2 | q_proj,v_proj | lama2 |
Baichuan2 | W_pack | baichuan2 |
Qwen | c_attn | chatml |
sqlcoder-7b | q_proj,v_proj | mistral |
codeursql2-15b | c_attn | défaut |
StagiaireLM | q_proj,v_proj | interne |
XVERS | q_proj,v_proj | xvers |
ChatGLM2 | valeur_clé_requête | chatglm2 |
Lama | q_proj,v_proj | - |
FLORAISON | valeur_clé_requête | - |
BLOOMZ | valeur_clé_requête | - |
Baichuan | W_pack | baichuan |
Faucon | valeur_clé_requête | - |
Dans train_sft.sh
, les autres paramètres clés sont les suivants :
quantization_bit : indique si la quantification est appliquée, les valeurs valides étant [4 ou 8].
model_name_or_path : Le chemin du LLM (Large Language Model).
dataset : spécifie le nom de la configuration de l'ensemble de données de formation, correspondant à la valeur de clé externe dans dbgpt_hub_sql/data/dataset_info.json, telle que example_text2sql.
max_source_length : La longueur du texte saisi dans le modèle. Si les ressources informatiques le permettent, elle peut être définie aussi grande que possible, comme 1024 ou 2048.
max_target_length : la longueur du contenu SQL généré par le modèle ; 512 est généralement suffisant.
output_dir : Le chemin de sortie du module Peft pendant SFT (Supervised Fine-Tuning), défini par défaut surdbgpt_hub_sql/output/adapter/
.
per_device_train_batch_size : la taille du lot. Si les ressources informatiques le permettent, il peut être agrandi ; la valeur par défaut est 1.
gradient_accumulation_steps : Le nombre d'étapes pour accumuler des dégradés avant une mise à jour.
save_steps : nombre d'étapes auxquelles les points de contrôle du modèle sont enregistrés ; il peut être réglé à 100 par défaut.
num_train_epochs : le nombre d'époques pour entraîner l'ensemble de données.
Sous le répertoire du projet ./dbgpt_hub_sql/output/pred/, ce dossier est l'emplacement de sortie par défaut pour les prédictions du modèle (s'il n'existe pas, simplement mkdir).
sh ./dbgpt_hub_sql/scripts/predict_sft.sh
Dans le script, par défaut avec le paramètre --quantization_bit
, il prédit en utilisant QLoRA. Le supprimer passe à la méthode de prédiction LoRA. La valeur du paramètre predicted_input_filename
est votre fichier de jeu de données de test de prévision. --predicted_out_filename
est le nom de fichier des résultats prédits du modèle.
Vous pouvez trouver les deuxièmes poids de modèle correspondants sur Huggingface hg-eosphoros-ai, nous avons téléchargé les poids LoRA en octobre, dont la précision d'exécution sur l'ensemble d'évaluation Spider a atteint 0,789.
Si vous devez fusionner les poids du modèle de base entraîné et du module Peft affiné pour exporter un modèle complet, exécutez le script d'exportation de modèle suivant :
sh ./dbgpt_hub_sql/scripts/export_merge.sh
Assurez-vous de remplacer les valeurs des chemins des paramètres dans le script par les chemins correspondant à votre projet.
Pour évaluer les performances du modèle sur l'ensemble de données, la valeur par défaut est l'ensemble de données de développement Spider. Exécutez la commande suivante :
python dbgpt_hub_sql/eval/evaluation.py --plug_value --input Your_model_pred_file
Vous pouvez trouver les résultats de notre dernière revue et une partie des résultats des expériences ici
Remarque : La base de données pointée par le code par défaut est une base de données de 95 Mo téléchargée depuis le [site officiel de Spider] (https://yale-lily.github.io/spider). Si vous devez utiliser la base de données Spider (taille 1,27 Go) dans la suite de tests, veuillez d'abord télécharger la base de données dans le lien vers le répertoire personnalisé et exécuter la commande d'évaluation ci-dessus qui ajoute des paramètres et des valeurs comme --db Your_download_db_path
.
L'ensemble du processus, nous le diviserons en trois phases :
Étape 1 :
Actuellement, nous proposons un support pour les fonctionnalités suivantes :
Étape 2 :
20231010
prompts
Étape 3 :
Si notre travail vous a apporté ne serait-ce qu'une petite aide, pensez à nous attribuer une étoile. Vos commentaires et votre soutien nous motivent à continuer à publier davantage de travaux connexes et à améliorer nos efforts. Merci!
Nous invitons chaleureusement davantage de personnes à nous rejoindre et à s'engager activement dans divers aspects de notre projet, tels que les ensembles de données, le réglage fin du modèle, l'évaluation des performances, les recommandations d'articles et la reproduction de code. N'hésitez pas à ouvrir des problèmes ou à tirer des demandes (PR), et nous serons proactifs en répondant à vos contributions.
Avant de soumettre votre code, assurez-vous qu'il est formaté selon le style noir en utilisant la commande suivante :
black dbgpt_hub
Si vous disposez de plus de temps pour exécuter une vérification de type et de style plus détaillée de votre code, veuillez utiliser la commande suivante :
pyright dbgpt_hub
pylint dbgpt_hub
Si vous avez des questions ou avez besoin d'aide supplémentaire, n'hésitez pas à nous contacter. Nous apprécions votre implication!
Notre travail repose principalement sur le fondement de nombreuses contributions open source. Merci aux projets open source suivants
Merci à tous les contributeurs, en particulier @JBoRu qui a soulevé le problème qui nous a rappelé d'ajouter une nouvelle méthode d'évaluation prometteuse, c'est-à-dire Test Suite. Comme le mentionne l'article 《SQL-PALM : AMÉLIORATION DU MODÈLE DE LANGAGE AMÉLIORÉ POUR TEXT-TO-SQL》 : "Nous considérons deux mesures d'évaluation couramment utilisées : la précision d'exécution (EX) et la précision de la suite de tests (TS). EX mesure si le Le résultat de l'exécution SQL correspond à la vérité terrain (GT), tandis que TS mesure si le SQL réussit toutes les évaluations EX pour plusieurs tests, générés par l'augmentation de la base de données. Puisque EX contient des faux positifs, nous considérons TS comme une évaluation plus fiable. métrique".
Si vous trouvez DB-GPT-Hub
utile pour votre recherche ou développement, veuillez citer l'article suivant :
@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.' }
}
La licence MIT (MIT)
Nous collaborons en tant que communauté, et si vous avez des idées concernant notre travail communautaire, n'hésitez pas à nous contacter. Si vous souhaitez approfondir une expérience approfondie et optimiser le sous-projet DB-GPT-Hub, vous pouvez contacter « wangzai » au sein du groupe WeChat. Nous apprécions de tout cœur vos contributions pour rendre notre vie encore meilleure ensemble !