Text Generation
Safetensors
GGUF
Russian
gpt2
code
timbossm's picture
Update README.md
bf630f1 verified
---
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
<!-- Provide a quick summary of what the model is/does. -->
Эта модель представляет собой дообученную версию GPT-2, специализированную для генерации SQL-запросов и объяснений к ним на основе описания схемы базы данных "Продажи", используемой в лабораторном практикуме МГПУ по языку SQL.
## Model Details
### Model Description
<!-- Provide a longer summary of what this model is. -->
`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]
<!-- Provide the basic links for the model. -->
- **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
<!-- This section is meant to convey both technical and sociotechnical 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`