简体中文| Раздор | Вичат | Обнимающее лицо | Сообщество | Бумага
Текст2SQL | Текст2НЛУ
Метрика точности выполнения оценки Text2SQL (ex), и мы переместим ее в src/dbgpt_hub_sql
Модель | Метод | Легкий | Середина | Жесткий | Дополнительный | Все |
---|---|---|---|---|---|---|
база | 0 | 0 | 0 | 0 | 0 | |
Лама2-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 | |
КодLlama-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 | |
КодLlama-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 | |
Квен-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 | |
Квен-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. Проект включает в себя различные этапы, включая сбор данных, предварительную обработку данных, выбор и построение модели, а также точную настройку весов модели. С помощью этих процессов наша цель — расширить возможности преобразования текста в SQL при одновременном снижении затрат на обучение модели, что позволит большему числу разработчиков внести свой вклад в повышение точности преобразования текста в SQL. Наша конечная цель — реализовать возможности автоматического ответа на вопросы на основе баз данных, позволяя пользователям выполнять сложные запросы к базе данных, используя описания на естественном языке.
На сегодняшний день мы успешно интегрировали несколько крупных моделей и создали комплексный рабочий процесс, который включает обработку данных, обучение модели с контролируемой точной настройкой (SFT), вывод прогнозов и оценку. Код, разработанный для этого проекта, легко повторно использовать внутри самого проекта.
По состоянию на 10 октября 2023 года мы использовали этот проект для точной настройки модели размером 13B с открытым исходным кодом, включая более релевантные данные. При нулевых запросах и использовании набора тестов на базе Spider мы достигли точности выполнения 0,764 для базы данных размером 1,27 ГБ. Кроме того, точность выполнения для базы данных, указанной на официальном сайте Spider, размером 95 МБ, составляет 0,825.
Мы повышаем производительность преобразования текста в SQL, применяя контролируемую точную настройку (SFT) к большим языковым моделям.
Основным набором данных для примеров этого проекта является набор данных Spider :
Другие доступные наборы данных text2sql:
WikiSQL: большой набор данных семантического анализа, состоящий из 80 654 естественных выражений операторов и sql-аннотаций 24 241 таблицы. Каждый запрос в WikiSQL ограничен одной и той же таблицей и не содержит сложных операций, таких как сортировка, группировка. Запросы в WikiSQL ограничены одной и той же таблицей и не включают в себя сложные операции, такие как сортировка, группировка, подзапросы и т. д.
CHASE: Междоменный многораундовый интерактивный набор данных text2sql для китайского языка, содержащий список из 5459 многораундовых вопросов, состоящих из 17 940 бинарных групп
BIRD-SQL: крупномасштабный междоменный тест преобразования текста в SQL на английском языке с особым упором на содержимое больших баз данных. Набор данных содержит 12 751 пару данных преобразования текста в SQL и 95 баз данных общим размером 33,4 ГБ по 37 профессиональным областям. Набор данных BIRD-SQL устраняет разрыв между исследованиями преобразования текста в SQL и реальными приложениями, исследуя три дополнительные задачи, а именно работу с большими и беспорядочными значениями базы данных, вывод внешних знаний и оптимизацию эффективности выполнения SQL.
CoSQL: корпус для создания междоменных диалоговых систем преобразования текста в SQL. Это диалоговая версия задач Spider и SPArC. CoSQL состоит из более чем 30 тысяч раундов и более 10 тысяч аннотированных SQL-запросов из коллекции Волшебника страны Оз, состоящей из 3 тысяч диалогов, запрашивающих 200 сложных баз данных в 138 доменах. Каждый разговор имитирует реалистичный сценарий запроса к базе данных, в котором сотрудник исследует базу данных как пользователь, а эксперт по SQL использует SQL для получения ответов, разъяснения неоднозначных вопросов или иной информации.
Следуя шаблону обработки NSQL, набор данных подвергся базовой обработке, что дало набор данных примерно 20 Вт.
DB-GPT-Hub в настоящее время поддерживает следующие базовые модели:
Модель точно настраивается на основе бита квантования 4 с использованием квантового обучения поверх избыточной архитектуры (QLoRA). Минимальные требования к аппаратному обеспечению для этого можно обозначить следующим образом:
Параметры модели | ОЗУ графического процессора | Оперативная память процессора | ДИСК |
---|---|---|---|
7б | 6 ГБ | 3,6 ГБ | 36,4 ГБ |
13б | 13,4 ГБ | 5,9 ГБ | 60,2 ГБ |
Для всех связанных параметров установлены минимальные значения с размером пакета 1 и максимальной длиной 512. Исходя из опыта, для повышения производительности рекомендуется установить соответствующие значения длины на 1024 или 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 .
Сначала установите 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
был встроен в код обработки данных проекта. После загрузки набора данных по приведенной выше ссылке вам нужно только in
dbgpt_hub_sql/configs/config.py. 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.
Если вы используете обучение с несколькими графическими процессорами и хотите использовать 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
...
если вам нужен идентификатор карты заказа
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 и шаблону соответствуют разные модели, как показано в следующей таблице:
название модели | lora_target | шаблон |
---|---|---|
ЛЛаМА-2 | q_proj,v_proj | лама2 |
КодLlama-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 | xverse |
ЧатGLM2 | query_key_value | чатглм2 |
ЛАМА | q_proj,v_proj | - |
ЦВЕСТИ | query_key_value | - |
БЛУМЗ | query_key_value | - |
Байчуань | W_pack | Байчуань |
Сокол | query_key_value | - |
В train_sft.sh
другие ключевые параметры следующие:
quantization_bit: указывает, применяется ли квантование, допустимые значения — [4 или 8].
имя_модели_или_путь: путь к LLM (большая языковая модель).
набор данных: указывает имя конфигурации набора обучающих данных, соответствующее значению внешнего ключа в dbgpt_hub_sql/data/dataset_info.json, например example_text2sql.
max_source_length: длина ввода текста в модель. Если позволяют вычислительные ресурсы, его можно установить как можно больше, например 1024 или 2048.
max_target_length: длина вывода содержимого SQL моделью; 512 обычно достаточно.
output_dir: путь вывода модуля Peft во время SFT (контролируемой точной настройки), по умолчанию установленный в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, мы загрузили веса LoRA в октябре, точность выполнения которых на оценочном наборе Spider достигла 0,789.
Если вам нужно объединить веса обученной базовой модели и точно настроенного модуля Peft для экспорта полной модели, выполните следующий скрипт экспорта модели:
sh ./dbgpt_hub_sql/scripts/export_merge.sh
Обязательно замените значения путей параметров в скрипте путями, соответствующими вашему проекту.
Чтобы оценить производительность модели в наборе данных, по умолчанию используется набор данных Spider dev. Выполните следующую команду:
python dbgpt_hub_sql/eval/evaluation.py --plug_value --input Your_model_pred_file
Результаты нашего последнего обзора и часть результатов эксперимента вы можете найти здесь.
Примечание . База данных, на которую указывает код по умолчанию, представляет собой базу данных размером 95 МБ, загруженную с [официального сайта Spider] (https://yale-lily.github.io/spider). Если вам нужно использовать базу данных Spider (размер 1,27 ГБ) в тестовом наборе, сначала загрузите базу данных по ссылке в пользовательский каталог и запустите приведенную выше команду оценки, которая добавляет параметры и значения, такие как --db Your_download_db_path
.
Весь процесс мы разделим на три этапа:
Этап 1:
На данный момент мы предлагаем поддержку следующих функций:
Этап 2:
20231010
prompts
Этап 3:
Если наша работа оказала вам хотя бы небольшую помощь, рассмотрите возможность поставить нам звезду. Ваши отзывы и поддержка служат для нас мотивацией продолжать выпускать больше связанных работ и совершенствовать наши усилия. Спасибо!
Мы приглашаем больше людей присоединиться к нам и активно участвовать в различных аспектах нашего проекта, таких как наборы данных, точная настройка модели, оценка производительности, рекомендации по работе с документами и воспроизведение кода. Пожалуйста, не стесняйтесь открывать вопросы или запросы на включение (PR), и мы будем активно реагировать на ваш вклад.
Прежде чем отправлять код, убедитесь, что он отформатирован в соответствии с черным стилем, используя следующую команду:
black dbgpt_hub
Если у вас есть больше времени для более детальной проверки типов и стиля вашего кода, используйте следующую команду:
pyright dbgpt_hub
pylint dbgpt_hub
Если у вас есть какие-либо вопросы или вам нужна дополнительная помощь, не стесняйтесь обращаться к нам. Мы ценим ваше участие!
Наша работа в первую очередь основана на многочисленных вкладах в открытый исходный код. Благодаря следующим проектам с открытым исходным кодом
Спасибо всем участникам, особенно @JBoRu, который поднял проблему и напомнил нам о необходимости добавить новый многообещающий способ оценки, то есть Test Suite. Как упоминается в документе «SQL-PALM: УЛУЧШЕННАЯ АДАПТАЦИЯ БОЛЬШОЙ ЯЗЫКОВОЙ МОДЕЛИ ДЛЯ TEXT-TO-SQL»: «Мы рассматриваем два часто используемых показателя оценки: точность выполнения (EX) и точность набора тестов (TS). EX измеряет, насколько Результат выполнения SQL соответствует основной истине (GT), тогда как TS измеряет, проходит ли SQL все оценки EX для нескольких тестов, сгенерированных расширением базы данных. Поскольку 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 (MIT)
Мы сотрудничаем как сообщество, и если у вас есть какие-либо идеи относительно нашей общественной работы, пожалуйста, не стесняйтесь обращаться к нам. Если вы заинтересованы в углубленном эксперименте и оптимизации подпроекта DB-GPT-Hub, вы можете обратиться к wangzai в группе WeChat. Мы искренне приветствуем ваш вклад, чтобы вместе сделать его еще лучше!