【LLM之NL2SQL】DAIL-SQL论文阅读笔记

研究背景

该研究旨在提供一个全面、系统的评估框架,用于评估基于大型语言模型(LLM)的Text-to-SQL技术。特别强调了不同的提示工程策略的有效性和效率,以及开源LLM的可行性。研究的重点是评估在零样本和少样本场景下的不同问题表示方式,样本选择和组织策略的效果。

研究目标

研究目标是提供Text-to-SQL提示工程的系统性和深入理解,通过实证评估先前研究中的几种策略,并探索开源LLM在不同提示工程策略下的性能表现。

相关工作

相关工作部分详细讨论了基于LLM的Text-to-SQL的各种方法,包括五种问题表示方法、两种提示组件、四种样本选择和三种样本组织策略。

五种问题表示方法

  • 基础提示 (Basic Prompt, BS P):只包括表结构和自然语言问题,问题部分以“Q:”开头,回应以“A: SELECT”开头,促使LLM生成SQL。
    在这里插入图片描述
  • 文本表示提示 (Text Representation Prompt, TR P):包括指令、表结构和问题,用自然语言表示,相较于基础提示,它在提示开始时添加了指导性的语句。
    在这里插入图片描述
  • OpenAI演示提示 (OpenAI Demonstration Prompt, OD P):在官方演示中使用,包括指令、表结构和问题,所有信息都用井号“#”注释。
    在这里插入图片描述
  • 代码表示提示 (Code Representation Prompt, CR P):以SQL语法呈现Text-to-SQL任务,直接展示“CREATE TABLE” SQL,提示中包含自然语言问题。
    在这里插入图片描述
  • Alpaca SFT提示 (Alpaca SFT Prompt, AS P):专为监督微调设计的提示,遵循指令并根据输入上下文完成任务。
    在这里插入图片描述

两种提示组件
指令 (Instruction, INS):如“编写一个SQL来回答问题”,用于描述任务。
规则含义 (Rule Implication, RI):如“仅完成sqlite SQL查询并且不需要解释”,用于引导LLM的生成过程。

四种样本选择策略
随机选择 (Random):从可用候选项中随机抽取样本。
问题相似性选择 (Question Similarity Selection, QTS S):选择与目标问题最相似的样本。
掩码问题相似性选择 (Masked Question Similarity Selection, MQS S):在计算相似性前,用掩码替换所有问题中的表名、列名和值。
目标SQL相似性选择 (Query Similarity Selection, QRS S):选择与目标SQL查询最相似的样本。

两种样本组织策略
完整信息组织 (Full-Information Organization, FIO):示例完整地提供问题和对应的SQL,帮助模型理解和学习两者之间的映射关系。(输入包括数据库结构信息、相似sql QA对)
在这里插入图片描述
仅SQL组织 (SQL-Only Organization, SOO):此策略仅使用SQL语句作为样本,不包括任何自然语言问题描述。它强调直接学习SQL语句的构造,适合在模型已经具备一定理解基础的情况下,专注于提升SQL生成的准确性。
在这里插入图片描述

方法论

问题表示 (Question Representation)

DAIL-SQL 使用Code Representation (CR P) 作为问题表示方法。这种表示方式包括数据库的完整信息,如主键和外键,这些信息对于预测如“JOIN”子句等SQL结构特别有用。CR P在预训练的编码语料库上进行训练,因此LLMs能够更好地理解并处理这种格式的提示。在这里插入图片描述

样本选择 (Example Selection)

DAIL-SQL采用了一种名为DAIL Selection的样本选择策略,这种策略不仅考虑问题的相似性,也考虑查询的相似性。这种选择方法首先在目标问题和候选样本问题中屏蔽掉特定领域的词汇,然后根据问题和查询的欧几里得距离来对候选样本进行排序,并选择那些与目标查询有高相似度的样本。

样本组织 (Example Organization)

