自然语言转SQL,一个微调ChatGPT3.5的实例(下)--模型微调及模型性能

本文介绍了如何使用GPT-3.5-turbo进行Spider数据集的微调,对比了微调后的模型与DIN-SQL+GPT-4的性能,发现微调在保持准确性的同时大幅降低成本和提升速度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

提交训练集进行微调

一旦我们创建了JSONL文件(可以在这里ipfs_here找到一个小样本),下一步是使用以下命令将创建的文件上传到OpenAI:

openai.api_key = os.getenv("OPENAI_API_KEY")
print(openai.File.create(file=open("spider-finetuning.jsonl", "rb"),purpose='fine-tune'))

上传文件后,可以使用以下命令检查上传的状态:


print(openai.File.retrieve(id="file-id"))
# 或者
print(openai.File.list())

结果应该类似于:

{
"object": "file",
"id": "file-id",
"purpose": "fine-tune",
"filename": "file",
"bytes": 71699079,
"created_at": 1693343752,
"status": "uploaded",
"status_details": null
}

当状态变为已处理时(类似于下面的示例),您可以将文件用于微调:

{
"object": "file",
"id": "file-id",
"purpose": "fine-tune",
"filename": "file",
"bytes": 71699079,
"created_at": 1693343752,
"status": "processed",
"status_details": null
}

现在,我们准备开始微调作业。可以使用以下python代码创建一个微调作业:


print(openai.FineTuningJob.create(
training_file="file-id",
model="gpt-3.5-turbo",
suffix = "spider",
hyperparameters = {
"n_epochs": #number_of_epochs,
})
)

微调过程的持续时间将根据微调数据集的大小而有所不同。微调有一个最大令牌限制,设置为50000000个令牌。因此,在使用Spider数据集时,我们将样本数量从7000个减少到5750个,并进行总共2个时期的微调。

您可以使用以下命令检查微调作业的状态:

print(openai.FineTuningJob.retrieve(id="ftjob-id"))

结果应类似于:

{
"object": "fine_tuning.job",
"id": "ftjob-id",
"model": "gpt-3.5-turbo-0613",
"created_at": 1693346245,
"finished_at": 1693353313,
"fine_tuned_model": "ft:gpt-3.5-turbo-0613:dataherald:spider:id",
"organization_id": "org-id",
"result_files": [
"file-id"
],
"status": "succeeded",
"validation_file": null,
"training_file": "file-id",
"hyperparameters": {
"n_epochs": 2
},
"trained_tokens": 44722020
}

模型性能

DIN-SQL是一种用于自然语言到SQL转换的模型,它在处理Spider数据集上取得了最新的研究成果。DIN-SQL代表"Denoising-inductive SQL generation",该模型结合了去噪自编码器和归纳式学习的方法,使用GPT-4作为生成器模型来生成SQL查询语句。DIN-SQL使用了各种高级提示技术,包括少量示例提示、思路链提示和分解提示,以提高其性能和准确度。该模型具有较高的准确性和效率,但在成本和处理时间方面可能较高。

我们将微调模型的性能与未经微调的GPT3.5-Turbo和DIN-SQL + GPT-4(Spider的当前最先进方法)进行了基准测试,以获得零-shot性能。

微调的G-3.5-Turbo的性能与之前的方法相比进的提示技术,包括少量提示、思维链提示和分解提示)保持一致,这是当前最先进的方法。

关键是,与DIN-SQL + GPT-4方法相比,微调模型显著降低了成本和处理时间。下表提供了每个来自Spider基准的问题的不同模型之间的大致成本和速度。

同模型每个问题的成本和速度(来自Spider基准)

如上所示,与DIN-SQL与GPT-4相比,微调的GPT-3.5-Turbo模型的成本降低了30倍,速度提高了12倍

结论

通过投入时间和金钱来构建训练数据集,可以在准确性上与最先进的方法相匹配,同时速度提高12倍,成本降低30倍。如果,针对具体的业务做针对性的微调准确性应该可以进一步提高。

### 关于NL2SQL的大语言模型 #### NL2SQL大语言模型简介 自然语言到结构化查询(NL2SQL)是指将自然语言换成可以被数据库理解并执行的SQL语句的技术。随着大型语言模型(LLM)的发展,这一领域取得了显著进步。LLM具备强大的语言处理能力,能够更精准地解析复杂的自然语言指令,并将其化为对应的SQL命令[^3]。 #### LLM在NL2SQL中的应用特点 - **增强的理解力**:相比传统基于模板的方法,LLM能更好地捕捉用户意图背后的细微差别,从而提高翻译准确性。 - **灵活性增加**:通过调整输入给定的提示词或上下文环境,可以使同一个模型适应不同类型的数据库架构以及多样化的查询需求。 - **自动化程度加深**:借助预训练好的大规模参数量级网络权重,在少量样本条件下即可完成特定场景下的快速适配与优化工作,降低了开发成本及时效性风险。 #### 实现方式概述 为了使LLM有效地服务于NL2SQL任务,通常会经历以下几个方面的工作: 1. 数据准备阶段收集大量高质量的人工编写的问答对作为监督信号用于后续微调过程; 2. 构建适合目标领域的Prompt Engineering方案以指导模型生成合理的输出形式; 3. 对通用版LLM实施针对性迁移学习策略,比如采用few-shot learning机制仅需少数实例就能让其掌握新的映射关系[^2]。 4. 集成外部工具如向量数据库辅助检索相似案例加速推理速度的同时提升整体性能表现[^1]。 ```python def generate_sql_query(prompt, model): """ 使用指定的prompt和model来生成SQL查询 参数: prompt (str): 自然语言描述的问题 model : 已经加载好权重的大型语言模型 返回: str: 换后的SQL查询字符串 """ sql_output = model.generate(text_inputs=prompt) return post_process(sql_output) # 假设有一个已经训练完毕的模型instance 'llm_model' natural_language_input = "查找年龄大于等于18岁的学生姓名" generated_sql = generate_sql_query(natural_language_input, llm_model) print(generated_sql) ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值