首页 > 数据库 >LLM驱动的NL2SQL方法论:现状、难点、优化

LLM驱动的NL2SQL方法论:现状、难点、优化

时间:2024-09-13 12:20:15浏览次数:11  
标签:难点 Prompt 示例 模型 NL2SQL LLM SQL

阅读原文

NL2SQL在大型语言模型(LLM)的支持下得到了广泛应用,为了对基于LLM的NL2SQL解决方案进行系统化研究,我们需要全面理解和实践,包括Prompt工程、指令微调(SFT)、Agent、RAG等技术方案。为深入研究NL2SQL提供一些参考和指导。

1. 什么是NL2SQL

简言之,Natural Language to SQL (NL2SQL) 是指将用户的自然语句转为可以执行的 SQL 语句。
nl2sql

2. 基于LLM的NL2SQL现状

Spider和BIRD是比较受欢迎的两个NL2SQL的benchmark。Spider包含了1万多个自然语言的问题和相关的SQL语句,以及用来运行这些SQL的200多个数据库,横跨了100多个应用领域;BIRD相对于Spider更专注于学术研究,BIRD则更加考虑了真实应用中的数据库中信息的复杂性,且考虑了模型生成的SQL运行效率。BIRD也包含了约12000多个自然语言与SQL,涵盖了约37个专业领域的90多个数据库。

可以看到在Spider和BIRD上,GPT是远比开源模型效果要好的;在Spider榜单上,开源模型没有超过80分的,且在BIRD榜单上GPT也都没有超过60分。因此实现一个NL2SQL的模型简单,但是在实际应用时它的表现却没有想象的那样好,当前AI模型输出SQL的准确性还远无法达到人类工程师的输出精度。

spider1.0

bird

3. 难点简析

应用难:真实企业应用数据库的结构更复杂、分析逻辑更复杂、准确性和相应性能要求高。深度学习的AI模型预测本身就有置信度的问题,无法确保绝对可靠性,这一点在大语言模型依然存在,尤其是在NL2SQL任务上,自然语言表达本身具有歧义性,而SQL是一种精确编程语言。因此在实际应用中,可能会出现无法理解,或者错误理解的情况。比如,“谁是这个月最厉害的销售”,那么AI是理解成订单数量最多,还是订单金额最大呢?输出的不确定性也是目前限制大模型在关键企业系统应用最大的障碍。

diffcult1

测评难:评估NL2SQL模型输出正确性很困难,既不能用SQL的执行结果来判断,也不能直接用SQL语句进行对比来判断。

  1. 用SQL执行结果来判断:在database 1上,Predicted1的结果和正确SQL的结果一模一样,但实际上Predicted1的SQL是错误的。
  2. 如果直接对比SQL语句:由于Predicted2和正确的SQL不完全一致,但其实Predicted2的SQL和正确的SQL是等价的。

diffcult2

那么大语言模型在应对这些问题时是否有很好的解决方案呢?遗憾的是,从当前的一些模型测试结果看,让大语言模型能够在这些场景下完全胜任,达到人类工程师的精度是不现实的。但是我们可以在几个方面考虑其优化,以实现在部分场景下的优先可用:

  1. 提示词工程优化
  2. 大模型指令微调
  3. Agent/RAG增强

4. NL2SQL通用优化方案

4.1 提示词工程优化

随着LLM的发展,使用LLM进行NL2SQL已成为一种新的范式。在这一过程中,如何利用提示工程来发掘LLM的NL2SQL能力显得尤为重要。

在利用LLM完成NL2SQL这一任务时,提示工程的关键在于将自然语言问题与必要的数据库信息转化为适用于LLM的自然语言序列输入,即问题表示。同时,当允许输入一些样例以利用LLM的in-context learning能力时,还需要考虑如何选择样例以及如何将这些样例有机地组织到输入序列中。

prompt_opt

在zero-shot场景中有五花八门的Prompt模版,这里展示现有文献中四个最具代表性的。此外,再展示一个在 Alpaca中使用的Prompt模板,因为它在监督式微调中非常受欢迎。下表总结了这五种方法:

问题表示INSRIFKLLMsEM
B S P BS_P BSP​xx---
T R P TR_P TRP​xxCode-Davinci-00269.0
O D P OD_P ODP​xGPT-3.5-Turbo, GPT-470.1
C R P CR_P CRP​xCode-Davinci-002, GPT-3.5-Turbo75.6
A S P AS_P ASP​xx--