为了保留问题与SQL查询之间的映射信息并提高令牌效率,DAIL-SQL 提出了一种新的样本组织策略,名为DAIL Organization。这种策略在保留问题-SQL映射的同时,通过移除令牌成本较高的数据库模式信息来减少样本的令牌长度。
在这里插入图片描述

实验

实验设计

实验设计包括在Spider和BIRD数据集上评估DAIL-SQL的效果,测试了不同的提示策略和LLM模型。使用执行准确性(Execution Accuracy,EX)和精确集合匹配(Exact Set Match,ESM)作为主要评估指标。

实验结论

  • DAIL-SQL在Spider和BIRD数据集上均达到了新的最佳性能,特别是在执行准确性方面,超过了现有的所有基线模型和方法。
  • 在问题表示方面,Code Representation (CR P) 表现出最好的效果,显示了结构化提示对提升模型理解和处理能力的重要性。
  • DAIL样本选择策略在精确度和效率上均优于随机选择,表明针对性的样本筛选和优化是提升性能的关键。
  • DAIL组织策略通过精确地控制信息展示,有效减少了不必要的令牌消耗,同时保持了高查询准确性。

参考资料

  • 论文
  • 代码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/726610.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ICC2如何写DCG需要的floorplan信息

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧? 拾陆楼知识星球入口 DCG需要哪些floorplan信息呢? 1)fixed属性的port和mem / ip / io 2)boundary信息 3)电源域形状 前两条都可以写到def里,电源域需要用脚本处理,这里分享一下脚本。 set_fixed_objects [ge…

# 消息中间件 RocketMQ 高级功能和源码分析(七)

消息中间件 RocketMQ 高级功能和源码分析(七) 一、 消息中间件 RocketMQ 源码分析:消息存储核心类介绍 1、消息存储在 store 模块中。消息存储核心类 DefaultMessageStore.java 2、消息存储核心类介绍 private final MessageStoreConfig me…

react18 实现具名插槽

效果预览 技术要点 当父组件给子组件传递的 JSX 超过一个标签时,子组件接收到的 children 是一个数组,通过解析数组中各 JSX 的属性 slot ,即可实现具名插槽的分发! 代码实现 Father.jsx import Child from "./Child";…

DNF安卓分离仅是开始:游戏厂商积极布局自有渠道,市场变革在即

毫无征兆,DNF手游今天突然宣布从各大安卓平台下架。 《地下城与勇士:起源》运营团队于6月19日发布声明,指出因合约到期,游戏将不再上架部分安卓平台的应用商店。然而,这一事件并非完全无迹可循。 早在2021年初,华为游…

ROM以及ROM与RAM对比

1.ROM ROM最原始的定义是“只读存储器”,一旦写入原始信息则不能更改。所以ROM通常用来存放固定不变的程序、常数和汉字字库,甚至用于操作系统的固化。它与随机存储器可共同作为主存的一部分,统一构成主存的地址域。 现在已经发展出了很多R…

商超便利店收银系统源码推荐

细节决定成败,无论是做什么事情都要注重细节,让我们来看看关于商超便利店陈列的“细节”有哪些需要注意的地方。 首先要注意商品不要摆太高,放在适当位置即可! 商超便利店内,销量最佳的物品摆放位置依次为与顾客视线…

ICC2如何写出floorplan信息

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧? 拾陆楼知识星球入口 1)write_def 不用-exclude 的话rows_tracks / vias /blockages / routing_rules信息都会写出去,即便用了-include {macro ports}也不行,所以不介意这些东西的话可以用以下两种种def方式去写f…

RabbitMQ的简单使用 —— Python篇

(一)RabbitMQ的简介 RabbitMq 是实现了高级消息队列协议(AMQP)的开源消息代理中间件。消息队列是一种应用程序对应用程序的通行方式,应用程序通过写消息,将消息传递于队列,由另一应用程序读取 完…

nacos 配置修改.代码实时刷新

