🚀 DuckDB-NSQL-7B
NSQL是专门为SQL生成任务设计的自回归开源大型基础模型(FMs)家族。本项目引入了NSQL的新成员DuckDB-NSQL,它基于Meta的原始 Llama-2 7B模型,在通用SQL查询数据集上进行预训练,然后在由DuckDB文本到SQL对组成的数据集上进行微调。
🚀 快速开始
模型推理参数
属性 |
详情 |
推理参数 |
do_sample: false ,max_length: 200 |
基础模型 |
meta-llama/Llama-2-7b |
示例
-
示例标题:read test.csv
- 指令:你的任务是生成有效的DuckDB SQL来回答以下问题。
- 问题:create a new table called tmp from test.csv
- 响应(尽可能使用DuckDB简写):无具体响应内容
-
示例标题:get _amount columns
- 指令:你的任务是生成有效的DuckDB SQL来回答以下问题。
- 问题:create a new table called tmp from test.csv
- 响应(尽可能使用DuckDB简写):无具体响应内容
-
示例标题:taxi trips
- 指令:给定DuckDB数据库模式,你的任务是生成有效的DuckDB SQL来回答以下问题。
- 数据库模式:
CREATE TABLE rideshare (
hvfhs_license_num varchar,
dispatching_base_num varchar,
originating_base_num varchar,
request_datetime timestamp,
on_scene_datetime timestamp,
pickup_datetime timestamp,
dropoff_datetime timestamp,
trip_miles double,
trip_time bigint
);
- 问题:get longest trip in december 2022
- 响应(尽可能使用DuckDB简写):无具体响应内容
✨ 主要特性
NSQL专为SQL生成任务设计,DuckDB-NSQL基于Llama-2 7B模型,在通用SQL查询数据集和DuckDB文本到SQL对数据集上进行训练,能够生成任何有效的DuckDB SQL语句,包括官方DuckDB扩展的语句。
📦 安装指南
文档未提供安装步骤,暂不展示。
💻 使用示例
基础用法
import torch
from transformers import AutoTokenizer, AutoModelForCausalLM
tokenizer = AutoTokenizer.from_pretrained("motherduckdb/DuckDB-NSQL-7B-v0.1")
model = AutoModelForCausalLM.from_pretrained("motherduckdb/DuckDB-NSQL-7B-v0.1", torch_dtype=torch.bfloat16)
text = """### Instruction:
Your task is to generate valid duckdb SQL to answer the following question.
### Input:
### Question:
create a new table called tmp from test.csv
### Response (use duckdb shorthand if possible):
"""
input_ids = tokenizer(text, return_tensors="pt").input_ids
generated_ids = model.generate(input_ids, max_length=500)
print(tokenizer.decode(generated_ids[0], skip_special_tokens=True))
高级用法
import torch
from transformers import AutoTokenizer, AutoModelForCausalLM
tokenizer = AutoTokenizer.from_pretrained("motherduckdb/DuckDB-NSQL-7B-v0.1")
model = AutoModelForCausalLM.from_pretrained("motherduckdb/DuckDB-NSQL-7B-v0.1", torch_dtype=torch.bfloat16)
text = """### Instruction:
Your task is to generate valid duckdb SQL to answer the following question, given a duckdb database schema.
### Input:
Here is the database schema that the SQL query will run on:
CREATE TABLE taxi (
VendorID bigint,
tpep_pickup_datetime timestamp,
tpep_dropoff_datetime timestamp,
passenger_count double,
trip_distance double,
fare_amount double,
extra double,
tip_amount double,
tolls_amount double,
improvement_surcharge double,
total_amount double,
);
### Question:
get all columns ending with _amount from taxi table
### Response (use duckdb shorthand if possible):"""
input_ids = tokenizer(text, return_tensors="pt").input_ids
generated_ids = model.generate(input_ids, max_length=500)
print(tokenizer.decode(generated_ids[0], skip_special_tokens=True))
import torch
from transformers import AutoTokenizer, AutoModelForCausalLM
tokenizer = AutoTokenizer.from_pretrained("motherduckdb/DuckDB-NSQL-7B-v0.1")
model = AutoModelForCausalLM.from_pretrained("motherduckdb/DuckDB-NSQL-7B-v0.1", torch_dtype=torch.bfloat16)
text = """### Instruction:
Your task is to generate valid duckdb SQL to answer the following question, given a duckdb database schema.
### Input:
Here is the database schema that the SQL query will run on:
CREATE TABLE rideshare (
hvfhs_license_num varchar,
dispatching_base_num varchar,
originating_base_num varchar,
request_datetime timestamp,
on_scene_datetime timestamp,
pickup_datetime timestamp,
dropoff_datetime timestamp,
trip_miles double,
trip_time bigint,
);
### Question:
get longest trip in december 2022
### Response (use duckdb shorthand if possible):
"""
input_ids = tokenizer(text, return_tensors="pt").input_ids
generated_ids = model.generate(input_ids, max_length=500)
print(tokenizer.decode(generated_ids[0], skip_special_tokens=True))
如需更多信息(例如,在本地数据库上运行),请在 此仓库 中查找示例。
📚 详细文档
模型描述
NSQL是专门为SQL生成任务设计的自回归开源大型基础模型(FMs)家族。本项目引入了NSQL的新成员DuckDB-NSQL,它基于Meta的原始 Llama-2 7B模型,在通用SQL查询数据集上进行预训练,然后在由DuckDB文本到SQL对组成的数据集上进行微调。
训练数据
评估数据
我们在一个包含75个文本到SQL对的DuckDB特定基准上评估模型。该基准可在 此处 获取。
训练过程
DuckDB-NSQL使用交叉熵损失进行训练,以最大化序列输入的似然性。在文本到SQL对上进行微调时,我们仅计算对中SQL部分的损失。模型使用80GB A100 GPU进行训练,利用数据和模型并行性。我们进行了10个epoch的微调。
预期用途和局限性
该模型专为根据给定的表模式和自然语言提示进行文本到SQL生成任务而设计。模型在以下定义的提示格式和输出下效果最佳。与现有的文本到SQL模型不同,SQL生成不限于 SELECT
语句,而是可以生成任何有效的DuckDB SQL语句,包括官方DuckDB扩展的语句。
🔧 技术细节
DuckDB-NSQL使用交叉熵损失进行训练,在文本到SQL对上进行微调时仅计算SQL部分的损失,利用80GB A100 GPU进行数据和模型并行训练,共进行10个epoch的微调。
📄 许可证
本项目使用Llama2许可证。