🚀 NSQL-Llama-2-7B
NSQL 是专门为 SQL 生成任务设计的自回归开源大型基础模型(FMs)家族。本仓库引入了 NSQL 家族的新成员 NSQL-Llama-2-7B,它基于 Meta 原始的 Llama-2 7B 模型,先在通用 SQL 查询数据集上进行预训练,然后在由文本到 SQL 对组成的数据集上进行微调。
🚀 快速开始
模型推理参数
推理时的参数设置如下:
inference:
parameters:
do_sample: false
max_length: 200
使用示例
以下是一些使用该模型进行文本到 SQL 生成的示例:
基础用法
import torch
from transformers import AutoTokenizer, AutoModelForCausalLM
tokenizer = AutoTokenizer.from_pretrained("NumbersStation/nsql-llama-2-7B")
model = AutoModelForCausalLM.from_pretrained("NumbersStation/nsql-llama-2-7B", torch_dtype=torch.bfloat16)
text = """CREATE TABLE stadium (
stadium_id number,
location text,
name text,
capacity number,
highest number,
lowest number,
average number
)
CREATE TABLE singer (
singer_id number,
name text,
country text,
song_name text,
song_release_year text,
age number,
is_male others
)
CREATE TABLE concert (
concert_id number,
concert_name text,
theme text,
stadium_id text,
year text
)
CREATE TABLE singer_in_concert (
concert_id number,
singer_id text
)
-- Using valid SQLite, answer the following questions for the tables provided above.
-- What is the maximum, the average, and the minimum capacity of stadiums ?
SELECT"""
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("NumbersStation/nsql-llama-2-7B")
model = AutoModelForCausalLM.from_pretrained("NumbersStation/nsql-llama-2-7B", torch_dtype=torch.bfloat16)
text = """CREATE TABLE stadium (
stadium_id number,
location text,
name text,
capacity number,
)
-- Using valid SQLite, answer the following questions for the tables provided above.
-- how many stadiums in total?
SELECT"""
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("NumbersStation/nsql-llama-2-7B")
model = AutoModelForCausalLM.from_pretrained("NumbersStation/nsql-llama-2-7B", torch_dtype=torch.bfloat16)
text = """CREATE TABLE work_orders (
ID NUMBER,
CREATED_AT TEXT,
COST FLOAT,
INVOICE_AMOUNT FLOAT,
IS_DUE BOOLEAN,
IS_OPEN BOOLEAN,
IS_OVERDUE BOOLEAN,
COUNTRY_NAME TEXT,
)
-- Using valid SQLite, answer the following questions for the tables provided above.
-- how many work orders are open?
SELECT"""
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))
如需更多信息(例如在本地数据库上运行),请在 此仓库 中查找示例。
✨ 主要特性
- 专为文本到 SQL 生成任务设计,能根据给定的表结构和自然语言提示生成 SQL 查询。
- 基于强大的 Llama-2 7B 模型,经过预训练和微调,在 SQL 生成任务上有较好的表现。
📦 训练相关信息
训练数据
属性 |
详情 |
通用 SQL 查询数据 |
来自 The Stack 的 SQL 子集,包含 100 万个训练样本。 |
标注的文本到 SQL 对 |
来自网络上 20 多个公共来源的标准数据集。我们预留了 Spider 和 GeoQuery 数据集用于评估。 |
评估数据
我们在两个文本到 SQL 基准测试上评估模型:Spider 和 GeoQuery。
训练过程
NSQL 使用交叉熵损失进行训练,以最大化序列输入的似然性。在对文本到 SQL 对进行微调时,我们仅计算对中 SQL 部分的损失。模型使用 80GB A100 GPU 进行训练,利用数据并行和模型并行技术。预训练进行了 3 个 epoch,微调进行了 10 个 epoch。
📄 许可证
本模型使用 Llama 2 许可证。
⚠️ 重要提示
本模型专为文本到 SQL 生成任务设计,在给定表结构和自然语言提示的情况下工作效果最佳,尤其适合输出 SELECT
查询。