小白也会SQL:大模型改变交互方式(上)

2024-05-16 10:12

本文主要是介绍小白也会SQL:大模型改变交互方式(上),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在人工智能与自然语言处理交汇点,有一种技术正悄然改变与数据交互的方式——将日常语言转化为精准SQL查询。这一“text-to-sql”转换任务,使非专业人士也能轻松驾驭复杂的数据库操作,极大地拓宽了数据应用的边界。

然而,现有前沿方法往往依赖于封闭源代码的大型语言模型,它们虽然功能强大,却伴随着模型透明度缺失、数据隐私风险增大以及高昂推理成本等难题。有没有既开放、高效又安全的替代方案呢?鲁班模锤今天带来的论文《CodeS: Towards Building Open-source Language Models for Text-to-SQL》正在尝试破局。

课题背景

Text-to-sql的任务是指将用户的自然语言的提问(文本)转化成能在数据库上执行的结构化查询查询语言(SQL)。下图为对某一 “银行金融”数据库提出自然语言的问题,再转化为数据库查询语言(SQL)的过程。这个过程使得不熟悉SQL或数据库结构的用户也能够使用自然语言与数据库交互。

依赖部分现有的大模型也能实施,例如闭源的大语言模型 DIN-SQL(基于GPT-4)、SQL-PaLM(基于PaLM-2)或是C3(基于GPT-3.5)。尽管这些模型在Text-to-sql性能上表现出色,但也可能存在以下问题:

  1. 闭源模型隐藏了落地的具体架构以及训练/推理细节,阻碍了针对特定应用的持续开发。(这里突然想起来最近有位大佬说某大厂坚持闭源,回头另文点评

  2. 通过API调用这些云端模型可能会带来数据隐私风险,因为必须将数据发送给模型提供商。

  3. 大多数闭源模型具有大量参数(例如基于GPT-3.5则有175B个参数),导致显著的推理开销,通常反映在调用API的花销上

综上所述,研究者推出了专为SQL生成而设计的开源语言模型CodeS。其特点是体量小,与ChatGPT和GPT-4比小10-100倍,而性能上却可以比肩SOTA。

知识补充:SOTA是“State of the Art”的缩写,这个术语通常用于描述某个领域或技术中当前最先进的成果或最高水平的性能。

基座模型StarCoder

StarCoder 和 StarCoderBase 是针对代码的大语言模型 (代码 LLM),模型基于 GitHub 上的许可数据训练而得,训练数据中包括 80 多种编程语言、Git 提交、GitHub 问题和 Jupyter notebook。与 LLaMA 类似,基于 1 万亿个词元训练了一个约15B参数的模型。此外还针对一个35B词元的Python 数据集对 StarCoderBase 模型进行了微调,从而获得了一个称之为 StarCoder 的新模型。当然这个系列有1B/3B/7B/15B四种规模的基座模型。

CodeS结构拆解

首先A阶段为了提高现有语言模型的SQL生成和自然语言理解能力,研究人员采集了新语料库,该语料库由来自不同来源的11GB SQL相关数据、6GB NL-to-code(自然语言转代码)数据和4.5 GB NL相关数据集组成。基于StarCoder,采用该语料库进行增量预训练,并获得预训练的语言模型CodeS(StarCoder按照上文而言拥有1B、3B、7B和15B 4种规模)。

紧接着来到了B阶段,研究人员提出一种全面的数据库提示构建方法来生成高质量的数据库提示。该策略主要包含模式过滤器和值检索器。模式过滤器是根据给定的问题消除不相关的表和列。值检索器经过定制可以提取与问题相符的潜在有用的数据库值。 除了表名和列名之外,还合并了各种元数据,包括数据类型、注释、代表性列值以及主键和外键的信息。 如此为文本到SQL的转化提供更加真实而且丰富的上下文。

这个时候来到了C阶段,毕竟不同的客户拥有不同的业务数据库,但是又无法提供足够多的适配样本。因此研究人员提出了一种双向数据增强方法,为新应用场景自动化的生成大量新语料(提问和对应的SQL语句)。 那么如何操作呢?在文本-SQL方向的语料方面,从现实的业务场景入手需要人工标记一些数据项,再交由GPT-3.5模拟生成进行语料库扩展。而在SQL-文本方向的语料方面则需要研究人员从现有的文本-SQL的基准中提炼模板,然后用新的业务数据库填充模板,然后使用 GPT-3.5 来自动的精炼语料。 这种双向策略创建了最小人力标注投入,但是能够构建一个强大和好用的训练集。

若有着丰富的训练数据,CodeS出现的D阶段就可以执行,利用SFT进行模型训练(后续会解释,这里可以理解为对于大模型的部分参数进行微调)。

相反,若训练数据有限,那么只能使用不改变模型参数的In-Context学习(阶段E),只能提供一些文本到sql的演示,在不微调模型的情况下利用大模型的学习和模仿能力快速给出答案。

在这两种模式种,Incremental pre-traning(阶段A)和Database prompt construction(阶段B)都是其基石,而在SFT策略模式中还需要Bi-directional augmentation for new domain adaptation(阶段C)的辅助。下篇文章将开启具体组件的详细解读。

这篇关于小白也会SQL:大模型改变交互方式(上)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/994616

相关文章

Linux下MySQL数据库定时备份脚本与Crontab配置教学

《Linux下MySQL数据库定时备份脚本与Crontab配置教学》在生产环境中,数据库是核心资产之一,定期备份数据库可以有效防止意外数据丢失,本文将分享一份MySQL定时备份脚本,并讲解如何通过cr... 目录备份脚本详解脚本功能说明授权与可执行权限使用 Crontab 定时执行编辑 Crontab添加定

MySQL中On duplicate key update的实现示例

《MySQL中Onduplicatekeyupdate的实现示例》ONDUPLICATEKEYUPDATE是一种MySQL的语法,它在插入新数据时,如果遇到唯一键冲突,则会执行更新操作,而不是抛... 目录1/ ON DUPLICATE KEY UPDATE的简介2/ ON DUPLICATE KEY UP

MySQL分库分表的实践示例

《MySQL分库分表的实践示例》MySQL分库分表适用于数据量大或并发压力高的场景,核心技术包括水平/垂直分片和分库,需应对分布式事务、跨库查询等挑战,通过中间件和解决方案实现,最佳实践为合理策略、备... 目录一、分库分表的触发条件1.1 数据量阈值1.2 并发压力二、分库分表的核心技术模块2.1 水平分

Python与MySQL实现数据库实时同步的详细步骤

《Python与MySQL实现数据库实时同步的详细步骤》在日常开发中,数据同步是一项常见的需求,本篇文章将使用Python和MySQL来实现数据库实时同步,我们将围绕数据变更捕获、数据处理和数据写入这... 目录前言摘要概述:数据同步方案1. 基本思路2. mysql Binlog 简介实现步骤与代码示例1

使用shardingsphere实现mysql数据库分片方式

《使用shardingsphere实现mysql数据库分片方式》本文介绍如何使用ShardingSphere-JDBC在SpringBoot中实现MySQL水平分库,涵盖分片策略、路由算法及零侵入配置... 目录一、ShardingSphere 简介1.1 对比1.2 核心概念1.3 Sharding-Sp

MySQL 表空却 ibd 文件过大的问题及解决方法

《MySQL表空却ibd文件过大的问题及解决方法》本文给大家介绍MySQL表空却ibd文件过大的问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考... 目录一、问题背景:表空却 “吃满” 磁盘的怪事二、问题复现:一步步编程还原异常场景1. 准备测试源表与数据

Mac电脑如何通过 IntelliJ IDEA 远程连接 MySQL

《Mac电脑如何通过IntelliJIDEA远程连接MySQL》本文详解Mac通过IntelliJIDEA远程连接MySQL的步骤,本文通过图文并茂的形式给大家介绍的非常详细,感兴趣的朋友跟... 目录MAC电脑通过 IntelliJ IDEA 远程连接 mysql 的详细教程一、前缀条件确认二、打开 ID

MySQL的配置文件详解及实例代码

《MySQL的配置文件详解及实例代码》MySQL的配置文件是服务器运行的重要组成部分,用于设置服务器操作的各种参数,下面:本文主要介绍MySQL配置文件的相关资料,文中通过代码介绍的非常详细,需要... 目录前言一、配置文件结构1.[mysqld]2.[client]3.[mysql]4.[mysqldum

MySQL中查询和展示LONGBLOB类型数据的技巧总结

《MySQL中查询和展示LONGBLOB类型数据的技巧总结》在MySQL中LONGBLOB是一种二进制大对象(BLOB)数据类型,用于存储大量的二进制数据,:本文主要介绍MySQL中查询和展示LO... 目录前言1. 查询 LONGBLOB 数据的大小2. 查询并展示 LONGBLOB 数据2.1 转换为十

Go语言连接MySQL数据库执行基本的增删改查

《Go语言连接MySQL数据库执行基本的增删改查》在后端开发中,MySQL是最常用的关系型数据库之一,本文主要为大家详细介绍了如何使用Go连接MySQL数据库并执行基本的增删改查吧... 目录Go语言连接mysql数据库准备工作安装 MySQL 驱动代码实现运行结果注意事项Go语言执行基本的增删改查准备工作