微调Qwen2.5做NL2sql(一):常用数据源及使用解析

微调Qwen2.5做NL2sql(一):常用数据源及使用解析

一、NL2SQL技术概述

  1. 定义与需求背景:NL2SQL(Natural Language to SQL),也叫text2SQL,旨在将自然语言查询转换为可执行SQL语句,满足人们通过自然语言操作数据库的需求,应用于智能客服、报表生成、信息检索等场景。由于单纯的RAG技术无法让大模型生成SQL与数据库交互,因此需要大模型微调。

    • 该任务是在已知数据库的表名、列名其从属关系(这些统称为数据库的Schema)的前提下,将人类的自然语言问句(Question)转化为对应的数据库查询SQL语句。在这里插入图片描述
      在这里插入图片描述
  2. 大模型微调必备条件:进行大模型微调需要具备三个关键要素,即有合适的大模型、对应领域的专业数据以及相关的资源或框架。

二、寻找数据源

  1. 国外数据源 - Hugging Face:可登录Hugging Face网站,在搜索框输入“text2SQL”等相关领域数据名称进行搜索。以“bird_text_to_sql”为例,点击进入后,通过数据名片可查看简单数据样例,点击数据块能看到数据量(如1.53k),并可选择直接下载,支持pandas等方式。
    中文镜像源网址:https://hf-mirror.com/
    在这里插入图片描述3. 国内数据源 - ModelScope:与Hugging Face用法类似,在ModelScope社区点击数据集,输入“text2SQL”,它会优先展示中文相关数据集。部分数据集可能没有数据卡片,需下载后查看详细信息,下载方式包括直接点击下载到本地电脑,或通过git、SDK等方式选择数据集下载 。
    在这里插入图片描述

  2. 国内数据源 - 其他社区:摩乐社区也可作为数据源参考,其数据量相对较小,但可作为补充数据源,社区汉化较好。

  3. 大学与企业合作的数据源
    在这里插入图片描述

    • 英文系列 - WikiSQL:属于单领域数据源,包含80654个自然语言问题和77840个SQL语句,SQL语句形式简单,不包含排序等复杂操作。数据在GitHub上,需下载“data.tar.bz2”压缩包,解压后包含“dev.db”“dev.jsonl”“dev.tables.jsonl”等文件。
      • “dev.jsonl”中的“phase”表示数据收集阶段,“question”代表输入问题,“sql”包含查询相关信息,通过“column_index”“operator_index”“condition”组成的三元组来拆解SQL查询,“table_id”用于关联表格,“dev.tables.jsonl”中的“header”表示表结构,“rows”表示数据行。
文件名文件类型作用举例
dev.db数据库文件存储实际数据内容和表结构等信息,用于执行生成的SQL语句来验证查询结果假设我们有一个电商业务场景,dev.db里存储了商品信息表、订单表等数据。当模型根据自然语言“查询2024年12月的订单数量”生成SQL语句后,可在该数据库中执行,查看查询结果是否符合预期
dev.jsonlJSON Lines文件每行是独立JSON对象,记录自然语言问题及对应的SQL查询信息等,为模型训练提供映射样本比如其中一行JSON对象为{"phase": 1, "question": "哪些商品的价格大于500元?", "sql": {"conds": [[2, 1, "500"]], "sel": 1, "agg": 0}, "table_id": "1-12345"},这里question是自然语言问题,sql里的conds表示查询条件,selagg分别是所选列索引和聚合运算符索引
dev.tables.jsonlJSON Lines文件存储数据库中各表详细结构信息,帮助将dev.jsonlcondscolumn_index与实际列名和属性对应dev.jsonl中有个查询条件的column_index为1,在dev.tables.jsonl中找到对应表的结构信息,发现索引1对应的列名为product_price,数据类型为float,这样就能明确是基于“商品价格”列进行条件判断

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 英文系列 - Spider:由耶鲁大学提出,是多数据库、多表、单轮查询的Text to SQL数据集,也是业界公认难度较大的跨领域评测榜单,相应的SQL语句中包含了JOIN、GROUP BY、HAVING、嵌套等诸多SQL高级语法内容。同时,该数据集也根据相应SQL语句的复杂程度划分了不同的难度等级。分为简单、中等、困难、特别困难四个等级。数据集中的“db_id”代表数据库,“query”是查询语句,“query_toks”和“question_toks”是经过分词和编码处理后的文本表示,“query_toks_no_value”用于减少数值对模型训练和解析的干扰,“from”表示获取数据的表,“table_units”指定具体表,“conds”是查询条件,“select”表示选择的列或表达式,其复杂的数据嵌套结构需结合文档确定具体含义。
    在这里插入图片描述