EX:SQL执行准确率、INS:指令(任务描述)、RI:规则信息(指导性语句,比如“仅输出SQL语句,无需解释”)、FK:外键(数据库的外键信息)

基本提示

基本提示(Basic Prompt)是一种简单的Prompt模板,它由表模式、以 Q: 为前缀的自然语言问题、以及提示LLM生成SQL的响应前缀 A:SELECT 组成。之所以命名为基本提示,是因为它并未包含任何指令内容。

basic

Table table_name1, columns = [column1, column2, ...]
...
Table table_name2, columns = [column1, column2, ...]
Q: The question
A: SELECT...(目标SQL)

文本表示提示

文本表示法提示(Text Representation Prompt)相比于基本提示,它在提示的开头添加了指导LLM的指令。在零样本场景中,它能在 Spider-dev 上实现了69.0%的执行准确率。

text_prop

The Instruction(e.g. Given the following database schema: )
Table table_name1, columns = [column1, column2, ...]
...
Table table_name2, columns = [column1, column2, ...]
Answer the following: The question...
SELECT...(目标SQL)

OpenAI范式提示

OpenAI示范提示(OpenAI Demostration Prompt)首次在OpenAI的官方NL2SQL演示中使用,它由指令、表模式和问题组成,其中所有信息都用“#”进行注释。与文本表示提示相比,OpenAI示范提示中的指令更具体,而且还有一条规则约束,“仅完成sqlite SQL查询,无需解释”。

openai_prop

### The Instruction
# SQLite SQL tables, with their properties:
# 
# table_name1(column1, column2, ...)
# ...
# table_name2(column1, column2, ...)
#
### The question...
SELECT...(目标SQL)

代码表示提示

代码表示提示(Code Representation Prompt)是一种基于SQL语法实现NL2SQL任务的方式。具体来说,它直接将表创建语句“CREATE TABLE …”放到Prompt中。相较于其他的问题表示方法,代码表示提示的独特之处在于,它能够提供创建数据库所需的全面信息,例如列名、列类型、主键/外键等。在这样的表示方式下, Code-Davinci-002能够正确预测约75.6%的SQL。

code_prop

/* Given the following database schema: */
CREATE TABLE table_name1(
    column1 type primary key,
    column2 type, 
    foreign key(column3) references table_name2(xxx)
);

CREATE TABLE table_name2(
    column1 thpe primary key, 
    column2 type,
    foreign key(column3) references table_name1(xxx)
);

