Tyycha's picture
fix bugs
cc2ed2f
|
Raw
History Blame Contribute Delete
6.58 kB
---
library_name: peft
base_model: Qwen/Qwen2.5-Coder-3B-Instruct
language:
- ru
tags:
- text-to-sql
- qlora
- russian
- sql-generation
license: apache-2.0
datasets:
- ai-forever/PAUQ
---
# qwen-coder-pauq-lora
LoRA-адаптер для модели **Qwen2.5-Coder-3B-Instruct**, обученный методом
**QLoRA** на датасете **PAUQ** для задачи преобразования вопросов на
русском языке в SQL-запросы. Часть выпускной квалификационной работы
по направлению 09.03.04 «Программная инженерия», КНИТУ-КАИ.
## Описание
Адаптер обучает модель отвечать на русскоязычный аналитический вопрос
синтаксически корректным SQL-запросом, учитывая схему конкретной базы
данных, переданную в системном сообщении вместе с примерами строк.
Базовая модель остаётся замороженной, обучаются только LoRA-матрицы
рангом 16, наложенные на все проекционные слои attention и MLP. Это
позволяет хранить и распространять адаптер размером несколько десятков
мегабайт, а не полные веса модели в несколько гигабайт.
## Использование
```python
from transformers import AutoModelForCausalLM, AutoTokenizer
from peft import PeftModel
base = "Qwen/Qwen2.5-Coder-3B-Instruct"
adapter = "Tyycha/qwen-coder-pauq-lora"
tokenizer = AutoTokenizer.from_pretrained(base)
model = AutoModelForCausalLM.from_pretrained(base, device_map="auto")
model = PeftModel.from_pretrained(model, adapter)
model.eval()
messages = [
{"role": "system", "content": "Ты — ассистент, который преобразует вопросы на русском языке в SQL..."},
{"role": "user", "content": "### Schema:\nCREATE TABLE orders (id INT, amount REAL, status TEXT);\n\n### Question:\nКакая суммарная выручка по оплаченным заказам?\n\n### SQL:\n"},
]
prompt = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
output = model.generate(**inputs, max_new_tokens=256, do_sample=False)
print(tokenizer.decode(output[0][inputs["input_ids"].shape[1]:], skip_special_tokens=True))
```
Полный pipeline (формирование промпта, постобработка, исполнение SQL)
реализован в проекте [Ru2SQL](https://github.com/Tyycha/Ru2SQL).
## Данные
- **Датасет:** PAUQ (Bakshandaeva et al., 2022) — первый крупный русскоязычный
корпус для задачи Text-to-SQL, построенный на основе Spider.
- **Размер:** ~7 тыс. пар (вопрос, SQL) в train, 1076 в dev.
- **Структура примера:** диалог в формате chat-template из трёх сообщений
(`system` с инструкцией и опциональным бизнес-словарём, `user` со
схемой и вопросом, `assistant` с эталонным SQL).
## Гиперпараметры обучения
| Параметр | Значение |
|---|---|
| Базовая модель | Qwen/Qwen2.5-Coder-3B-Instruct |
| Метод | QLoRA (NF4, double quantization, compute dtype = bfloat16) |
| LoRA rank `r` | 16 |
| LoRA alpha | 32 |
| LoRA dropout | 0.05 |
| Target modules | q_proj, k_proj, v_proj, o_proj, gate_proj, up_proj, down_proj |
| Эпохи | 2 |
| Размер батча | 1 (на устройство) |
| Накопление градиентов | 8 шагов (эффективный батч 8) |
| Скорость обучения | 2e-4 (cosine, warmup 3 %) |
| Max sequence length | 1024 |
| Точность | bfloat16 |
| Оборудование | NVIDIA Tesla T4 16 GB (Kaggle) |
## Метрики
Оценка на валидационной выборке PAUQ (1076 примеров, 166 баз данных):
| Метрика | Значение |
|---|---|
| Exact Match (EM) | 40.0 % (430 / 1076) |
| Execution Accuracy (EX) | 71.9 % (772 / 1074) |
Для сравнения, опубликованные результаты на той же выборке:
| Модель | EM | EX |
|---|---|---|
| RAT-SQL (PAUQ, mono) | 51 % | 49 % |
| BRIDGE (PAUQ, mono) | 52 % | 48 % |
| **Qwen2.5-Coder-3B + QLoRA (эта работа)** | **40 %** | **71.9 %** |
Высокий разрыв между EM и EX отражает специфику задачи: модель
генерирует семантически корректные запросы, но синтаксически
отличающиеся от эталонных (другой порядок условий, альтернативные
JOIN-стратегии, иные псевдонимы).
## Ограничения
- Модель обучена на схемах PAUQ/Spider. На существенно отличающихся
предметных областях качество может падать; для адаптации
предусмотрен механизм бизнес-словаря в основном проекте.
- Наиболее сложные классы запросов — вложенные SELECT, конструкции
INTERSECT/EXCEPT/UNION, HAVING с несколькими условиями — остаются
слабым местом.
- При работе на CPU без GPU инференс занимает 15–30 секунд на запрос.
- Адаптер ориентирован на SQLite. Для PostgreSQL/MySQL рекомендуется
явно указать диалект в промпте.
## Лицензия
Apache 2.0. Базовая модель Qwen2.5-Coder также распространяется под
лицензией Apache 2.0; датасет PAUQ — Apache 2.0.
## Цитирование
```bibtex
@misc{ru2sql-qlora-2026,
title = {Ru2SQL: Russian Text-to-SQL via QLoRA on Qwen2.5-Coder},
author = {Siryazeev, Danis},
year = {2026},
note = {Bachelor's thesis, Kazan National Research Technical University},
}
```