模型简介
模型特点
模型能力
使用案例
🚀 用于NL2SQL的微调版Phi - 2模型
本模型是Phi - 2针对自然语言转SQL(NL2SQL)用例在b - mc2/sql - create - context
数据集上的微调版本,可将自然语言问题转化为SQL查询语句。但需注意,此模型仅包含适配器,你需要加载Phi2模型并添加这些适配器。
🚀 快速开始
本模型适用于将自然语言问题结合相关数据库模式,转化为能回答该问题的SQL查询语句的场景。但输入的上下文需在2048个标记以内,且输出为PostgreSQL格式的SQL语句。
下游使用示例
# 在GPU机器上使用
from peft import PeftModel
from transformers import AutoModelForCausalLM, AutoTokenizer
model_name = "microsoft/phi-2"
model = AutoModelForCausalLM.from_pretrained(
model_name,
trust_remote_code=True,
device_map="auto",
torch_dtype=torch.float16
)
peftmodel = PeftModel.from_pretrained(model, "pavankumarbalijepalli/phi2-nl2sql-lora")
peftmodel = peftmodel.merge_and_unload()
tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True)
tokenizer.pad_token = tokenizer.eos_token
inputs = tokenizer(prompt, return_tensors="pt", padding=True, truncation=True)
inputs.to('cuda')
outputs = peftmodel.generate(**inputs, max_length=1000)
text = tokenizer.batch_decode(outputs,skip_special_tokens=True)[0]
print(text)
✨ 主要特性
- 性能优越:在保留数据集上,该模型在推理时间和准确性方面优于
defog/sqlcoder - 7b - 2
。在有限内存的CPU机器上对.gguf
模型进行评估,Phi - 2和SQLCoder的平均推理时间分别为24秒和41秒,即Phi - 2平均快41%。基于执行成功率,微调后的Phi - 2比SQLCoder高29%。 - 尺寸优势:由于模型尺寸较小,推理速度更快。
📦 安装指南
文档未提及安装步骤,暂不提供。
💻 使用示例
基础用法
以下是使用该模型进行自然语言转SQL查询的示例:
-- 任务:生成一个SQL查询来回答以下问题:`有多少个部门的负责人年龄超过56岁?`
-- 数据库模式:查询将在具有以下模式的数据库上运行:
-- CREATE TABLE head (age INTEGER)
-- 答案:根据数据库模式,以下是回答该问题的SQL查询
-- 此处应根据模型输出补充具体SQL语句
-- 任务:生成一个SQL查询来回答以下问题:`有多少个部门由未提及的负责人领导?`
-- 数据库模式:查询将在具有以下模式的数据库上运行:
-- CREATE TABLE management (department_id VARCHAR);
-- CREATE TABLE department (department_id VARCHAR)
-- 答案:根据数据库模式,以下是回答该问题的SQL查询
-- 此处应根据模型输出补充具体SQL语句
📚 详细文档
模型详情
模型描述
本模型在microsoft/phi - 2
的基础上,使用b - mc2/sql - create - context
数据集进行了微调。在保留数据集的推理时间和准确性方面,表现优于defog/sqlcoder - 7b - 2
。评估是在有限内存的CPU机器上对.gguf
模型进行的。Phi - 2和SQLCoder的平均推理时间分别为24秒和41秒,平均快41%,这得益于其较小的尺寸。基于执行成功率,微调后的Phi - 2比SQLCoder高29%。不过,其主要缺点是上下文窗口为2048个标记,需要额外的输入工程来获取结果。
- 开发者:pavankumarbalijepalli
- 模型类型:CASUAL_LM
- 语言(NLP):英语、SQL
- 许可证:MIT
- 微调基础模型:[microsoft/phi - 2](https://huggingface.co/microsoft/phi - 2)
模型来源
- 仓库:[pavankumarbalijepalli/pr - phi2 - vs - defog](https://github.com/pavankumarbalijepalli/pr - phi2 - vs - defog/)
- 论文:[BITS项目论文](https://github.com/pavankumarbalijepalli/pr - phi2 - vs - defog/blob/main/2021SC04115%20-%20Final.pdf)
使用场景
适用场景
模型适用于将自然语言问题结合相关数据库模式,转化为能回答该问题的SQL查询语句的场景。但输入的上下文需在2048个标记以内,且输出为PostgreSQL格式的SQL语句。
不适用场景
- 生成意外代码:虽然模型可以将自然语言翻译成SQL查询,但可能不足以处理复杂逻辑或边缘情况。使用它生成关键生产代码可能会导致数据库中的错误或意外行为。
- 安全风险:NL2SQL模型可能容易受到对抗性攻击,恶意用户输入旨在欺骗模型生成具有安全漏洞的SQL代码,如SQL注入攻击。
- 超出训练范围:该模型是在特定的SQL语言(如PostgreSQL)上训练的。将其用于不同的SQL语法(如MS SQL Server)可能会导致不准确或无意义的SQL查询。
偏差、风险和限制
偏差和公平性
模型的训练数据可能包含偏差,这些偏差会反映在生成的SQL查询中。这可能导致不公平或歧视性的结果,特别是如果数据没有经过仔细筛选。
可解释性
NL2SQL模型通常是“黑盒”模型,很难理解它们如何将自然语言转换为SQL。这种缺乏可解释性使得调试错误或确保生成的查询安全有效变得具有挑战性。
不能完全替代人类专业知识
虽然模型可以自动化一些SQL查询生成任务,但它不应完全替代人类数据库管理员或分析师。理解数据模式和数据库设计对于编写高效安全的SQL查询至关重要。
建议
用户(直接用户和下游用户)应了解模型的风险、偏差和局限性。
训练详情
训练数据
@misc{b-mc2_2023_sql-create-context,
title = {sql-create-context Dataset},
author = {b-mc2},
year = {2023},
url = {https://huggingface.co/datasets/b-mc2/sql-create-context},
note = {This dataset was created by modifying data from the following sources: \cite{zhongSeq2SQL2017, yu2018spider}.},
}
评估
测试数据、因素和指标
测试数据
使用b - mc2/sql - create - context
数据集,并将数据分为训练集和测试集。保留数据集用于测试模型。
因素
通过每个问题的表数量、连接数量、分组依据和每个答案的子查询数量来计算问题的复杂度。这种复杂度用于通过围绕复杂度进行分层拆分来准备测试数据。
指标
- 执行成功率:该指标用于确定生成的查询是否可以无错误执行。为此,在内存中建立一个sqllite3连接,并使用上下文创建虚拟表。然后执行预测的SQL。这可以检查生成的查询语法是否正确,以及模型是否虚构了任何新列。
- 推理时间:该指标用于确定哪个模型能在更短的时间内提供结果。结合执行成功率,可以衡量模型的效率。
结果
- 执行成功率:微调后的Phi - 2比SQLCoder - 7b - 2的成功率高29%。
- 推理时间:微调后的Phi - 2比SQLCoder - 7b - 2的推理速度平均快41%。
总结
- 减少推理时间和内存占用:微调后的Phi - 2模型与DeFog SQLCoder相比,推理时间和内存使用有所减少。这归因于Phi - 2的较小尺寸和微调期间采用的量化技术的效率。这一发现意味着NL2SQL模型可以部署在笔记本电脑甚至手机等低功率设备上,有可能使更多用户能够使用这项技术。
- 在简单和中等难度查询上具有竞争力:微调后的Phi - 2在简单、中等和困难难度查询的准确性方面与DeFog SQLCoder取得了相当的性能。这表明Phi - 2尽管尺寸较小,但可以有效地处理很大一部分现实世界的NL2SQL任务,特别是对于更简单的查询。
- 复杂查询存在挑战:虽然Phi - 2在较简单的查询上表现良好,但在处理复杂查询时遇到了挑战,与DeFog SQLCoder相比,执行成功率有所下降。这凸显了模型大小和复杂度之间的权衡,表明在处理高度复杂的任务时,可能仍然需要更大的模型。
- 有进一步改进的潜力:本研究中采用的微调过程可以通过探索不同的超参数配置,并可能研究基于适配器的方法等替代微调技术来进一步优化。这种优化有可能在保持模型效率的同时,提高其在复杂查询上的性能。
环境影响
可以使用Lacoste等人(2019)提出的机器学习影响计算器来估算碳排放。
属性 | 详情 |
---|---|
硬件类型 | A100 PCIE 40GB X1 |
使用时长 | 18小时 |
云服务提供商 | Google Cloud |
计算区域 | 亚洲东部1区 |
碳排放 | 2.52千克二氧化碳当量 |
引用
文档未提供具体引用信息,暂不展示。
⚠️ 重要提示 模型在处理复杂逻辑或边缘情况时可能不够健壮,使用它生成关键生产代码可能导致数据库出现错误或意外行为。同时,NL2SQL模型可能容易受到对抗性攻击,如SQL注入攻击。此外,该模型是在特定SQL语言(如PostgreSQL)上训练的,用于不同SQL语法(如MS SQL Server)可能会导致不准确或无意义的SQL查询。
💡 使用建议 用户(直接用户和下游用户)应了解模型的风险、偏差和局限性。在使用模型时,要结合对数据模式和数据库设计的理解,避免完全依赖模型而忽视人类专业知识。