在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述

  • 英文系列 - SParC:用于复杂、跨域、上下文相关(多轮)语义解析和Text-to-SQL任务,由4298个连贯问题序列组成,包含12k +个自然语言问题到SQL标注的Question - SQL对,通过用户与138个领域的200个复杂数据库交互获得。
  • 英文系列 - CoSQL:跨域数据库CoSQL,由30k +轮次和10k +带注释的SQL查询组成。
  • 英文系列 - KaggleDBQA:由华盛顿大学与微软联合创建,是真实数据集,包括跨8个数据库的272个示例,每个数据库平均有2.25个表,以真实世界数据源、自然问题创作环境和丰富领域知识的数据库文档闻名,有相关统计数据(如8.7% WHERE子句、73.5% VAL等)。
  • 中文系列 - CHASE:由西安交通大学和微软等提出,是首个跨领域、多轮Text-to-SQL中文数据集,包含5459个多轮问题组成的列表和17940个<query, SQL>二元组。
  • 中文系列 - BIRD-SQL:由香港大学和阿里巴巴提出,是大规模跨域数据集,包含超过12751个独特的问题SQL、95个大数据库,总大小为33.4GB,涵盖37个专业领域。其Mini-Dev版本从11个不同数据库中编译了500个高质量text2SQL对,支持MySQL和PostgreSQL格式。
  • 中文系列 - DuSQL:百度针对跨域文本到SQL任务提出的大规模、实用中文数据集,包含200个数据库、813个表和23797个Question-SQL对。
  • 中文系列 - TableQA:包含64891个问题和6000多个表的20311个唯一SQL查询。

三、数据处理与理解

  1. 数据格式差异:不同数据源的数据格式和结构差异较大,但关键在于理解数据集中与查询问题和期望SQL输出相关的部分。如WikiSQL和Spider数据集,虽然结构复杂,但核心是获取用户查询问题和对应的SQL输出,用于大模型微调。
  2. 数据验证:优质数据集不仅可用于模型训练,还可用于验证。像Spider数据集,通过其数据库文件(如“dev.db”)可验证生成的SQL结果是否正确,且很多数据集基于真实数据标记,具有较高价值。
### 使用 Swift 对 Qwen 2.5:14b 模型进行微调 目前,Qwen 2.5:14b 是基于 Python 生态系统开发的大规模预训练模型,在 Swift 中直接对其进行微调存在技术挑战。然而,可以采用混合编程的方式实现这目标。 #### 方法概述 为了在 Swift 应用程序中利用 Qwen 2.5:14b 进行微调,推荐的方法是在服务器端使用 Python 实现微调逻辑,并通过 RESTful API 或 gRPC 接口与客户端的 Swift 应用交互[^1]。 #### 构建环境准备 - **Python 环境设置**: 安装必要的依赖库如 `transformers` 和 `torch` 来加载并处理 Qwen 模型。 - **Swift 端集成**: 利用 URLSession 或 Alamofire 处理网络请求,连接至部署好的 Python 微服务接口。 ```swift import Foundation // 假设已有个可用的服务地址用于发送数据给 Python 后端 let urlString = "https://your-python-service.com/api/tune" if let url = URL(string: urlString) { var request = URLRequest(url: url) request.httpMethod = "POST" // 准备要传递的数据结构体 struct TuningRequest: Codable { let datasetPath: String let epochs: Int let batchSize: Int } do { let tuningData = try JSONEncoder().encode(TuningRequest(datasetPath: "/path/to/dataset", epochs: 3, batchSize: 8)) request.httpBody = tuningData // 发送 HTTP 请求... } catch { print("Failed to encode the tuning parameters.") } } ``` 此方法允许开发者专注于各自擅长的语言领域——即让 Python 负责复杂的机器学习任务,而 Swift 只需负责构建优秀的用户体验界面以及简单的通信工作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值