--- language: - ru base_model: - openai-community/gpt2 datasets: - timbossm/sales_lab_mgpu_2_course pipeline_tag: text-generation tags: - code license: apache-2.0 --- # Model Card for timbossm/sales-sql-finetuned-model Эта модель представляет собой дообученную версию GPT-2, специализированную для генерации SQL-запросов и объяснений к ним на основе описания схемы базы данных "Продажи", используемой в лабораторном практикуме МГПУ по языку SQL. ## Model Details ### Model Description `timbossm/sales-sql-finetuned-model` - это дообученная (fine-tuned) модель GPT-2, предназначенная для выполнения задач Text-to-SQL и SQL-объяснения в контексте конкретной учебной схемы базы данных "Продажи". Модель была дообучена на небольшом датасете, созданном на основе примеров и заданий из лабораторных работ МГПУ. Она учится генерировать SQL-запросы (преимущественно SELECT) на естественном языке (русском), когда ей предоставляется описание схемы базы данных и запрос пользователя. Также модель может генерировать объяснения к предоставленным SQL-запросам или элементам схемы. **Важное замечание:** Модель была дообучена на **очень маленьком датасете (16 примеров)**. Из-за этого она, вероятно, имеет крайне ограниченные возможности обобщения и может просто запоминать обучающие примеры, не являясь надежным инструментом для работы с другими запросами или схемами. - **Developed by:** timbossm - **Funded by [optional]:** [More Information Needed] - **Shared by [optional]:** [More Information Needed] - **Model type:** Causal Language Model (Decoder-only Transformer), дообученная (fine-tuned). Основана на архитектуре GPT-2. - **Language(s) (NLP):** Русский (Russian) для входных промптов и текстовых ответов/объяснений; SQL для генерируемых запросов. - **License:** Лицензия базовой модели `gpt2` - MIT License. Лицензия данного дообученного артефакта наследует эту лицензию. Однако, данные для дообучения основаны на учебных материалах, и их использование может регулироваться отдельными условиями (предположительно, образовательными/некоммерческими). Рекомендуется ознакомиться с исходным практикумом. Лицензия модели: MIT. - **Finetuned from model [optional]:** gpt2 ### Model Sources [optional] - **Repository:** `https://huggingface.co/timbossm/sales-sql-finetuned-model` - **Paper [optional]:** Данная модель основана на материалах: Босенко, Т. М., & Фролов, Ю. В. (2025). *Лабораторный практикум по языку SQL: практикум*. МГПУ. ### Direct Use * Генерация SQL-запросов для конкретной схемы базы данных "Продажи", представленной в обучающем датасете. * Получение базовых объяснений по этой схеме и простым SQL-запросам. * В образовательных целях для демонстрации процесса дообучения LLM для задачи Text-to-SQL на очень простом примере. ### Downstream Use [optional] Модель может быть использована как отправная точка для дальнейших экспериментов по дообучению на более крупных и разнообразных датасетах Text-to-SQL, хотя, учитывая крайне маленький исходный тренировочный набор, ее полезность в качестве базы сильно ограничена. ### Out-of-Scope Use * Генерация SQL-запросов для любых других схем баз данных. * Генерация сложных или нестандартных SQL-конструкций, отсутствующих в обучающих примерах. * Использование в реальных приложениях, где требуется надежность и точность. * Генерация связного текста на общие темы. * Использование для любых задач, не связанных напрямую с заданной схемой БД "Продажи" и форматом промпт/ответ из обучающего датасета. ## Bias, Risks, and Limitations * **Крайне маленький размер обучающего датасета (16 примеров):** Это основное ограничение. Модель, вероятно, просто переобучилась на этих примерах и не сможет успешно обрабатывать запросы, которые значительно отличаются от увиденных во время обучения. Обобщающие способности очень низкие. * **Смещение по схеме:** Модель обучена только на одной конкретной схеме БД "Продажи". Она ничего не знает о других схемах или общих принципах построения БД и SQL. * **Ограниченное разнообразие запросов:** Обучающие примеры охватывают только определенные типы SELECT-запросов и базовые объяснения. Модель не научится DML-операциям (INSERT, UPDATE, DELETE) или другим DDL-операциям, кроме интерпретации CREATE TABLE. * **Риск некорректной генерации:** Несмотря на обучение, модель может генерировать синтаксически неверные SQL-запросы или логически неправильные ответы даже для целевой схемы, особенно при малейших отклонениях во входном промпте. ### Recommendations Пользователям настоятельно рекомендуется осознавать серьезные ограничения данной модели, связанные с крайне маленьким размером обучающего датасета. Модель непригодна для использования в продакшене или для задач, требующих надежной генерации SQL. Она может служить лишь как учебный пример дообучения LLM. Любые сгенерированные SQL-запросы должны быть тщательно проверены. ## How to Get Started with the Model Вы можете использовать модель для генерации текста следующим образом (включая DDL схему в промпт, как в обучающих данных): ```python from transformers import AutoModelForCausalLM, AutoTokenizer import torch # Укажите путь к сохраненной модели или ID на Hugging Face Hub # model_name = "./model" # Если модель сохранена локально model_name = "timbossm/sales-sql-finetuned-model" # Если загружаете с Hub tokenizer = AutoTokenizer.from_pretrained(model_name) model = AutoModelForCausalLM.from_pretrained(model_name) # Убедитесь, что токен паддинга установлен, если его нет (важно для генерации) if tokenizer.pad_token is None: tokenizer.pad_token = tokenizer.eos_token model.config.pad_token_id = tokenizer.pad_token_id # Убедитесь, что и в конфиге модели он установлен device = torch.device("cuda" if torch.cuda.is_available() else "cpu") model.to(device) model.eval() # Переключиться в режим инференса prompt_text = """Используя следующую схему базы данных: CREATE TABLE clients ( client_id INTEGER PRIMARY KEY AUTO_INCREMENT, last_name VARCHAR(50) NOT NULL, first_name VARCHAR(50) NOT NULL, email VARCHAR(100) NOT NULL, phone VARCHAR(14) NOT NULL ); CREATE TABLE orders ( order_id INTEGER PRIMARY KEY AUTO_INCREMENT, client_id INTEGER NOT NULL, order_date DATE NOT NULL, cost DECIMAL(10, 2) NOT NULL, FOREIGN KEY (client_id) REFERENCES clients(client_id) ); CREATE TABLE products ( product_id INTEGER PRIMARY KEY AUTO_INCREMENT, description VARCHAR(200) NOT NULL, price DECIMAL(10, 2) NOT NULL, quantity INTEGER NOT NULL, order_id INTEGER, FOREIGN KEY (order_id) REFERENCES orders(order_id) ); Напиши SQL-запрос, чтобы вывести email всех клиентов. """ # Пример промпта с DDL # Подготовка ввода с attention_mask inputs = tokenizer( prompt_text + "\n", # Добавляем разделитель как при обучении return_tensors="pt", max_length=1024, # Использовать ту же максимальную длину truncation=True, padding="max_length", return_attention_mask=True # Важно передавать маску внимания ).to(device) # Генерация текста output_sequences = model.generate( inputs["input_ids"], attention_mask=inputs["attention_mask"], # Передаем маску внимания max_new_tokens=100, # Максимальное количество новых токенов в ответе num_beams=1, # Жадный поиск no_repeat_ngram_size=2, eos_token_id=tokenizer.eos_token_id, pad_token_id=tokenizer.pad_token_id, ) generated_text = tokenizer.decode(output_sequences[0], skip_special_tokens=False) print("--- Сгенерированный ответ (полный текст): ---") print(generated_text) print("---------------------------------------------") # Опционально: извлечь только сгенерированную часть prompt_end_marker = prompt_text + "\n" prompt_end_index = generated_text.find(prompt_end_marker) if prompt_end_index != -1: generated_response = generated_text[prompt_end_index + len(prompt_end_marker):].strip() if generated_response.endswith(tokenizer.eos_token): generated_response = generated_response[:-len(tokenizer.eos_token)].strip() print("\n--- Извлеченный ответ: ---") print(generated_response) print("--------------------------") ``` ## Training Details ### Training Data Модель была дообучена на пользовательском датасете `sales_lab.jsonl`, созданном на основе примеров из "ЛАБОРАТОРНОГО ПРАКТИКУМА ПО ЯЗЫКУ SQL" МГПУ (2025, составители Т. М. Босенко, Ю.В. Фролов). Датасет содержит 16 пар "промпт" - "ответ", где промпты включают DDL схему базы данных "Продажи" и запрос на естественном языке или SQL код для объяснения, а ответы - соответствующий SQL код или текстовое объяснение. Схема БД включает таблицы `clients`, `orders`, `products`. **Важное замечание:** Датасет крайне мал (14 примеров для обучения, 2 для валидации). [More Information Needed] (Ссылка на Dataset Card, если он будет создан и выгружен отдельно). ### Training Procedure Модель `gpt2` была дообучена с использованием библиотеки Hugging Face `transformers` и класса `Trainer`. #### Preprocessing [optional] Каждая пара "промпт" и "ответ" из датасета была объединена в одну строку в формате `[prompt]\n[response][eos_token]`. Полученные строки были токенизированы с использованием `AutoTokenizer` для `gpt2`. Максимальная длина последовательности была установлена в 1024 токена с усечением (`truncation=True`) и паддингом до максимальной длины батча или `max_length` (`padding="max_length"`). Метки для обучения (`labels`) были созданы путем копирования входных токенов (`input_ids`), при этом токены, соответствующие оригинальному промпту (включая разделитель `\n`), были заменены на `-100`, чтобы функция потерь игнорировала их. #### Training Hyperparameters - **Training regime:** fp16 mixed precision (если `fp16=True` в TrainingArguments). Иначе fp32 non-mixed precision. - **num_train_epochs:** 5 - **per_device_train_batch_size:** 8 - **per_device_eval_batch_size:** 8 - **learning_rate:** 5e-5 - **weight_decay:** 0.01 - **eval_strategy:** "epoch" - **save_strategy:** "epoch" - **load_best_model_at_end:** True - **max_length (tokenization):** 1024 - **gradient_accumulation_steps:** 1 (по умолчанию в скрипте) #### Speeds, Sizes, Times [optional] - **Hardware Type:** NVIDIA RTX 2000 (использовалась одна GPU, если применялся `CUDA_VISIBLE_DEVICES=0`) - **Cloud Provider:** Локальное обучение. ### Testing Data, Factors & Metrics #### Testing Data Модель оценивалась на небольшом валидационном разбиении исходного датасета, состоящем из 2 примеров. #### Summary Результаты валидации на таком маленьком наборе данных (2 примера) **не являются репрезентативными** и не могут служить показателем реального качества модели или ее способности к обобщению. Высока вероятность переобучения на тренировочном наборе. - **Hardware Type:** NVIDIA RTX 2000 - **Cloud Provider:** Локальное обучение ## Technical Specifications [optional] ### Model Architecture and Objective Модель использует стандартную архитектуру GPT-2 - это трансформер типа "декодер-онли", обученный на задаче предсказания следующего токена. Дообучение адаптирует эту способность к задаче генерации SQL-запросов и объяснений на основе структурированных промптов, содержащих схему БД. ### Compute Infrastructure #### Hardware Обучение проводилось на GPU NVIDIA RTX 2000. #### Software * Python * PyTorch * Hugging Face `transformers` * Hugging Face `datasets` * Hugging Face `accelerate` * Hugging Face `huggingface-hub`