/* Answer the following: The question...
SELECT...(目标SQL)

Alpace指令微调提示

Alpace指令微调提示(Alpaca SFT Prompt)是一种用于监督微调的提示方式,它指导LLM按照指示并根据Markdown格式上下文来完成任务。

alpace_prop

The description of the NL2SQL Task

### Instruction:
Write a sql to answer the question "The question"

### Input:
table_name1(column1, column2, ...)
...
table_name2(column1, column2, ...)

### Response:
SELECT...(目标SQL)

以上问题表示方法使大型语言模型(LLM)能够通过zero-shot学习直接输出所需的SQL。然而,在NL2SQL任务中,LLM通过上下文学习可以表现更出色,而这只需要在问题表示中提供了少量示例即可。

In-Context 学习

在In-Context 学习中,NL2SQL 涉及两个子任务:选择最有帮助的示例、将这些选定的示例组织到问题表示里面去,分别称作“示例选择(Example Selection)”和“示例组织(Example Organization)”。

示例选择

示例选择(Example Selection)在先前的研究中主要有以下几种策略:

  • 随机选择(Random):此策略随机采样 k k k个可用候选的示例 Q Q Q,现有的工作已经将其作为示例选择的基准方案。
  • 问题相似性选择(Question Similarity Selection):此方案选择与目标问题 q q q最相似的 k k k个示例。具体来说,使用预训练的语言模型(比如BERT等)将示例问题 Q Q Q和目标问题 q q q嵌入到同一个向量空间。然后,计算每个<示例问题, 目标问题>对应用预定义的距离度量,如欧氏距离或负余弦相似度。最后,利用 k k k近邻(KNN)算法从 Q Q Q中选择 k k k个与目标问题 q q q相近的示例。
  • 遮蔽问题相似性选择(Masked Question Similarity Selection):对于跨领域NL2SQL,遮蔽问题相似性选择通过使用掩码标记(MASK)替换所有问题中的表名、列名和值,从而消除领域的特定信息,然后使用最近邻算法计算其嵌入向量的相似性。
  • 查询相似性选择(Query Similarity Selection):此方案不是计算文本问题之间相似度,而是选择与目标SQL查询最相似的

    标签:难点,Prompt,示例,模型,NL2SQL,LLM,SQL
    From: https://blog.csdn.net/pydaxing_pdx/article/details/142134910

相关文章

  • 线性代数重难点&题目
    抽象性矩阵求特征值例题1例题2知识点1相似对角化的2个充要和充分条件知识点2&例题3抽象型二次型的正定问题知识点3实对称矩阵的相似对角化例题4相似对角化反求参数或矩阵知识点4相似对角化与相似之间的关系知识点5二次型的可能考点知识点6&例题5等价......
  • C语言学习--重难点易错点
    define易错;只是全局替换在输入数据时候,遇到以下情况时,认为该数据结束①遇空格,或按回车,或跳格键;②指定宽度结束,如%3d;③遇非法输入类型转换inti=5;floatf=i/2;df:floatf=(float)i/2;注意上面的区别C语言只有整型,实型(浮点精度值),字符型,无逻辑型——bool......
  • 高数重难点知识
    常见反例的题目:反例需要积累原函数存在定理及拓展:定积分的结论4个常见不等式有意思的极限十字相乘法的进阶:反常积分的审敛法:123不好找等价函数,可以比较---》趋近于无穷的速度12的总结复杂函数的真题-例题:瑕积分+无穷积分反常积分易错点......
  • AI大语言模型LLM学习-RAG技术及代码实现
    系列文章1.AI大语言模型LLM学习-入门篇2.AI大语言模型LLM学习-Token及流式响应3.AI大语言模型LLM学习-WebAPI搭建4.AI大语言模型LLM学习-基于Vue3的AI问答页面5.AI大语言模型LLM学习-语义检索(RAG前导篇)前言大语言模型(LLM)已经取得了显著的成功,尽管它们仍然面......
  • E2LLM:长上下文理解与推理的新纪元
    在当今的人工智能研究中,长上下文理解已成为大型语言模型(LLMs)不可或缺的一部分,特别是在多轮对话、代码生成和文档摘要等任务中。随着人们对LLMs能力的期望不断提高,如何有效处理长文本并保持高效性、性能与兼容性之间的平衡,成为了一个备受关注的挑战。为了解决这一“无法实现......
  • pediatrics_llm_qa:儿科问诊小模型
    项目简介本项目开源了基于儿科医疗指令微调的问诊模型:pediatrics_llm_qa(GitHub-jiangnanboy/pediatrics_llm_qa),目前模型的主要功能如下:智能问诊:问诊后给出诊断结果和建议。更新[2024/09/11]开源了基于Qwen2-1.5B-instructlora指令微调的儿科问诊模型开源模型......
  • 大模型备案重难点最详细说明【评估测试题+附件】
    2024年3月1日,我国通过了《生成式人工智能服务安全基本要求》(以下简称《AIGC安全要求》),这是目前我国第一部有关AIGC服务安全性方面的技术性指导文件,对语料安全、模型安全、安全措施、词库/题库要求、安全评估等方面提出了具体规范和要求。(一)适用主体《AIGC安全要求》的适用主......
  • AGI时代,程序员想学习大语言模型(LLM),应该从哪里开始?
    一、怎样学好,并应用大模型AGI(ArtificialGeneralIntelligence,通用人工智能)时代,懂AI、懂编程、懂业务的超级个体,会是AGI时代最重要的人。为了成为这样的超级个体,我们需要在哪几个方向发力呢?那就是:原理、实践和认知。不懂原理就不会举一反三,走不了太远。不懂实践就只能纸上......
  • tanuki.py学习资料汇总 - 轻松构建更快更便宜的LLM应用
    tanuki.py简介tanuki.py是一个用于轻松构建LLM驱动应用的Python库,它能让LLM应用随着使用变得更快更便宜。其主要特点包括:易于集成-只需几秒钟即可将LLM增强功能添加到任何工作流程中类型感知-确保LLM输出符合函数的类型约束,避免意外问题对齐输出-通过简单的断言语......
  • 大模型备案重难点最详细说明【评估测试题+附件】
    2024年3月1日,我国通过了《生成式人工智能服务安全基本要求》(以下简称《AIGC安全要求》),这是目前我国第一部有关AIGC服务安全性方面的技术性指导文件,对语料安全、模型安全、安全措施、词库/题库要求、安全评估等方面提出了具体规范和要求。(一)适用主体《AIGC安全要求》的适用主......