|
--- |
|
license: apache-2.0 |
|
datasets: |
|
- PipableAI/pip-txt-to-sql-spider-bird-dataset |
|
language: |
|
- en |
|
metrics: |
|
- accuracy |
|
tags: |
|
- sql |
|
- code |
|
- text2sql |
|
- instruction_tuned |
|
- basemodel |
|
- jax |
|
- pytorch |
|
- text-generation-inference |
|
library_name: transformers |
|
pipeline_tag: text-generation |
|
widget: |
|
- text: >- |
|
<schema>CREATE TABLE system(JobID: String,GID: String, UID: String, |
|
Start:Time(yyyy/mm/dd), End: Time,ElapsedRaw: Time, CPUTimeRAW: Time,NCPUS: |
|
Number,NNodes: Number, NodeList: List, State:String, Timelimit: |
|
Time);</schema><question>Get UID and job id for Jobs that started on Jan 20 |
|
, 2023 ended on feb 14 2023 and has job id 20</question><sql> |
|
example_title: example |
|
--- |
|
# pipSQL-1.3b |
|
|
|
[pipableAi](https://www.linkedin.com/company/pipable.ai/about/) |
|
|
|
[colab_notebook](https://colab.research.google.com/drive/1insSxvc3jjAXe0zmdIjmbG3ttb5mpRgQ?usp=sharing) |
|
|
|
## Основная информация |
|
Основа для файнтюна (FT). |
|
|
|
## Основные характеристики модели |
|
- Размер: 1.3 миллиарда параметров |
|
- Специализация: ETL (Extract, Transform, Load) и SQL-операции |
|
- Доступность: открытый доступ через Hugging Face |
|
- Превосходит ChatGPT в SQL-ориентированных бенчмарках |
|
|
|
## Преимущества для бизнес-информатики МГПУ |
|
|
|
### 1. Техническая оптимальность |
|
- Оптимальный размер для файнтюнинга (1.3B параметров) |
|
- Возможность запуска на доступном оборудовании |
|
- Эффективное использование вычислительных ресурсов |
|
|
|
### 2. Образовательные преимущества |
|
- Специализация на SQL подходит для курсов по базам данных |
|
- Поддержка ETL-процессов актуальна для бизнес-аналитики |
|
- Возможность интеграции в учебные проекты |
|
|
|
### 3. Направления файнтюнинга для МГПУ |
|
- Адаптация под специфику учебных задач |
|
- Настройка на корпоративные кейсы |
|
- Интеграция российских бизнес-практик |
|
|
|
## Рекомендации по файнтюнингу |
|
|
|
### 1. Приоритетные области настройки |
|
- Работа с российскими СУБД |
|
- Интеграция отраслевой специфики |
|
- Адаптация под образовательные задачи |
|
|
|
### 2. Технические аспекты |
|
- Использование LoRA для эффективной настройки |
|
- Подготовка специализированных датасетов |
|
- Валидация на реальных бизнес-кейсах |
|
|
|
### 3. Образовательные компоненты |
|
- Создание учебных примеров |
|
- Разработка практических заданий |
|
- Интеграция в существующие курсы |
|
|
|
## Потенциальные применения |
|
|
|
1. Учебный процесс: |
|
- Автоматическая проверка SQL-запросов студентов |
|
- Генерация учебных примеров |
|
- Поддержка практических занятий |
|
|
|
2. Исследовательская работа: |
|
- Анализ больших наборов данных |
|
- Поддержка научных исследований |
|
- Обработка результатов экспериментов |
|
|
|
3. Практические проекты: |
|
- Работа с реальными бизнес-задачами |
|
- Создание прототипов решений |
|
- Анализ бизнес-процессов |
|
</antArtifact> |
|
|
|
Эта модель представляет особую ценность для направления бизнес-информатики благодаря своей специализации на SQL и ETL-процессах. |
|
|
|
## Процесс обучения модели |
|
|
|
Реализован через комбинированную функцию потерь, включающую: |
|
|
|
1. Softmax cross entropy (перекрёстная энтропия с софтмакс нормализацией) для оптимизации вероятностного распределения предсказаний |
|
|
|
2. Модифицированный вариант policy gradient для оптимизации стратегии принятия решений |
|
|
|
3. Q-loss для оценки качества действий |
|
|
|
Оптимизация производилась в рамках EM-фреймворка (Expectation-Maximization), что обеспечивает итеративное улучшение параметров модели через чередование шагов оценки ожидания и максимизации вероятности. |
|
|
|
Такая архитектура потерь позволяет эффективно оптимизировать как точность генерации SQL-запросов, так и стратегическое качество принимаемых моделью решений. |
|
|
|
## Бенчмаркинг : |
|
Оценка производительности модели выполнена на основе Semantic Evaluation for Text-to-SQL with Distilled Test Suites - официального фреймворка оценки, разработанного исследовательской группой Yale и Berkeley для бенчмарков Spider, SParC и CoSQL. |
|
|
|
Тестовый набор данных включает 2200 примеров, что обеспечивает статистически значимую оценку качества генерации SQL-запросов и семантической точности модели. |
|
|
|
Тест на defog eval. |
|
Он содержит 200 точек тестовых данных, отобранных вручную командой defog. |
|
Вот ссылка на него: |
|
|
|
## Usage |
|
|
|
|
|
[Test Suite SQL Eval](https://github.com/taoyds/test-suite-sql-eval) |
|
|
|
|model|easy|medium|hard|extra| |
|
|-----|----|------|----|-----| |
|
|sqlcoder-7b-2|72.0|58.0|40.6|37.3| |
|
|pipSQL-1.3b|78.5|57.5|42.1|28.3| |
|
|pipSQL-7b|63.0|40.0|30.2|25.0| |
|
|sqlcoder-7b|60.6|48.2|28.3|20.4| |
|
|gpt-3.5|58.8|44.7|31.0|28.4| |
|
|
|
|
|
|
|
[Defog SQL-Eval](https://github.com/defog-ai/sql-eval) |
|
Вот результаты - |
|
|
|
 |
|
|
|
## License |
|
Модель имеет открытый исходный код под лицензией Apache 2.0. |
|
|
|
|
|
### Installation |
|
|
|
```bash |
|
pip install transformers |
|
``` |
|
|
|
### Prompt |
|
```python |
|
prompt = f"""<schema>{schema}</schema> |
|
<question>{question}</question> |
|
<sql>""" |
|
``` |
|
|
|
### PyTorch |
|
```python |
|
from transformers import AutoModelForCausalLM, AutoTokenizer |
|
device = "cuda" |
|
model = AutoModelForCausalLM.from_pretrained("PipableAI/pip-sql-1.3b") |
|
tokenizer = AutoTokenizer.from_pretrained("PipableAI/pip-sql-1.3b") |
|
|
|
inputs = tokenizer(text, return_tensors="pt") |
|
outputs = model.generate(**inputs, max_new_tokens=200) |
|
print(tokenizer.decode(outputs[0], skip_special_tokens=True).split('<sql>')[1].split('</sql>')[0]) |
|
``` |
|
|
|
### Flax |
|
```python |
|
from transformers import FlaxAutoModelForCausalLM, AutoTokenizer |
|
device = "cuda" |
|
model = FlaxAutoModelForCausalLM.from_pretrained("PipableAI/pip-sql-1.3b",from_pt=True) |
|
tokenizer = AutoTokenizer.from_pretrained("PipableAI/pip-sql-1.3b") |
|
|
|
inputs = tokenizer(text, return_tensors="jax") |
|
outputs = model.generate(**inputs, max_new_tokens=200) |
|
print(tokenizer.decode(outputs[0], skip_special_tokens=True).split('<sql>')[1].split('</sql>')[0]) |
|
``` |
|
|
|
## Examples |
|
|
|
### Schema |
|
```sql |
|
CREATE TABLE Products ( |
|
product_id number, |
|
parent_product_id number, |
|
product_name text, |
|
product_price number, |
|
product_color text, |
|
product_size text, |
|
product_description text); |
|
|
|
CREATE TABLE Customers ( |
|
customer_id number, |
|
gender_code text, |
|
customer_first_name text, |
|
customer_middle_initial text, |
|
customer_last_name text, |
|
email_address text, |
|
login_name text, |
|
login_password text, |
|
phone_number text, |
|
address_line_1 text, |
|
town_city text, |
|
county text, |
|
country text); |
|
|
|
CREATE TABLE Customer_Payment_Methods ( |
|
customer_id number, |
|
payment_method_code text); |
|
|
|
CREATE TABLE Invoices ( |
|
invoice_number number, |
|
invoice_status_code text, |
|
invoice_date time); |
|
|
|
CREATE TABLE Orders ( |
|
order_id number, |
|
customer_id number, |
|
order_status_code text, |
|
date_order_placed time); |
|
|
|
CREATE TABLE Order_Items ( |
|
order_item_id number, |
|
product_id number, |
|
order_id number, |
|
order_item_status_code text); |
|
|
|
CREATE TABLE Shipments ( |
|
shipment_id number, |
|
order_id number, |
|
invoice_number number, |
|
shipment_tracking_number text, |
|
shipment_date time); |
|
|
|
CREATE TABLE Shipment_Items ( |
|
shipment_id number, |
|
order_item_id number); |
|
``` |
|
|
|
### Questions |
|
What are the email address, town and county of the customers who are of the least common gender? |
|
```sql |
|
SELECT email_address , town_city , county FROM customers GROUP BY gender_code ORDER BY count(*) ASC LIMIT 1 |
|
``` |
|
|
|
What are the product price and the product size of the products whose price is above average? |
|
```sql |
|
SELECT product_price , product_size FROM products WHERE product_price > (SELECT avg(product_price) FROM products) |
|
``` |
|
|
|
Which customers did not make any orders? List the first name, middle initial and last name. |
|
```sql |
|
SELECT T1.customer_first_name , T1.customer_middle_initial , T1.customer_last_name FROM Customers AS T1 WHERE T1.customer_id NOT IN (SELECT T2.customer_id FROM Orders AS T2) |
|
``` |
|
|