再类上用 RefreshScope 更新Value(“${uniqlo.privacy.url:https://wsurl.cc/yourls-api.php}”) private String shortLinkGenerateUrl;的数据可以实时更新 2.再配置类上次用 ConfigurationProperties(prefix “test.privacy”) 和nacos的配置一直 Data Component Configu…

redis高可用-哨兵机制

一:背景 上一节我们已经实现了redis的主从同步,从而实现服务的流量分摊和数据高可用,但是出现故障以后,需要人工手动接入,手动切换主从,来实现故障转移。这是比较麻烦的,毕竟人不能实时盯着服务…

深度学习算法informer(时序预测)(四)(Decoder)

一、DecoderLayer架构如图(不改变输入形状) 二、Decoder整体 包括两部分 1. 多层DecoderLayer 2. 层归一化 代码如下 class DecoderLayer(nn.Module):def __init__(self, self_attention, cross_attention, d_model, d_ffNone,dropout0.1, activati…

java溯本求源之基础(二十五)之--ArrayList常用方法介绍

1. 介绍 1.1简介 ArrayList ArrayList 是 Java 集合框架中的一个类,位于 java.util 包中。它实现了 List 接口,提供了一个动态数组的功能。与普通数组不同,ArrayList 可以在需要时自动调整其容量,以容纳更多的元素。这使得它非常…

《模拟联合国2.9—团队协作》

感谢上海财经大学持续的邀请,今天在阶梯教室举办的《模拟联合国2.0—团队协作》沙盘课程圆满结束。尽管场地的限制带来了一定的挑战,但得益于系统思考中“结构影响行为”的原则,我得以在不同场景中巧妙设计课程结构,极大地促进了大…

【SEMI-e ·国际半导体深圳展】| 06月26-28日唯创知音语音芯片供应商 邀您来观展

世界聚焦半导体,产业规模空前!一场高端产业研学盛会即将如约而至。 SEMI-e 第六届2024国际半导体展深圳站,2024年06月26-28日将在深圳国际会展中心(宝安)开展,展会展出面积60000平方米,汇聚全国…

Python | Leetcode Python题解之第155题最小栈

题目: 题解: class MinStack:def __init__(self):self.stack []self.min_stack [math.inf]def push(self, x: int) -> None:self.stack.append(x)self.min_stack.append(min(x, self.min_stack[-1]))def pop(self) -> None:self.stack.pop()sel…

Java+ffmpeg 合并两个mp4文件

使用ffmpeg测试命令 ffmpeg -i "E:\Monitor\video_20240617_10.mp4" -i "E:\Monitor\video1_20240617_10.mp4" -filter_complex "[0:v][0:a][1:v][1:a]concatn2:v1:a1[v][a]" -map "[v]" -map "[a]" -c:v libx264 -c:a…

5点小技巧教你如何做一个成功的亚马逊VC卖家

亚马逊Vendor Central(VC)是卖家与亚马逊直接合作的重要平台,为卖家提供了更多的销售机会和更稳定的销售渠道。那么,如何在这个平台上脱颖而出,成为一个成功的亚马逊VC卖家呢? 以下是五个小技巧供您参考&am…

NebulaGraph 知识图谱数据库使用:nebula数据库连接使用

参考:https://github.com/vesoft-inc/nebula-python/blob/master/example/GraphClientSimpleExample.py 文档:https://docs.nebula-graph.com.cn/3.4.1/3.ngql-guide/7.general-query-statements/2.match/#_4 pip install nebula3-python1)查询的节点&…

人工智能的头号威胁:投毒攻击

随着掌管数字生活入口的万亿美元俱乐部企业——苹果公司跳入人工智能(AI)赛道,AI技术民主化的大幕正式拉开,同时也将AI安全问题推向舆论的风口浪尖。 根据瑞银本周一的智能手机调查报告,在中国以外的智能手机用户中&am…

Vue63-配置代理-方式二

一、请求前缀:能灵活的控制走不走代理 1-1、请求前缀 有请求前缀的走代理服务器; 没有请求前缀的不走代理服务器。 修改代码中的请求地址,加上请求前缀 报错的原因: 解决方式: 1-2、ws配置项、changeOrigin配置项 二…