随着LLM的出现,NL2SQL的性能得到了极大的提升,这显著降低了访问关系数据库的障碍,并支持各种商业应用。
本文提供了一个全面的NL2SQL技术综述,覆盖了整个生命周期,包括模型、数据、评估和错误分析四个方面。
全文概述:NL2SQL任务的全生命周期
NL2SQL问题与背景
对NL2SQL任务进行了定义,并介绍了人类执行NL2SQL任务的工作流程与关键挑战,并描述了基于语言模型发展的NL2SQL解决方案的演变。
NL2SQL任务定义
- 问题表述:NL2SQL,也称为Text-to-SQL,是将自然语言查询转换为可在关系数据库上执行的SQL查询的任务。目标是生成准确反映用户意图的SQL,确保执行后得到适当的结果。
在大型语言模型时代NL2SQL模块的概述
人类工作流程
-
理解自然语言查询:首先理解用户的意图,识别NL中的关键部分,例如实体或属性、时间上下文和特定条件。
-
链接数据库架构和检索内容:基于对NL的理解,检查数据库架构和内容,识别生成SQL所需的相关表、列和单元格值。
-
将NL意图转换为SQL:最后,根据对NL和数据库概念的理解,编写相应的SQL查询。
挑战
-
自然语言的不确定性:自然语言可能因歧义和不明确性而含有不确定性,例如词义歧义、句法歧义、信息不足和用户错误。
-
数据库的复杂性和数据的不完整性:数据库架构的复杂性和数据的庞大体量对NL2SQL任务的有效执行构成挑战,包括表之间的关系复杂性、列名的相似性、特定领域的架构变化以及大数据量和数据的不完整性。
-
从自然语言到SQL的转换:NL2SQL任务与高级编程语言到低级机器语言的编译不同,因为输入的NL和输出的SQL查询之间通常存在一对多的映射。
NL2SQL任务及其挑战的示例
NL2SQL解决方案的演变
-
基于规则的方法:早期研究主要集中在使用预定义规则或语义解析器来理解自然语言查询并将其转换为SQL查询。
-
基于神经网络的方法:为了解决基于规则的方法的局限性,研究者开始利用神经网络来解决NL2SQL任务,例如使用序列到序列模型或图神经网络。
-
基于预训练语言模型的方法:随着BERT和T5等预训练语言模型的出现,基于PLM的NL2SQL方法在多个基准数据集上取得了竞争性的性能。
-
大型语言模型时代:随着LLMs的出现,NL2SQL技术取得了显著进展,LLMs具有卓越的语言理解和新出现的能力,例如使用提示来执行NL2SQL任务。
从语言模型的角度来看NL2SQL解决方案的演变
NL2SQL的预处理策略
专注于在执行NL2SQL翻译过程中的预处理步骤,这些步骤对于识别相关表格和列(即架构链接)以及检索生成SQL所需的适当数据库内容或单元格值至关重要。此外,预处理通过添加特定领域的知识来丰富上下文,提高查询上下文的理解,并纠正错误以防止它们传播。
架构链接(Schema Linking)
-
目的:确定与给定自然语言查询相关的表格和列,确保在有限的输入内准确映射和处理关键信息,提高NL2SQL任务的性能。
-
方法分类:
-
基于字符串匹配的方法:使用相似性度量来识别NL文本和数据库架构元素(如表名和列名)之间的相关映射。
-
基于神经网络的方法:使用深度神经网络来匹配数据库架构和自然语言查询,有效解析语言和数据库结构之间的复杂语义关系。
-
基于上下文学习的方法:利用大型语言模型(如GPT-4)的强推理能力直接从NL查询中识别和链接相关的数据库架构组件。
数据库内容检索(Database Content Retrieval)
-
目的:通过文本搜索算法和数据库索引高效检索单元格值。
-
策略分类:
-
基于字符串匹配的方法:通过字符串匹配查找与给定NL查询相关的单元格值序列。
-
基于神经网络的方法:神经网络通过多层非线性变换学习复杂数据格式和语义表示,以捕获语义特征,缓解同义词问题。
-
索引策略:索引是提高数据库内容检索效率的关键方法,允许更快地访问相关单元格值。
额外信息获取(Additional Information Acquisition)
-
作用:额外信息(例如领域知识)在提高NL2SQL模型理解NL查询、执行架构链接和NL2SQL翻译方面发挥着重要作用。
-
应用:研究人员经常将额外信息作为文本输入(提示)的一部分,连同少数示例一起输入,以提高模型的理解和翻译质量。
NL2SQL翻译方法
深入探讨了使用语言模型进行NL2SQL翻译的方法。这些方法包括编码策略、解码策略和特定于任务的提示策略,以及如何利用中间表示来优化NL2SQL翻译过程。
基于设计选择的NL2SQL翻译方法分类
编码策略(Encoding Strategy)
编码策略涉及将自然语言和数据库架构转换为结构化格式,以便语言模型有效利用。这一转换对于将非结构化和半结构化数据转换为可用于生成SQL查询的格式至关重要。
-
顺序编码:将NL和数据库架构视为一系列标记。
-
基于图的编码:利用数据库的固有关系结构和输入数据的复杂相互依赖性。
-
独立编码:将NL的不同部分(如子句和条件)分别编码,然后在后期组合以生成最终的SQL。
编码策略的概述
解码策略(Decoding Strategy)
解码策略在NL2SQL翻译中扮演关键角色,负责将编码器生成的表示转换为目标SQL查询。
-
贪婪搜索解码:选择当前概率最高的标记作为输出。
-
束搜索解码:保留多个候选序列,探索更大的搜索空间。
-
约束感知增量解码:在解码过程中逐步添加约束,确保生成的SQL查询在语法上正确。
解码策略的概述
特定于任务的提示策略(Task-specific Prompt Strategy)
在大型语言模型时代,提示工程可以发挥LLMs的能力,并已被广泛应用于自然语言处理。
-
思维链:推动模型顺序思考和推理任务目标。
-
分解:将最终任务分解为多个子任务,分别进行推理。
中间表示(Intermediate Representation)
中间表示(IR)是NL查询和SQL查询之间的桥梁,它是一个结构化但灵活的语法,捕捉NL查询的基本组成部分和关系,而无需SQL的严格语法规则。
-
SQL-like 语法语言:将用户查询转换为中间的SQL-like表达式。
-
SQL-like 草图结构:构建草图规则,将NL映射到SQL-like框架中。
中间表示的示例
NL2SQL的后处理策略
描述了在NL2SQL模型生成SQL之后,如何通过后处理步骤来优化和改进生成的SQL查询,以更好地满足用户的期望。
SQL校正策略(SQL Correction Strategies)
-
目的:修正由模型生成的SQL中的语法错误。
-
方法:例如DIN-SQL提出的自我校正模块,通过不同的提示指导模型识别和纠正错误。
输出一致性(Output Consistency)
-
目的:提高模型输出的一致性。
-
方法:例如C3-SQL提出的自我一致性方法,通过采样多个不同的推理路径并选择最一致的答案来提高输出质量。
执行引导策略(Execution-Guided Strategies)
-
目的:使用SQL查询的执行结果来指导后续处理。
-
方法:如ZeroNL2SQL通过可执行性检查过程不断生成SQL查询,并反馈错误信息给LLMs以实现可执行查询。
N-best重排策略(N-best Rerankers Strategies)
-
目的:对原始模型生成的前n个结果进行重排序,通常使用更大的模型或结合额外的知识源。
-
方法:如Bertrand-dr使用BERT模型作为重排器来改进多个NL2SQL模型。
NL2SQL基准测试
详细介绍了用于评估NL2SQL系统性能的各种数据集,分析了它们的特点,并探讨了这些基准测试如何随着时间的推移而发展。数据集从早期的单一领域、简单SQL查询发展到跨领域、多轮对话和多语言挑战的复杂数据集。
NL2SQL基准测试的时间线
NL2SQL基准测试的统计数据
NL2SQL评估与错误分析
讨论了评估NL2SQL系统性能的方法和工具,并提出了一个错误分类体系来组织和分析NL2SQL过程中的SQL错误。
NL2SQL之360全景的概述
-
错误分类体系设计为两级:
-
错误定位(Error Localization):确定SQL中发生错误的具体部分。
-
错误原因(Cause of Error):理解模型在生成SQL时出错的原因。
根据分类统计的Din-SQL错误
推荐NL2SQL模块的数据驱动路线图和决策流程
https://arxiv.org/pdf/2408.05109``A Survey of NL2SQL with Large Language Models:Where are we, and where are we going?``NL2SQL Handbook: https://github.com/HKUSTDial/NL2SQL_Handbook
如何学习大模型 AI ?
由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。
但是具体到个人,只能说是:
“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
第一阶段(10天):初阶应用
该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。
- 大模型 AI 能干什么?
- 大模型是怎样获得「智能」的?
- 用好 AI 的核心心法
- 大模型应用业务架构
- 大模型应用技术架构
- 代码示例:向 GPT-3.5 灌入新知识
- 提示工程的意义和核心思想
- Prompt 典型构成
- 指令调优方法论
- 思维链和思维树
- Prompt 攻击和防范
- …
第二阶段(30天):高阶应用
该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。
- 为什么要做 RAG
- 搭建一个简单的 ChatPDF
- 检索的基础概念
- 什么是向量表示(Embeddings)
- 向量数据库与向量检索
- 基于向量检索的 RAG
- 搭建 RAG 系统的扩展知识
- 混合检索与 RAG-Fusion 简介
- 向量模型本地部署
- …
第三阶段(30天):模型训练
恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。
到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?
- 为什么要做 RAG
- 什么是模型
- 什么是模型训练
- 求解器 & 损失函数简介
- 小实验2:手写一个简单的神经网络并训练它
- 什么是训练/预训练/微调/轻量化微调
- Transformer结构简介
- 轻量化微调
- 实验数据集的构建
- …
第四阶段(20天):商业闭环
对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。
- 硬件选型
- 带你了解全球大模型
- 使用国产大模型服务
- 搭建 OpenAI 代理
- 热身:基于阿里云 PAI 部署 Stable Diffusion
- 在本地计算机运行大模型
- 大模型的私有化部署
- 基于 vLLM 部署大模型
- 案例:如何优雅地在阿里云私有部署开源大模型
- 部署一套开源 LLM 项目
- 内容安全
- 互联网信息服务算法备案
- …
学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。
如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。