File size: 16,910 Bytes
d497f08 af96609 26066c5 af96609 eb019b2 d497f08 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 | ---
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`
|