许可证: mit
数据集:
- b-mc2/sql-create-context
语言:
- en
评估指标:
- accuracy
- code_eval
库名称: transformers
流水线标签: text-generation
标签:
- peft
- nl2sql
示例:
- 文本: "### 任务\n生成一个SQL查询来回答以下问题:\n
部门主管中有多少人的年龄大于56岁?
\n\n### 数据库模式\n查询将在具有以下模式的数据库上运行:\nCREATE TABLE head (age INTEGER)\n\n### 答案\n根据数据库模式,以下是回答部门主管中有多少人的年龄大于56岁?
的SQL查询:\n```sql"
示例标题: "单表"
- 文本: "### 任务\n生成一个SQL查询来回答以下问题:\n
有多少个部门由未提及的主管领导?
\n\n### 数据库模式\n查询将在具有以下模式的数据库上运行:\nCREATE TABLE management (department_id VARCHAR);\nCREATE TABLE department (department_id VARCHAR)\n\n### 答案\n根据数据库模式,以下是回答有多少个部门由未提及的主管领导?
的SQL查询:\n```sql"
示例标题: "双表"
感谢您的耐心等待!💜💜
模型ID的模型卡
这是一个针对NL2SQL用例在b-mc2/sql-create-context
数据集上微调的Phi-2版本。
此模型仅包含适配器!您需要加载Phi2模型并添加这些适配器
模型详情
模型描述
此模型在microsoft/phi-2
上使用b-mc2/sql-create-context
进行了微调。在保留数据集上,其推理时间和准确性优于defog/sqlcoder-7b-2
。评估是在CPU机器上使用有限RAM的.gguf
模型进行的。Phi-2和SQLCoder的平均推理时间分别为24秒和41秒,即平均快41%。这是由于Phi-2的较小体积。基于执行成功率,微调后的Phi-2比SQLCoder高出29%。主要缺点是2048个token的上下文窗口,需要额外的输入工程才能获得结果。
- 开发者: pavankumarbalijepalli
- 模型类型: 因果语言模型
- 语言(NLP): 英语、SQL
- 许可证: MIT
- 微调自模型: microsoft/phi-2
模型来源
用途
该模型适用于以下情况:您有一个自然语言问题、与问题相关的数据库模式,需要检索一个回答问题的SQL查询。上下文应少于2048个token。输出将以PostgreSQL格式生成。
下游用途
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)
超出范围的用途
生成非预期代码:
虽然模型可以将自然语言转换为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数据集},
author = {b-mc2},
year = {2023},
url = {https://huggingface.co/datasets/b-mc2/sql-create-context},
note = {此数据集是通过修改以下来源的数据创建的:\cite{zhongSeq2SQL2017, yu2018spider}。},
}
评估
测试数据、因素和指标
测试数据
使用b-mc2/sql-create-context并将数据分为训练和测试数据集。保留数据集用于测试模型。
因素
问题的复杂性通过每个问题的表数量、连接数量、分组依据和子查询数量来计算。此复杂性用于通过围绕复杂性分层拆分来准备测试数据。
指标
- 执行成功率: 此指标用于确定生成的查询是否可执行且不引发任何错误。为此,在内存中建立sqllite3连接,并使用上下文创建虚拟表。然后执行预测的SQL。这检查生成的查询是否语法正确,以及模型是否幻觉出任何新列。
- 推理时间: 此指标用于确定哪个模型在更短的时间内提供结果。结合执行成功率,可以衡量模型的效率。
结果
- 执行成功率: 微调后的Phi-2比SQLCoder-7b-2高出29%的成功率。
- 推理时间: 微调后的Phi-2比SQLCoder-7b-2快41%。
摘要
-
减少推理时间和内存占用: 与DeFog SQLCoder相比,微调后的Phi-2模型在推理时间和内存使用方面有所减少。这归因于Phi-2的较小体积和微调期间采用的量化技术的效率。这一发现表明,NL2SQL模型可以部署在低功耗设备(如笔记本电脑甚至手机)上,从而可能使更广泛的用户能够访问该技术。
-
在简单和中等查询上的竞争性能: 在简单、中等和困难难度查询的准确性方面,微调后的Phi-2与DeFog SQLCoder表现相当。这表明,尽管Phi-2体积较小,但它可以有效地处理大部分现实世界的NL2SQL任务,尤其是较简单的查询。
-
复杂查询的挑战: 虽然Phi-2在简单查询上表现良好,但在复杂查询上遇到了挑战,与DeFog SQLCoder相比,执行成功率有所下降。这突显了模型体积和复杂性之间的权衡,表明对于高度复杂的任务,可能仍需要更大的模型。
-
进一步改进的潜力: 本研究采用的微调过程可以通过探索不同的超参数配置和潜在研究替代的微调技术(如基于适配器的方法)来进一步优化。这种优化有可能在保持效率的同时提高模型在复杂查询上的性能。
环境影响
碳排放量可以使用Lacoste等人(2019)中提出的机器学习影响计算器进行估算。
- 硬件类型: A100 PCIE 40GB X1
- 使用小时数: 18小时
- 云提供商: Google Cloud
- 计算区域: Asia-East-1
- 碳排放量: 2.52千克当量CO2
引用